Joomla 1.5 com_user и импорт пользовательских плагинов, таких как Joomla 1.6 и выше - PullRequest
3 голосов
/ 30 августа 2011

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

Хорошо.Давайте сделаем это проще:

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

1 Ответ

1 голос
/ 30 августа 2011

Проблема с 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                        
            }
        }       
    }       
 }      
}
...