これはモジュールで行うことができます。
1.インサイド
モジュールを作成したフォルダは、フォルダtestmodule
を作成し、内部のPHPファイルtestmodule.php
を作成するモジュール。
フックactionDispatcher
はすべてのページコントローラのインスタンス化の後に実行され、修飾子プラグインをsmartyに登録します。
require_once _PS_MODULE_DIR_ . 'testmodule' . DIRECTORY_SEPARATOR . 'TestClass.php';
class TestModule extends Module {
public function __construct()
{
$this->name = 'testmodule';
$this->tab = 'front_office_features';
$this->version = '1.0';
parent::__construct();
$this->displayName = $this->l('Test Module');
$this->description = $this->l('Testing smarty plugins.');
}
public function install()
{
return parent::install() && $this->registerHook('actionDispatcher');
}
public function hookActionDispatcher()
{
/*
We register the plugin everytime a controller is instantiated
'modifier' - modifier type of plugin
'testToUpper' - plugin tag name to be used in templates,
array('TestClass', 'toUpperMethod') - execute toUpperMethod() from class TestClass when using modifier tag name
*/
$this->context->smarty->registerPlugin('modifier', 'testToUpper', array('TestClass', 'toUpperMethod'));
}
}
2.ファイルTestClass.php
を作成するのと同じモジュールフォルダで修飾法
を保持するクラスを作成します。 スマートプラグインが呼び出されたときに実行する静的メソッドを記述します。この簡単なテストでは、大文字にしたい文字列を修正します。
class TestClass {
public static function toUpperMethod($param)
{
return strtoupper($param);
}
}
モジュールをインストールし、大文字にページ名をエコーと変えていく前のページ
{$page_name|testToUpper}
に、たとえば任意のテンプレートで、あなたのプラグインを使用することができます。
たとえば、配列の修飾語を使用しようとすると、スマートプラグインを登録する際の基本です。
オーバーライドがなく、コアハッキングも不要です。
ありがとう、このフックは、コントローラがロードされた直後の初期化には本当に良い場所です。 – AlexandrX
ありがとうございます! – iamrobert