2011-02-11 16 views
0

플러그인 설치 파일에 지정된 그룹에 속하지 않는 이벤트에 응답해야하는 플러그인을 만들어야합니다.여러 그룹 이벤트에 응답하는 플러그인

그래서 별도의 플러그인을 만들지 않고이를 수행하는 방법에 대한 조언이 필요합니다.

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 
    } 

} 

나는 줌라 문서가이 일에 명확하지 않다 느낌, 또는 어쩌면 내가 뭔가를 놓친 거지.

뭔가 명확하지 않은 경우 알려주세요. 도움을 주시면 감사하겠습니다.

답변

0

우선, registerEvent 전화가 필요하지 않습니다. JPlugin을 확장하면 자동으로 처리됩니다. (따라서 global $mainframe;은 필요 없습니다.)

둘째, PHP4 스타일 생성자를 사용하지 마십시오. J!

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

이제, 그룹은 플러그인을로드 할 때만 문제가됩니다. 그들은 실행에 중요하지 않습니다. 따라서 시스템 플러그인으로 생성하면 항상로드되어 메소드가있는 모든 이벤트에 응답합니다. 인스턴스를 생성 할 때 제어하지 않으려면 자신의 그룹을 만들 필요가 없습니다 ...

그게 의미가 있습니까?

+0

최대한 빨리 시도하고 결과를 알려 드리겠습니다. – jithujose

+0

그것은 작동하지만 .. 한 가지 문제가 있습니다. 위에서 말한대로 onAfterRoute 및 onAuthenticate 함수를 사용하여 새로운 시스템 플러그인을 만들었습니다. onAfterRoute는 정상적으로 작동하지만 onAuthenticate가 작동하지 않습니다. 당신이 말한 것을 확인하기 위해, 나는 onLoginUser 함수를 추가했는데 그것은 정상적으로 작동합니다. 나는 onAuthenticate 문제가 호출 순서와 관련이 있다고 생각한다.인증 프로세스를 처리하고 싶지 않기 때문에 Joomla 인증 플러그 인을 활성화 시켰습니다. 그러나 사용자 로그인 전에 비즈니스 로직을 수행하기를 원합니다. 그래서 플러그인에 onAuthenticate 함수를 추가했습니다. – jithujose

+0

내 onAuthenticate 함수는 실제로 Joomla auth plugin의 onAuthenticate 함수 후에 호출되거나 호출되지 않는다고 생각합니다. Joomla 인증 플러그 인의 onAuthenticate 함수 전에 내 onAuthenticate 함수를 호출 할 수있는 방법이 있습니까? – jithujose

0

인증 플러그인은 거의 예외 사항 중 하나입니다. 인증 플러그인은 별도로 수행해야합니다. 인증 플러그인은 시스템 플러그인 이전에 실행되므로 시스템 플러그인이 실행될 때까지는 너무 늦었습니다.

플러그인은 Dispatcher/Listener 패턴을 기반으로합니다. 플러그인은로드 될 때 "Dispatcher"에게 어떤 이벤트에 대해 정보를 얻고 그 이벤트가 발생할 때 어떤 기능을 호출해야하는지 알려줍니다. Flipside에서 Joomla는 이벤트가 발생할 때 Dispatcher에게 알려주고 이벤트 처리에 필요할 수있는 데이터를 보내고 Dispatcher는 등록 된 리스너에게 알려줍니다.

그룹 [시스템, 사용자, 컨텐츠]는 청취자가 관심을 갖는 이벤트의 모음입니다. - Joomla! 다른 시간에 다른 그룹을로드합니다. 따라서 시스템 그룹의 청취자는 인증 후에 항상로드됩니다. 콘텐츠 그룹의 수신자는 콘텐츠 등이있는 경우에만로드됩니다.

"Dispatcher"는 일반적으로 사실이지만 Joomla! 여러 디스패처를 허용합니다. 사용자가 권한을 부여 받기 전에 특수 인증 발송자가로드되어 인증 후 "실제"발송자로 대체됩니다.

관련 문제