Плагин для ответа на несколько групповых событий - PullRequest
0 голосов
/ 11 февраля 2011

Я должен создать плагин, который должен отвечать на события, которые не принадлежат к группе, указанной в файле установки плагина.

Поэтому мне нужен совет, как этого добиться, не создавая отдельные плагины.

Если я создаю новую группу плагинов (указав новую группу в XML-файле), возможно ли это сделать? Я действительно пытался это сделать, но безуспешно. Я пытался даже регистрировать события вручную. Что я получил, это:

<?php
defined('_JEXEC') or die('Restricted Access');

jimport('joomla.plugin.plugin');

global $mainframe;

$mainframe->registerEvent('onAuthenticate', 'plgGroupNamePluginName');
$mainframe->registerEvent('onAfterDisplayTitle', 'plgGroupNamePluginName');

class plgGroupNamePluginName extends JPlugin {

    function plgGroupNamePluginName(& $subject, $config) {
        parent::__construct($subject, $config);
    }

    function onAfterDisplayTitle(& $article, & $params, $limitstart=0) {
        // TODO: Code
    }

    function onAuthenticate($credentials, $options, &$response) {
        // TODO: Some business logic
    }

}

Я чувствую, что в документации Joomla нет ясности по этому поводу, или, может быть, я что-то упускаю.

Если что-то не понятно, просто дайте мне знать. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2012

Плагины аутентификации являются одним из немногих исключений - они должны быть сделаны отдельно.Плагины аутентификации запускаются ДО любых системных плагинов, поэтому к тому времени, когда системный плагин запускается, уже слишком поздно.

Плагины основаны на шаблоне Dispatcher / Listener.Плагин при загрузке сообщает «Диспетчеру», о каких событиях он заинтересован в получении информации и какую функцию вызывать при возникновении этого события.С другой стороны, Joomla сообщает Dispatcher, когда происходят события, и отправляет ему некоторые данные, которые могут потребоваться для обработки события, а Dispatcher сообщает зарегистрированным слушателям.

Группы [System, User, Content] являются просто коллекциямисобытия, которыми интересуется слушатель - Joomla!загрузит разные группы в разное время.Таким образом, прослушиватели из группы System всегда загружаются после проверки подлинности - прослушиватели из группы Content будут загружаться только при наличии содержимого и т. Д.

«Диспетчер» в общем случае верен - но Joomla!допускает несколько диспетчеров.Перед авторизацией пользователя загружается специальный диспетчер аутентификации, который выбрасывается и заменяется «настоящим» диспетчером после аутентификации.

0 голосов
/ 11 февраля 2011

Во-первых, вам не нужны registerEvent звонки. Это будет сделано автоматически для вас, если вы продлите JPlugin. (И, следовательно, нет необходимости global $mainframe;)

Во-вторых, не используйте конструкторы в стиле PHP4. J! имеет класс объекта, который сделает эту работу за вас:

function __construct(& $subject, $config) {
    parent::__construct($subject, $config);
}

Теперь, что касается вашего вопроса, группы имеют значение только при загрузке плагинов. Они не имеют значения для исполнения. Поэтому, если вы создадите его как системный плагин, он всегда будет загружен и будет отвечать на все события, для которых у вас есть методы. На самом деле нет необходимости создавать собственную группу, если вы не хотите контролировать, когда она создается ...

Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...