При доступе к компоненту com_users в Joomla 1.6 и 1.7 в интерфейсе приложение автоматически импортирует все плагины из группы «user». Очевидно, что это очень полезно, если вы не хотите создавать компонент, чтобы просто передавать некоторые переменные в плагин.
ОК. давайте сделаем это проще:
В принципе, с помощью __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 } } }
Вау! Он работает, нет необходимости создавать целый контроллер для обработки одной простой задачи.
Но держись на минуту …
Эй, эй, ничего не происходит. Com_user ничего не импортировал и __конструктор не вызвал.
Я очень обеспокоен этим в Joomla 1.5, и мне не хочется писать весь компонент.
Если у кого-нибудь есть какая-то яркая идея, пожалуйста, дайте мне знать.
Изменить: я решил проблему, отправив ссылку в следующей форме:
http: /example.com/index.php? option = com_user & task = logout & emailactivation = 1 & u = 63 & d077b8106 = 1
Таким образом, пользовательские плагины включены и выполняются __конструкторы. Но это так легкомысленно, как task = logout на самом деле не поощряет клик по ссылке.
Проблема с 1.5 заключается в том, что события более ограничены. Доступны следующие события: Joomla 1.5 Plugin Events – Пользователь . Думаю, поэтому ваш плагин не инициирован.
Как сделать это системным плагином и проверить активацию в свойствах 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 } } } } }