Joomla 1.5的com_user和导入用户插件,如Joomla 1.6及以上版本

3

在访问Joomla 1.6和1.7的前端中的com_users组件时,应用程序会自动导入“用户”组中的所有插件。显然,如果一个人不想创建一个组件仅仅是为了传递一些变量到一个插件中,这将非常有用。

好吧,让我们简化一下:

  1. 用户收到激活链接:http://example.com/index.php?option=com_users&task=edit&emailactivation=1&u=63&d077b8106=1并单击它。
  2. 当然,该组件将忽略emailactivation和其他参数,只显示“编辑个人资料表单”(或者对于访客来说是登录表单)。
  3. 然后,JApplication从“user”组中导入所有插件,这将触发__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?option=com_users更改为index.php?option=com_user
  • 让我们在Joomla 1.5上尝试一下...

嘿,嘿,什么都没发生,com_user根本没有导入任何东西,并且__constructor也没有被调用。

我在Joomla 1.5中感到非常困扰,不想编写整个组件。

如果有人有什么好主意,请告诉我。

编辑: 我通过以以下形式发送链接来解决我的问题:

http:/example.com/index.php?option=com_user&task=logout&emailactivation=1&u=63&d077b8106=1

这样用户插件就会被包含并且__constructors也会被执行。但是这太轻率了,因为task=logout并不真正鼓励点击链接。

1个回答

1

1.5 版本的问题在于事件的限制更多。您可以使用以下事件:Joomla 1.5 插件事件 - 用户。我猜想,因此您的插件未被启动。

将其作为系统插件,并检查 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                        
            }
        }       
    }       
 }      
}

我需要它作为用户插件,此外您的代码将在所有子页面上执行,即使在“com_content”中也是如此。 - WooDzu
实际上,我已经暂时解决了我的问题,请查看更新的问题。 - WooDzu
是的,插件总是被执行。但计算量不大,因为它会彻底检查是否在正确的位置,并且例如在“com_content”中立即从执行中返回。 - hbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接