it-swarm.dev

Los eventos onUserLogin y onUserAfterLogin no parecen activarse

Estoy tratando de escribir un complemento simple que se ejecuta después de que el usuario inicia sesión en el sistema. He escrito contenido y complementos de autenticación antes sin problemas. En este caso, he eliminado el complemento a lo siguiente y todavía no veo evidencia de que se ejecute.

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

He probado los eventos onUserLogin y onUserAfterLogin y nunca veo que se ejecute el complemento. Mi archivo xml es el siguiente:

<?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>

Cualquier ayuda o código de ejemplo de un complemento que funcione será apreciado. Nunca tuve tales problemas antes, espero que lo que me falta sea dolorosamente obvio.

Además, la configuración de conexión es irrelevante en este ejemplo. El complemento real se conecta a una base de datos externa.

2
Andy

No mencionas una versión de Joomla, así que supongo 3.x, aunque esto debería ser más o menos lo mismo para 2.5.x.

Como se mencionó, el nombre de la clase de su complemento es incorrecto, el nombre de la clase se deriva del nombre y tipo del complemento, y las convenciones y estructura de nomenclatura de archivos/carpetas para el complemento ayudan a Joomla a encontrar y cargar los archivos php correctos.

Si su complemento está en /plugins/user/ Y su carpeta es test, el archivo principal es test.php (Con un archivo test.xml) Entonces su clase debería llamarse PlgUserTest.

JPluginHelper básicamente carga una categoría de complementos (authentication, captcha, content, ... user etc.) en ::importPlugin() según el tipo, por ejemplo user. Primero obtiene los complementos publicados de la base de datos (por lo que su complemento debe estar registrado en Joomla, esto sucede en el proceso de instalación o puede usar la opción "Descubrir" en el Administrador de extensiones).

El método importPlugin() luego recorre los complementos publicados que coinciden con $type Se le ha pedido que cargue, para cada coincidencia import() es el complemento principal php archivo construyendo el $path de esta manera:

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

A partir de eso, puede ver que la ruta a su archivo debe ser:

/plugins/users/test/test.php

Una vez que tiene el archivo, carga la clase creando el $className A partir de los atributos que ya tiene usando esta línea:

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

A partir de esto, puede ver que el nombre de su clase debe ser PlgUserTest

6
Craig

Creo que si hace que su complemento forme parte del grupo user, debe cambiar el nombre de la clase a:

PlgUserTest
0
Valentin Despa