第四回は、メニューで設定したクラス接尾辞をテンプレートで利用してみます。
ページ毎(メニュー毎)にクラスの値を変えたり表示を変更するのは、$Itemid(メニューID)を下記のように取得すれば良いことをご存じの方は多いと思います。
$Itemid = JRequest::getInt('Itemid');これで取得したメニューIDでモジュールを表示したり、非表示にすることは、Joomla!1.0.xからも、普通に今まで行ってきました。ですが、これだとクラスの値だけをページ毎に設定したくてもコンテンツなどには、接尾辞は反映されるが、テンプレートまでは来ません。
そこで以下のようにしてメニューで設定したクラス接尾辞をテンプレートで利用できるようにしました。
$Itemid = JRequest::getInt('Itemid');
$pageclass_sfx = '';
if($Itemid > 0){
$menu = &JSite::getMenu();
$params = & $menu->getParams($Itemid);
$pageclass_sfx = $params->get('pageclass_sfx', '');
}
$this->params->set('pageclass_sfx', $pageclass_sfx);こうすることで、通常テンプレートのパラメータ(設定値)を得るように
$this->params->get('pageclass_sfx');で現在のメニューで設定した、クラス接尾辞が得られます。$Itemidで分岐してやることと大きな差はありませんが、最初に上記のコードを書いておく事で面倒な複数の分岐処理を書く必要がなくなります。
全く同じようにする必要はありませんが、何かの足しにはと・・・。
テンプレート作成時や新たなモジュールを導入時など、このメニューの時はこれを出したい、あのメニューの時はこれを出したいなど、メニュー毎にモジュール側で設定が可能です。ですが、もっと細かく設定したい時はこれでは足りません。このサイトのテンプレートでは、さらに細かく分岐しています。(妙な表示の部分もありますけどね。)
エクステンションによっては異なりますが、$option, $Itemid, $taskなどはJoomla!で普通に使われているグローバルな値です。例えば記事を表示しているときは $option に 'com_content' , $task に 'view' が入っています。$ItemidにはメニューIDなど。これらの値を取得しそれにより判断することによってさらに詳細に表示を変更できるわけです。
Joomla!のモジュールはたくさんあるのでモジュールの各メニュー毎の割り当ては、かなり面倒です。また、メニューが増えたら同じ作業をそれぞれのモジュール毎にやらなければいけません。この作業が楽になるようなエクステンションが欲しいですね。