プラグインのインストールでスクリプトが実行されない


7

プラグインを作成していて、インストール後にスクリプトを実行しようとしています。何らかの理由で、スクリプトファイルが読み込まれているように見えますが、コードが実行されることはありません。

私の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()メソッドを呼び出していませんか?


1
その外観から、クラス「plg_system_notifierInstallerScript」の名前は不正確だと思います。
Mike Feng

私は参考のために掲載する、別の答えにいくつかのより多くの光を当てる助け:joomla.stackexchange.com/questions/24012/...
リッカルド・ソーン

回答:


7

下線なしでクラス名を試しましたか?

「plgSystemNotifierInstallerScript」

(またはおそらく「plgSystemnotifierInstallerScript」は不明)

これは、私が確認した2つのプラグインが使用する形式のようです。


plgSystemNotifierInstallerScriptは期待どおりに機能しました。奇妙なことに、これはアンダースコアの使用を明確に示すJoomla!のドキュメントとは対照的です。=(ご協力ありがとうございます!
Zachary Draper 14

ドキュメントまたは命名規則に関するコードへの明確な参照を提供することにより、回答を改善することは素晴らしいことです。ありがとう!
Valentin Despa 2014

@ValentinDespa実際のドキュメントは見つかりませんでした。モジュールとコンポーネントにはいくつかありますが、命名規則は異なります。それはアンダースコアを持っているので、それはおそらくザカリー・ドレイパーが反対にドキュメンテーションと話していたものです。
Ville Niemi 14

キャメルケースが正しくなるまで、これを機能させることはできませんでした。plgSystemPluginnameInstallerScriptプラグイン名の最初の文字のみが大文字になります。David(下記)は良い説明をしていますが、大文字の要件を満たしていません。
Michael

3

Joomla 3.4では、インストーラークラス名はsystem、マニフェストのルートタグからのプラグイングループ(など)に基づいています。

    <extension type="plugin" group="system" version="3.0" method="upgrade">

そして、mypluginマニフェストの次の行に入るプラグイン名(例:):

    <filename plugin="myplugin">pluginfile.php</filename>

そして、あなたはそれをすべてのplgように前に付けてまとめます:

    plgSystemMyPluginInstallerScript

2

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ですが、他の組み合わせは機能しないようです。


1

スクリプトインストーラーのクラス名は$ 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);

これは

  • plg => PLGNAME InstallerScript
  • mod => MODNAME InstallerScript
  • コンポーネント=> COMNAME InstallerScript
  • template => TEMPLATENAME InstallerScript
    widthout str-replaceによって抑制される「-」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.