フック処理

目次

フック処理

Acms\Custom\Hookクラス(extension/acms/Hook.php)のもつ各タイミングメソッドに処理を記述することで、特定タイミングで独自の処理を追加して実行できるようになります。

例えば以下のような用途で利用することが出来ます。

  • GETモジュールに渡されるテンプレート文字列の編集
  • POSTモジュール処理後に、データのロギングを追加
  • HTMLレスポンス全体に対するフィルタリング処理
  • グローバル変数の追加

PHPに関する知識が必要です。以降の説明についてもPHPの基礎知識がある前提で進めていますのでご了承ください。

利用方法

まず、config.server.php の HOOK_ENABLE を1にしてフック拡張を有効にします。

define('HOOK_ENABLE', 1);

extension/acms/Hook.php のファイルを修正していきます。

(サンプル) 独自グローバル変数の作成

/**
 * グローバル変数の拡張
 *
 * @param array $globalVars
 */
public function extendsGlobalVars(&$globalVars)
{
  // htmlに%{GLOBALVARS} と記載すると、画面で見た時に「グローバルへんすう」と表示
  $globalVars->setField('GLOBALVARS', 'グローバルへんすう');
}

(サンプル) GETモジュール処理前のテンプレートを変更

/**
 * GETモジュール処理前
 * 解決前テンプレートの中間処理など
 *
 * @param string   &$tpl
 * @param ACMS_GET $thisModule
 */
public function beforeGetFire(&$tpl, $thisModule)
{
    // モジュールのbidが1のときにテンプレートを編集
    if ( $thisModule->bid === 1 ) {
        $tpl = str_replace('foo', 'bar', $tpl);
    }
}

(サンプル) GETモジュールをビルドした後のレスポンス文字列に対するフィルタ

/**
 * ビルド後(GETモジュール解決後)
 * ※ 空白の除去・文字コードの変換・POSTモジュールに対するSIDの割り当てなどはこの後に行われます
 *
 * @param string &$res レスポンス文字列
 */
public function afterBuild(&$res)
{
    // ここでの$resは参照渡しされています
    $res = str_replace('%[ORIGINAL_VAR]%', 'オリジナル変数の置き換え', $res);
}

(サンプル) POSTモジュール処理後の処理追加

/**
 * POSTモジュール処理前
 * $thisModuleのプロパティを参照・操作するなど
 *
 * @param ACMS_POST $thisModule
 */
public function afterPostFire($thisModule)
{
    $moduleName = get_class($thisModule);

    switch($moduleName) {
        case 'ACMS_POST_Entry_Insert':
        case 'ACMS_POST_Entry_Update':
        // エントリー更新の後に何らかの処理を行う
        
        // POSTモジュールの持っていた関連パラメータを参照できます
        var_dump($thisModule)
        
        break;
    }
}