web-dev-qa-db-ja.com

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

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

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

7
Zachary Draper

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

「plgSystemNotifierInstallerScript」

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

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

7
Ville Niemi

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

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

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

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

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

    plgSystemMyPluginInstallerScript
3
David

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

2
RogerCO

スクリプトインストーラーのクラス名は$ 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
  • テンプレート=> [〜#〜]テンプレート名[〜#〜] InstallerScript
    widthout str_replaceによって抑制される「-」
1
papacho