このレンダラは、 HTML_Template_Sigma を使用して HTML を生成します。あなたがこのテンプレートエンジンを使用しているなら、 これを使用すると HTML_Menu を簡単に自分のサイトに組み込めるようになります。
このレンダラを使用すると、 HTML_Menu_DirectRenderer よりも柔軟に出力をカスタマイズすることができます。
このレンダラは、おそらく HTML_Template_IT のインスタンスを渡してもうまく動作するでしょう。 しかし、メニューのテンプレートは多くのブロックで構成されることになりがちです。 HTML_Template_Sigma の キャッシュ機能 により、パフォーマンスの劇的な向上が期待できます。
すべてのメニュー型の出力に対応した最低限のテンプレートは、このようになります。
<!-- BEGIN mu_menu_loop -->
<table cellpadding="2" cellspacing="0" border="1">
<!-- BEGIN mu_row_loop -->
<tr>
<!-- BEGIN mu_entry_loop -->
<!-- BEGIN mu_inactive -->
<td><!-- BEGIN mu_inactive_indent --> <!-- END mu_inactive_indent --><a href="{mu_url}">{mu_title}</a></td>
<!-- END mu_inactive -->
<!-- BEGIN mu_active -->
<td><!-- BEGIN mu_active_indent --> <!-- END mu_active_indent --><strong>{mu_title}</strong></td>
<!-- END mu_active -->
<!-- BEGIN mu_activepath -->
<td><!-- BEGIN mu_activepath_indent --> <!-- END mu_activepath_indent --><a href="{mu_url}"><strong>{mu_title}</strong></a></td>
<!-- END mu_activepath -->
<!-- BEGIN mu_previous -->
<td><a href="{mu_url}"><<< {mu_title}</a></td>
<!-- END mu_previous -->
<!-- BEGIN mu_next -->
<td><a href="{mu_url}">{mu_title} >>></a></td>
<!-- END mu_next -->
<!-- BEGIN mu_upper -->
<td><a href="{mu_url}">^ {mu_title} ^</a></td>
<!-- END mu_upper -->
<!-- BEGIN mu_breadcrumb -->
<td><a href="{mu_url}">{mu_title}</a> >>></td>
<!-- END mu_breadcrumb -->
<!-- END mu_entry_loop -->
</tr>
<!-- END mu_row_loop -->
</table>
<!-- END mu_menu_loop -->
カスタマイズの方法を示すもう少し複雑な例が、 パッケージのアーカイブに含まれています。
テンプレート内のブロックやプレースホルダの先頭に
mu_ というプレフィックスがついていることに注目しましょう。
これにより、既存のブロック名やプレースホルダ名との衝突を避けるようにしています。
mu_ がデフォルトのプレフィックスですが、
クラスのコンストラクタ
で別のプレフィックスを指定することもできます。
menu_loop
もしこれが存在すれば、現在のメニューあるいは
('rows' 型の場合の)
メニューレベルを出力したあとにこのブロックが
parse() されます。メニューの型が
'rows' で %level%_menu_loop
ブロックが存在する場合は、代わりにそれが
parse() されます。
row_loop
もしこれが存在すれば、現在のメニューの行を出力した後でこのブロックが
parse() されます。メニューの型が
'rows' で %level%_row_loop
ブロックが存在する場合は、代わりにそれが
parse() されます。
entry_loopこのブロックは 常に 存在する必要があり、すべてのメニューエントリのブロックの親となります。 これは、"flow" を実装してエントリを次々にレンダリングする際に使用します。
メニューの型が 'rows' で
%level%_entry_loop ブロックが存在する場合は、
代わりにそれが使用されます。
inactive, active, activepath, previous, next, upper, breadcrumb
これらのブロックはメニューエントリを出力する際に使用され、
それぞれの エントリ型
に対応します。各ブロックには {title}
プレースホルダが存在する必要があり、また {url}
プレースホルダおよび indent ブロックを含むことができます。
メニューの型が 'tree'、
'sitemap' あるいは
'rows' のいずれかで
%level%_%entry type% ブロックが存在する場合は、
代わりにそれが使用されます。
inactive_indent, active_indent, activepath_indent
もしこれらが存在すれば、ツリー形式のメニュー
('tree' および 'sitemap')
においてエントリの字下げを行う際に使用されます。
HTML_Menu_SigmaRenderer
HTML_Menu_SigmaRenderer が継承しているメソッド
| メソッド名 | 概要 |
|---|---|
| HTML_Menu_Renderer::finishLevel() | ツリーのレベルを終了します ('tree' 型および 'sitemap' 型用)。 |
| HTML_Menu_Renderer::finishMenu() | メニューを終了します。 |
| HTML_Menu_Renderer::finishRow() | メニューの行を終了します。 |
| HTML_Menu_Renderer::renderEntry() | メニューの要素をレンダリングします。 |
| HTML_Menu_Renderer::setMenuType() | レンダリングするメニューの型を設定します。 |
| Prev | HTML_Menu | Next |
| ArrayRenderer::toArray() | PEAR Manual | constructor HTML_Menu_SigmaRenderer() |