グローバル変数の作り方

※この記事の内容は2015年11月に開催された a-blog cms Training Camp 2015 Autumn の中で行われたグローバル変数の作り方講座の内容です。

グローバル変数

グローバル変数は、テンプレートに記述することで、表示中のページが持つ情報を出力します。テンプレート上、モジュールやインクルードよりも先に処理されます。
利用できるグローバル変数の一覧

グローバル変数の作り方

準備

グローバル変数を作るにはHookを利用します。そのためにはHookを有効に設定変更をする必要があります。
config.server.phpの次の箇所を1にしてください。

define('HOOK_ENABLE', 1);

グローバル変数は $globalVars->set('ラベル', '値' ); と記述すると作成され、テンプレートファイルには%{ラベル}で値が出力されるようになります。

$globalVars->set('ラベル', '値' );

練習課題1:グローバル変数を作成する

現在の四季をグローバル変数にします。/php/ACMS/User/Hook.phpのextendsGlobalVars function内に記述を次のように追加します。下記のコードでは、現在の月(date('n'))から春夏秋冬を割り当てています。

public function extendsGlobalVars($globalVars)
{
	if( 3 <= date('n') && date('n') <= 5 ){ // 3月〜5月は春
		$globalVars->set('SEASON', 'spring' );
	}else if( 6 <= date('n') && date('n') <= 8 ){ // 6月〜8月は夏
		$globalVars->set('SEASON', 'summer' );
	}else if( 9 <= date('n') && date('n') <= 11 ){ // 9月〜11月は秋
		$globalVars->set('SEASON', 'autumn' );
	}else { // その他(1月,2月,12月)は冬
		$globalVars->set('SEASON', 'winter' );
	}
}

あとは、テンプレートに%{SEASON}と記述すると、現在の月から季節のアルファベットがセットされます。
class="%{SEASON}Color" とすれば、springColorなど季節に応じたClassを変化させることができます。

練習課題2:ユーザーのカスタムフィールドをグローバル変数にする

ユーザーのカスタムフィールドをグローバル変数にし、ログインしているユーザーの情報によってページの内容を切り替える仕組みを実装します。
まずはユーザーのカスタムフィールドを用意します。変数名はuser_typeとしています。
※user_typeのカスタムフィールドは、物件情報のエントリーにあるカスタムフィールド、station:最寄駅(あの駅、この駅、その駅)と同じ値が登録できるようにしてください。
カスタムフィールドが用意できたら、課題1と同様にHook.phpのextendsGlobalVars function内に記述を追加します。

public function extendsGlobalVars($globalVars)
{
	$str_user_type = '';
	if( defined('SUID') ){
		$Field = loadUserField(SUID);
		$str_user_type = $Field->get('user_type');
	}
	$globalVars->set('USER_TYPE', $str_user_type );
}

通常、テンプレートにカスタムフィールドを使用したい場合は<!-- BEGIN_MODULE User_Field -->{user_type}<!-- END_MODULE User_Field -->で使用できますので、グローバル変数にする必要はあまりありません。
グローバル変数にすることによって出来ることとしては、モジュールIDの設定やモジュールID名でグローバル変数を使用することができる点があります。

課題1:練習課題1で作成した%{SEASON}を利用する

%{SEASON}のグローバル変数を使って、四季の季節によってサイトテーマトップの見出しの色が変わるようにテンプレートおよびCSSを修正してください。



課題2:練習課題2で作成した%{USER_TYPE}を利用する

物件情報のページへアクセスした時に(絞り込み検索前の初期アクセスで/realestate/の場合)、ユーザーの最寄り駅で検索された状態になるように、モジュールIDの設定をしてください。
モジュールIDの条件設定で、フィールド(field)に検索条件を追加します。
補足:GoogleMapのピンはモジュールID:maplistで制御されています。