メニューの構造は、多次元のハッシュとして定義されます。 これにより、メニューの作成やその処理が非常に簡単になります。
メニューの多次元ハッシュ
<?phparray( 1 => array( 'title' => 'Menu item 1', 'url' => '/item1.php', 'sub' => array( 11 => array('title' => 'Menu item 1.1', 'url' => '/item1.1.php'), 12 => array( 'title' => 'Menu item 1.2', 'url' => '/item1.2.php', 'sub' => array( 121 => array('title' => 'Menu item 1.2.1', 'url' => '/item1.2.1.php'), 122 => array('title' => 'Menu item 1.2.2', 'url' => '/item1.2.2.php') ) ) ) ), 2 => array( 'title' => 'Menu item 2', 'url' => '/item2.php', 'sub' => array( 21 => array('title' => 'Menu item 2.1', 'url' => '/item2.1.php'), 22 => array('title' => 'Menu item 2.2', 'url' => '/item2.2.php') ) ));?>
各エントリには最低限 'url' と 'title' のキーが含まれており、また 'sub' キーが存在すれば、そこにこのエントリの子が含まれます。 エントリ内のキーはノードの識別子となるので、一意でなければならないことに注意しましょう。
メニューエントリには、独自のキーを含めることもできます。 独自のキーは、レンダラが出力を作成する際に使用します (よくある方法は、このような独自のキーを テンプレート内の同名のプレースホルダに代入するものです)。
HTML_Menu は次の五つの出力モードをサポートしています。 'tree' (デフォルト)、'rows'、 'urhere'、'prevnext' そして 'sitemap' です。 先ほど定義した配列のメニュー構造では、 'Menu item 1.2' が現在アクティブであるものとし、 それぞれのメニュー型を試していきます。
この型のメニューは、内部的なハッシュ構造をほぼそのままたどったものです。 メニューのレベルの違いは字下げの量で表され、 アクティブなアイテムにいたるまでの要素とその直下の要素のみが表示されます。
メニュー型 'tree' の出力
Menu item 1 Menu item 1.1 Menu item 1.2 Menu item 1.2.1 Menu item 1.2.2 Menu item 2
これは 'tree' 型とほとんど同じです。 メニューのレベルの違いが、字下げではなく異なる行で表示されるという点が異なります。
メニュー型 'rows' の出力
Menu item 1 Menu item 2 Menu item 1.1 Menu item 1.2 Menu item 1.2.1 Menu item 1.2.2
これは、いわゆる 'パンくず' 式のナビゲーションで、 サイト全体の中で自分が今どの位置にいるのかが簡単にわかるようになります。
メニュー型 'urhere' の出力
Menu item 1 >> Menu item 1.2
このメニューはドキュメントなどでよく使われ (PEAR マニュアルもそうです)、 現在のエントリからひとつ前、ひとつ先、そして親のエントリへ進めるようになります。
メニュー型 'prevnext' の出力
<< Menu item 1.1 ^ Menu item 1 ^ Menu item 1.2.1 >>
これは 'tree' 型のメニューですが、以下のように表示されます。
メニュー型 'sitemap' の出力
Menu item 1 Menu item 1.1 Menu item 1.2 Menu item 1.2.1 Menu item 1.2.2 Menu item 2 Menu item 2.1 Menu item 2.2
最も基本的な使用例
<?php// クラスを読み込みますrequire_once 'HTML/Menu.php';// メニューオブジェクトのインスタンスを作成します// $data にはメニュー構造が含まれているものとします$menu =& new HTML_Menu($data, 'tree');// メニューを出力します$menu->show();?>