При доступе к компоненту com_users в Joomla 1.6 и 1.7 на внешнем интерфейсе приложение автоматически импортирует все плагины из группы «user». Очевидно, что это очень полезно, если вы не хотите создавать компонент, чтобы просто передать некоторые переменные плагину.
В порядке. давайте сделаем это проще:
- Пользователь получает ссылку для активации: http://example.com/index.php?option=com_users&task=edit&emailactivation=1&u=63&d077b8106=1 и нажимает на него.
- Конечно, компонент не будет использовать активацию электронной почты и другие параметры, просто отображая «Форму редактирования профиля» (или форму входа для гостей).
- Затем 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
Таким образом подключаются пользовательские плагины и выполняются __конструкторы. Но это настолько легкомысленно, поскольку task=logout на самом деле не побуждает щелкнуть ссылку.