プラグインを作成し、インストール後にスクリプトを実行しようとしています。何らかの理由で、スクリプトファイルが読み込まれているように見えますが、コードが実行されることはありません。
私のscript.phpファイルには以下が含まれています:
// No direct access
defined('_JEXEC') or die('Restricted access');
/**
* Script file for the plg_system_example plugin
*/
class plg_system_notifierInstallerScript{
/**
* Method to run after the plugin install, update, or discover_update actions have completed.
*
* @return void
*/
function postflight($type,$parent){
// For Testing Purposes
die('Hello World');
}
}
私は運が悪かったので、クラス名のいくつかの異なる派生を使用しようとしました。クラスの外にdie()ステートメントを配置すると、それが実行され、ファイルがロードされていると確信します。 install()などの他のメソッドも試しましたが、成功しませんでした。
Die()ステートメントの代わりに実際のコードがありましたが、この問題をデバッグする過程でこれに切り替えました。
そのJoomlaの何が悪いのでしょうか。インストール時にクラスのpostflight()メソッドを呼び出していませんか?
下線なしでクラス名を試しましたか?
「plgSystemNotifierInstallerScript」
(またはおそらく「plgSystemnotifierInstallerScript」は不明)
これは、私が確認した2つのプラグインが使用する形式のようです。
Joomla 3.4では、インストーラークラス名は、マニフェストのルートタグからのプラグイングループ(例:system
)に基づいています。
<extension type="plugin" group="system" version="3.0" method="upgrade">
そして、マニフェストの次の行に入るプラグイン名(例:myplugin
):
<filename plugin="myplugin">pluginfile.php</filename>
そして、あなたはそれをすべてplg
を前に付けて一緒にまとめます:
plgSystemMyPluginInstallerScript
Editors-xtdプラグインを実行している人がこのノートに遭遇した場合に備えて、papachoからのコメントに従って、ハイフンを削除してplgEditorsxtdMypluginnameInstallerScript
を使用する必要があることに注意してください。
したがって、マニフェストのプラグインMyPluginNameの場合はmypluginname.xml
<extension version="3.0" type="plugin" group="editors-xtd" method="upgrade">
...
<filename plugin="mypluginname">mypluginname.php</filename>
プラグインファイルmypluginname.php
class plgButtonMypluginname extends JPlugin {
...
とscript.php
ファイル
class plgEditorsxtdMypluginnameInstallerScript {
...
最後にそこに着いた... :-)
PSプラグインファイルでplgButton ...を使用する理由はわかりませんが、マニフェストとスクリプト(ハイフンなし)ではeditors-xtdですが、他の組み合わせは機能しないようです。
スクリプトインストーラーのクラス名は$ JPATH_ROOT/libraries/cms/installer/adapter.php:553で定義されています
$className = JFilterInput::getInstance()->clean($this->element, 'cmd') . 'InstallerScript';
// Cannot have - in class names
$className = str_replace('-', '', $className);
これは