Présentation
Pour pouvoir intercepter un évènement, il est nécessaire de passer par deux étapes :
- Indiquer dans le fichier module.xml que nous disposons d'un listener capable d'interpréter l'évènement
- créer un listener pour répondre à l'évènement.
Création du listener
Emplacement
Les listeners sont des classes qui seront stockées dans les répertoires /classes/ de vos modules. Les fichiers se nomment "nom.listener.php". La classe listener se nomme ListenerNom? et hérite de CopixListener. Le listener comporte des méthodes nommées processNomEvenementATraiter, un peu comme les méthodes actions dans les Actiongroup.
exemple
//fichier classes/exemple.listener.php class ListenerExemple extends CopixListener { function processEvenement ($pEvent, $pEventResponse){ //traitement de l'évènement } }
Paramètres des méthodes processXXX
$pEvent l'évènement donné en paramètre
$pEvent correspond à l'évènement (de type CopixEvent) qui a été lancé.
exemple
function processEvenement ($pEvent, $pEventResponse){ if ($idNews = $pEvent->getParam ('id_nouvelle')){ //traitement de la nouvelle d'id $idNews } }
$pEventResponse pour apporter une réponse
Le paramètre $pEventResponse est de type CopixEventResponse et vous permet d'indiquer à l'appelant que vous avez effectué des traitements.
function processEvenement ($pEvent, $pEventResponse){ //des traitements sont effectués //la réponse doit être donnée sous la forme d'un tableau clef / valeur $pEventResponse->add (array ('elementDeResponse'=>'valeur', 'elementDeReponse2'=>'valeur2')); }
Enregistrement dans le fichier module.xml
Lorsque vous avez développé votre listener et que vous l'avez préparé pour répondre correctement aux évènements désirés, il vous suffit de l'enregistrer dans le fichier module.xml du module qui écoute les évènements en question (peu importe celui qui les lance) dans la section events / listeners.
Vous écrirez une balise listener pour chaque listener que vous déclarez. Vous indiquez une balise "event" pour chaque évènement auquel répond votre listener.
Note : Pour que votre listener soit actif, il faut que le module auquel il appartient soit installé.
