a-blog cms でカスタムフィールドをグローバル変数化する方法
a-blog cms 1.6 をリリースして玄人好みの改善として一番にあげられる機能は「グローバル変数を追加する」という部分じゃないだろうか。基本的には php を触る事なくカスタマイズできるというのが a-blog cms の一番の良さではあるので、どうしてもやりたい!って時に参考にして下さい。
config.server.php を修正する
システム上、Hook機能を利用についてはオフになっていますので、この設定を変更します。初期は 0 になっていますので、1 に設定します。
define('HOOK_ENABLE', 1);
Hook.php について
Hook.php を利用する事により、a-blog cms の各処理にオリジナルのプログラムを組み込む事ができるようになります。通常のインストール時には、今回触るファイルは存在していません。omake/php/ACMS/User/Hook.php のファイルにありますので、これをコピーして利用します。処理としては、以下の8つが用意されています。
- GETモジュール処理前 / beforeGetFire
- GETモジュール処理後 / afterGetFire
- POSTモジュール処理前 / beforePostFire
- POSTモジュール処理後 / afterPostFire
- ビルド前(GETモジュール解決前)/ beforeBuild
- ビルド後(GETモジュール解決後)/ afterBuild
- 処理の一番最後のシャットダウン時 / beforeShutdown
- グローバル変数の拡張 / extendsGlobalVars
一番下のものが、今回紹介する部分になります。
extendsGlobalVars を以下のように設定すると、EID が設定されている(詳細ページ)の時に、全てのカスタムフィールドをグローバル変数化する事ができます。
/** * グローバル変数の拡張 * * @param array $globalVars */ public function extendsGlobalVars($globalVars) { if( EID ){ $Field = loadEntryField(EID); $globalVars->setField('FIELD_TEMPLATE',$Field->get('template') ); } }
上記のように書く事で、エントリーのカスタムフィールド「template」に入ったデータを グローバル変数 %{FIELD_TEMPLATE} と編集する事ができるようになります。
参考までに、エントリーのカスタムフィールド「template」の登録用のソースは以下のようなHTMLになります。これを設置先のテーマの /admin/entry/field.html に記述下さい。
<select name="template"> <option value=""></option> <option value="テンプレート1"{template:selected#テンプレート1}>template1</option> <option value="テンプレート2"{template:selected#テンプレート2}>template2</option> <option value="テンプレート3"{template:selected#テンプレート3}>template3</option> </select> <input type="hidden" name="field[]" value="template" />
この活用というところでは、Entry_Body 等の中くらいに以下のようなインクルードが書けるようになります。これができると嬉しい人っているんじゃないかと思います。いかがでしょうか?
<!--#include file="/include/entry/%{FIELD_TEMPLATE}.html-->