PEAK XOOPS - 階層サブメニューの提唱 in englishin japanese

Archive | RSS |
XOOPS
XOOPS : 階層サブメニューの提唱
Poster : GIJOE on 2007-03-08 03:43:25 (7589 reads)

in englishin japanese
X2のサブメニューは、アクセスの都度 xoops_version.php をパースして得られる、$modversion['sub'] を利用する、という仕組みになってます。

そういう仕組みで良いのかどうか、非常に難しいところではありますが、現実にそう実装されてしまっている以上、その枠組みの中でどう最善を期すか考えてみました。

今回、サブメニューにつけたいと思ったのは、やはり階層構造です。というわけで、こんな形のツリー型再帰構造を提唱します。


array(
	'name' => (リンク文字列)
	'url' => (モジュールディレクトリからの相対URL)
	'sub' => (この構造体の配列/インデックスは数値の連番)
) ,

これは、$modversion['sub'] の1段目とまったく同じ構造です。
モジュール側のxoops_version.phpがこの形式で返すことで、テーマから自由にUL構造などにアサインすることが出来ます。

ただし、テーマ側でのサブメニューの取り出し方は重要です。subLink() だと、nameとurlしか返してくれないので、getInfo('sub') で取得する必要があります。

$module->subLink()
$module->getInfo('sub')


なお、X2には、同じモジュールのインスタンスをいくつも作ってしまうバグがあるので、サブメニューで階層構造を取得するようなロジックを組んでしまうと、それらが何度も呼び出されて無駄なオーバーヘッドになってしまいます。

xoops_version.php

$modversion['sub'] = array() ;
if( is_object( @$GLOBALS['xoopsModule'] ) && $GLOBALS['xoopsModule']->getVar('dirname') == dirname ) {
	require_once dirname(__FILE__).'/include/common_functions.php' ;
	$modversion['sub'] = dirname_get_submenu( $mydirname ) ;
}

などとすることで、必要な時にだけ、サブメニュー取得用関数が呼び出されるようにして、さらに、その関数内にstatic変数を用意して、サブメニュー結果をキャッシュするのが良いでしょう。

実は現時点で、d3forumおよびpicoは、このタイプの階層サブメニューに対応してたりします。対応テーマがいっぱい出るといいですね。

0 comments

Printer friendly page Send this story to a friend

Comments list

Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!