第四回は、メニューで設定したクラス接尾辞をテンプレートで利用してみます。
ページ毎(メニュー毎)にクラスの値を変えたり表示を変更するのは、$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で分岐してやることと大きな差はありませんが、最初に上記のコードを書いておく事で面倒な複数の分岐処理を書く必要がなくなります。
全く同じようにする必要はありませんが、何かの足しにはと・・・。
昨日発見した点
まず2点。Fireboardへのリンクは、先ほどリダイレクトのメソッドを追加したので解決した。
Joomla!は、Itemidでの管理が多用されていてItemid(メニューIDのことです。)が無い場合内部では99999999などと勝手にItemidをつけて処理しているようです。ですが、これだとItemid無しでアクセスまたは、異なるItemidでのアクセスの場合、Itemidで表示を管理するモジュールなどが正しく表示されません。Allにしていれば問題ないでしょうが、Itemid(メニューID)ごとに異なるモジュールを割り当てている場合は、Allのもののみ表示されるだけで意図した表示にはならないです。
小さなことかもしれませんが、サイトを移転したりメニューIDを変更したときには重要かもしれません。
今回の場合、Itemidが異なるため表示はされるのですが、ComibineコンポーネントでFireboard用に出力されるはずのJavascriptが出力されていませんでした。
指定した(存在するメニューID)Itemidでのみアクセスを許可し、それ以外ならリダイレクトさせるような処理をしてくれるエクステンションが、必要かもしれませんね。それがあれば、サイト移転しても楽じゃないかな。
テンプレート作成時や新たなモジュールを導入時など、このメニューの時はこれを出したい、あのメニューの時はこれを出したいなど、メニュー毎にモジュール側で設定が可能です。ですが、もっと細かく設定したい時はこれでは足りません。このサイトのテンプレートでは、さらに細かく分岐しています。(妙な表示の部分もありますけどね。)
エクステンションによっては異なりますが、$option, $Itemid, $taskなどはJoomla!で普通に使われているグローバルな値です。例えば記事を表示しているときは $option に 'com_content' , $task に 'view' が入っています。$ItemidにはメニューIDなど。これらの値を取得しそれにより判断することによってさらに詳細に表示を変更できるわけです。
Joomla!のモジュールはたくさんあるのでモジュールの各メニュー毎の割り当ては、かなり面倒です。また、メニューが増えたら同じ作業をそれぞれのモジュール毎にやらなければいけません。この作業が楽になるようなエクステンションが欲しいですね。