Joomla 1.5 com_user和导入用户插件,如Joomla 1.6及更高版本

时间:2011-08-29 22:52:58

标签: php model-view-controller joomla joomla1.5 joomla-extensions

在前端访问Joomla 1.6和1.7中的com_users组件时,应用程序会自动从'user'组导入所有插件。显然,如果不想创建一个组件来简单地将一些变量传递给插件,它就非常有用。

确定。让我们更简单:

  1. 用户获取激活链接:http://example.com/index.php?option=com_users&task=edit&emailactivation=1&u=63&d077b8106=1并点击它。
  2. 当然,该组件将省略电子邮件,其他参数只需显示“编辑个人资料表”(或客人的登录表单)。
  3. 然后JAp​​plication从'用户'组导入所有插件,触发__constructors
  4. 基本上,使用插件的 __构造函数,可以设置如下所示的简单操作:

    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选项= com_user&安培;的任务=注销&安培; emailactivation = 1&安培; U = 63&安培; d077b8106 = 1

    这样就包含了用户插件,并执行了__constructors。但这太无聊了,因为 task = logout 并不真的鼓励点击链接。

1 个答案:

答案 0 :(得分: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                        
            }
        }       
    }       
 }      
}