Joomla 1.5 com_user и импорт пользовательских плагинов, таких как Joomla 1.6 и выше

При доступе к компоненту com_users в Joomla 1.6 и 1.7 на внешнем интерфейсе приложение автоматически импортирует все плагины из группы «user». Очевидно, что это очень полезно, если вы не хотите создавать компонент, чтобы просто передать некоторые переменные плагину.

В порядке. давайте сделаем это проще:

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

Таким образом подключаются пользовательские плагины и выполняются __конструкторы. Но это настолько легкомысленно, поскольку task=logout на самом деле не побуждает щелкнуть ссылку.


person WooDzu    schedule 29.08.2011    source источник


Ответы (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                        
            }
        }       
    }       
 }      
}
person hbit    schedule 30.08.2011
comment
Мне это нужно как пользовательский плагин, к тому же ваш код будет выполняться на всех подстраницах даже в com_content - person WooDzu; 30.08.2011
comment
на самом деле я временно решил свою проблему, см. обновленный вопрос - person WooDzu; 30.08.2011
comment
Да, плагин всегда выполняется. Но вычислительных усилий не так много, так как он тщательно проверяет, находится ли он в нужном месте, и, например, в com_content немедленно возвращается из выполнения. - person hbit; 30.08.2011