Yii

Yii 1.1.1 の2カラムメニューを以前の1カラムにする

バージョンアップにより、スキャフォールド(yiic)で生成される CRUD のビューに係る部分で、それまで1カラム表示だったのが2カラム表示へ変更された。それに合わせて、サブメニューが右側に表示されるようになった。

実は以前作った CMS で、サブメニューを今回の 1.1.1 のように右側に表示するようにしたところ、結構使い難かった。そのためそれ以降は、サブメニューはメインメニューの下側へ表示するようにしている。

ということで、yiic で吐き出されたソースを変更して 1.1.0 で表示していたようにしたいと思う。

編集は以下の3点だ。

  • コントローラの「$layout=’coloumn2’」プロパティを削除
  • ビューで widget を利用して「CMenu」で表示するように追加
  • CSS で以前定義されていた「.action」を移植

3番目の CSS の指定で、main.css から「action」クラスとそれに関する「li,a,a:hover」などの定義が削除されてしまっていた。そこで、1.1.0 の main.css からその部分をコピーした。

1番目だが、yiic はコントローラのプロパティに $layout=’column2′ を書き出してくる。コントローラは components/Controller.php から派生するようだが、ここにデフォルトレイアウトの指定で「column1」を設定している。書き出すよりこちらを「column2」にした方が、良かったような気がするのだが。

最後にビューの変更だ。以前のサブメニューは、ulタグに actions クラス指定をして、直接メニューを html で記述していた。1.1.1 ではコントローラのメンバに $menu があり、そこにメニューのパラメータを配列指定している。CMenu を利用することでそれをそのまま使える。

$this->menu=array(
	array('label'=>'List user', 'url'=>array('index')),
	array('label'=>'Create user', 'url'=>array('create')),
);

$this->widget('zii.widgets.CMenu', array(
	'htmlOptions'=>array(
		'class'=>'actions',
	),
	'items'=>$this->menu,
));

ulタグに actions クラス指定を忘れないように。

(yii-1.1.1.r1907)