web-dev-qa-db-ja.com

onUserLoginおよびonUserAfterLoginイベントが発生しないようです

ユーザーがシステムにログインした後に実行される単純なプラグインを作成しようとしています。私は以前に問題なくコンテンツと認証プラグインを書きました。この場合、プラグインを次のように削除しましたが、実行される証拠はまだありません。

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

OnUserLoginとonUserAfterLoginの両方のイベントを試しましたが、プラグインが実行されることはありません。私のxmlファイルは次のとおりです。

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

機能しているプラ​​グインからのヘルプまたはサンプルコードをいただければ幸いです。以前にそのような問題を経験したことはありません。うまくいけば、私が見逃しているものは何でも痛いほど明白です。

また、この例では接続設定は関係ありません。実際のプラグインは外部データベースに接続します。

2
Andy

Joomlaのバージョンについては触れていないので、3.xを想定していますが、これは2.5.xでもほぼ同じです。

言及したように、プラグインのクラス名は正しくありません。クラスの名前はプラグインの名前とタイプから派生し、プラグインのファイル/フォルダーの命名規則と構造は、Joomlaが正しいphpファイルを見つけてロードするのに役立ちます。

プラグインが_/plugins/user/_にあり、そのフォルダーがtestであり、メインファイルが_test.php_である場合(_test.xml_ファイルを使用)、クラスはPlgUserTestと呼ばれる必要があります。

JPluginHelperは基本的に、プラグインのカテゴリ(authenticationcaptchacontent、... userなど)をタイプに基づいて::importPlugin()でロードします。 user。まず、データベースから公開されたプラグインを取得します(プラグインをJoomlaに登録する必要があります。これはインストールプロセスで行われるか、Extension Managerの[Discover]オプションを使用できます)。

次に、importPlugin()メソッドは、ロードするように要求された_$type_に一致する公開プラグインをループします。一致するたびに、import()はプラグインのメインのphpファイルで、_$path_にこのように:

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

それから、ファイルへのパスが次のようになるはずです。

_/plugins/users/test/test.php
_

ファイルを取得したら、次の行を使用して、すでに持っている属性から_$className_を作成してクラスをロードします。

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

これから、クラス名はPlgUserTestであることがわかります

6
Craig

プラグインをuserグループの一部にする場合、クラス名を次のように変更する必要があると思います。

PlgUserTest
0
Valentin Despa