web-dev-qa-db-fra.com

Les événements onUserLogin et onUserAfterLogin ne semblent pas se déclencher

J'essaie d'écrire un simple plug-in qui s'exécute une fois que l'utilisateur s'est connecté au système. J'ai écrit du contenu et des plugins d'authentification auparavant, sans aucun problème. Dans ce cas, j'ai réduit le plug-in à ce qui suit et je ne vois toujours aucune preuve qu'il soit exécuté.

<?php 
  defined('_JEXEC') or die; 
  class Plgtest extends JPlugin {   
    public function onUserLogin($user, $options = array()) {
      JFactory::getApplication()->enqueueMessage('I Ran!.', 'message');   
    } 
  } 
 ?>

J'ai essayé à la fois les événements onUserLogin et onUserAfterLogin et je ne vois jamais l'exécution du plug-in. Mon fichier XML est comme suit:

<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="3.0" method="upgrade" group="user">
    <name>User - test</name>
    <creationDate>2014-07-19</creationDate>
    <version>1.0</version>
    <releaseDate>2014-07-19</releaseDate>
    <releaseType>First release!</releaseType>
    <author>me</author>
    <authorEmail>[email protected]</authorEmail>
    <authorUrl>www.me.com</authorUrl>
    <copyright>(c) 2014 me</copyright>
    <description>test</description>
    <files>
    <filename plugin="test">test.php</filename>
    </files>
    <config>            
        <fields name="params">
            <fieldset name="general_settings" label="Connection Settings">
                <field name="Host" type="text" default="127.0.0.1" label="Host" description="Database Host." />
                <field name="database" type="text" default="" label="Database" description="Database name." />
                <field name="prefix" type="text" default="" label="Prefix" description="Database prefix, may be blank." />
                <field name="user" type="text" default="" label="User" description="User name." />
                <field name="password" type="password" default="" label="Password" description="User password." />
            </fieldset>
        </fields>
    </config>
</extension>

Toute aide ou exemple de code d'un plugin fonctionnel serait apprécié. Jamais de tels problèmes n’avaient eu lieu auparavant, espérons que tout ce qui me manque est douloureusement évident.

De plus, les paramètres de connexion ne sont pas pertinents dans cet exemple. Le vrai plugin se connecte à une base de données externe.

2
Andy

Vous ne mentionnez pas une version de Joomla, donc je suppose 3.x, bien que cela devrait être à peu près le même pour 2.5.x.

Comme mentionné, le nom de classe de votre plugin est incorrect, le nom de la classe est dérivé du nom et du type du plugin, et les conventions et structure de dénomination de fichier/dossier pour l'aide du plugin Joomla trouver et charger les bons fichiers php.

Si votre plugin est dans /plugins/user/ Et que son dossier est test, le fichier principal est test.php (Avec un fichier test.xml), Alors votre classe devrait s'appeler PlgUserTest.

JPluginHelper charge essentiellement une catégorie de plugins (authentication, captcha, content, ... user etc) dans ::importPlugin() basé sur le type, par exemple user. D'abord, il récupère les plugins publiés dans la base de données (votre plugin doit donc être enregistré auprès de Joomla, cela se produit lors du processus d'installation ou vous pouvez utiliser l'option "Découvrir" dans Extension Manager).

La méthode importPlugin() parcourt ensuite les plug-in publiés correspondant au $type Qu'il a été chargé de charger, pour chaque correspondance, import() 'du plugin main php fichier en construisant le $path comme suit:

$path = JPATH_PLUGINS . '/' . $plugin->type . '/' . $plugin->name . '/' . $plugin->name . '.php';

A partir de là, vous pouvez voir que le chemin d'accès à votre fichier devrait être:

/plugins/users/test/test.php

Une fois le fichier obtenu, il charge la classe en créant le $className À partir des attributs qu’il a déjà en utilisant cette ligne:

$className = 'Plg' . $plugin->type . $plugin->name;

A partir de là, vous pouvez voir que le nom de votre classe doit être PlgUserTest

6
Craig

Je pense que si vous intégrez votre plugin dans le groupe user, vous devez changer le nom de la classe en:

PlgUserTest
0
Valentin Despa