3

在前端访问Joomla 1.6和1.7中的com_users组件时,应用程序会自动导入来自'用户'组的所有插件。显然,如果你不想创建一个组件来简单地将一些变量传递给一个插件,这是非常有用的。Joomla 1.5 com_user和导入用户插件,如Joomla 1.6和更高版本

好的。让我们更简单:

  1. 用户获得激活链接:http://example.com/index.php?option=com_users&task=edit&emailactivation=1&u=63&d077b8106=1并点击它。
  2. 当然,组件将省略emailactivation和其他参数,简单地显示“编辑个人资料表格”(或登录表格)。
  3. 然后JAp​​plication进口所有插件从 '用户' 组,这将触发__constructors

基本上,插件的__constructor一个可以设置简单的动作像下面这样:

class plgUserAccountactivation extends JPlugin 
{ 
    public function __construct(& $subject, $config) 
    { 
     parent::__construct($subject, $config); 

     if(isset($_GET['emailactivation'])) { 
      // check token 
      // activate account, email or whatever 
      // redirect with message 
     } 
    } 
} 

哇!它工作,没有必要创建一个完整的控制器来处理一个简单的任务。

但是等一下...

  • 在链路变化的index.php?选择= com_users到index.php?选择= com_user
  • 而且,我们尝试的Joomla 1.5 ...

嘿,嘿,没有任何反应com_user根本没有导入任何东西,__constructor也没有调用。

我很担心这个在Joomla 1.5中,我不想写整个组件。

如果有人有一些明智的想法,请让我知道。

编辑:

HTTP:: 我已经通过发送以下形式的联系解决我的问题/example.com/index.php选项= com_user & 任务=注销 & emailactivation = 1 & U = 63 & d077b8106 = 1

这样用户插件被包括和__constructors被执行。但是,这是如此无趣,任务=注销并不真正鼓励点击链接。

回答

1

1.5的问题是,事件更有限。您有以下活动可用:Joomla 1.5 Plugin Events - User。我想你的插件没有启动。

如何使它成为系统插件并检查URL /请求属性中的激活?喜欢的东西:

class plgSystemUseractiavation extends JPlugin { 

    function onAfterInitialise(){ 

    $u = &JURI::getInstance(); 
    $option = trim(strtolower($u->getVar('option'))); 
    $emailactivation = trim(strtolower($u->getVar('emailactivation'))); 

    if(strlen($option < 1)){ // for SEF... 
     $option = trim(strtolower(JRequest::getString('option'))); 
    } 

    $app =& JFactory::getApplication(); 
    $appName = trim(strtolower($app->getName())); 
    if($appName === 'site'){ 
     if(($option === 'com_users') || ($option === 'com_user')){ 
      if($emailactivation === '1'){ 
       // check token 
       // activate account, email or whatever 
       // redirect with message       
      } 
     }  
    }  
}  
} 
+0

我需要它作为用户插件,除了你的代码将在所有子网页被执行,即使在“com_content” – WooDzu

+0

其实我已经解决我的问题暂时的,看到更新的问题 – WooDzu

+0

是,插件总是执行。但计算工作量并不大,因为它会彻底检查它是否在正确的位置,例如在“com_content”中立即从执行中返回。 – hbit