ユーザーがシステムにログインした後に実行される単純なプラグインを作成しようとしています。私は以前に問題なくコンテンツと認証プラグインを書きました。この場合、プラグインを次のように削除しましたが、実行される証拠はまだありません。
<?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>
機能しているプラグインからのヘルプまたはサンプルコードをいただければ幸いです。以前にそのような問題を経験したことはありません。うまくいけば、私が見逃しているものは何でも痛いほど明白です。
また、この例では接続設定は関係ありません。実際のプラグインは外部データベースに接続します。
Joomlaのバージョンについては触れていないので、3.xを想定していますが、これは2.5.xでもほぼ同じです。
言及したように、プラグインのクラス名は正しくありません。クラスの名前はプラグインの名前とタイプから派生し、プラグインのファイル/フォルダーの命名規則と構造は、Joomlaが正しいphpファイルを見つけてロードするのに役立ちます。
プラグインが_/plugins/user/
_にあり、そのフォルダーがtest
であり、メインファイルが_test.php
_である場合(_test.xml
_ファイルを使用)、クラスはPlgUserTest
と呼ばれる必要があります。
JPluginHelper
は基本的に、プラグインのカテゴリ(authentication
、captcha
、content
、... 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
であることがわかります
プラグインをuser
グループの一部にする場合、クラス名を次のように変更する必要があると思います。
PlgUserTest