在访问Joomla 1.6和1.7的前端中的com_users组件时,应用程序会自动导入“用户”组中的所有插件。显然,如果一个人不想创建一个组件仅仅是为了传递一些变量到一个插件中,这将非常有用。
好吧,让我们简化一下:
- 用户收到激活链接:http://example.com/index.php?option=com_users&task=edit&emailactivation=1&u=63&d077b8106=1并单击它。
- 当然,该组件将忽略emailactivation和其他参数,只显示“编辑个人资料表单”(或者对于访客来说是登录表单)。
- 然后,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并不真正鼓励点击链接。