このレンダラは、 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_ がデフォルトのプレフィックスですが、 クラスのコンストラクタ で別のプレフィックスを指定することもできます。
テンプレート内のブロック (プレフィックスを使用しない)
もしこれが存在すれば、現在のメニューあるいは ('rows' 型の場合の) メニューレベルを出力したあとにこのブロックが parse() されます。メニューの型が 'rows' で %level%_menu_loop ブロックが存在する場合は、代わりにそれが parse() されます。
もしこれが存在すれば、現在のメニューの行を出力した後でこのブロックが parse() されます。メニューの型が 'rows' で %level%_row_loop ブロックが存在する場合は、代わりにそれが parse() されます。
このブロックは 常に 存在する必要があり、すべてのメニューエントリのブロックの親となります。 これは、"flow" を実装してエントリを次々にレンダリングする際に使用します。
メニューの型が 'rows' で %level%_entry_loop ブロックが存在する場合は、 代わりにそれが使用されます。
これらのブロックはメニューエントリを出力する際に使用され、 それぞれの エントリ型 に対応します。各ブロックには {title} プレースホルダが存在する必要があり、また {url} プレースホルダおよび indent ブロックを含むことができます。
メニューの型が 'tree'、 'sitemap' あるいは 'rows' のいずれかで %level%_%entry type% ブロックが存在する場合は、 代わりにそれが使用されます。
もしこれらが存在すれば、ツリー形式のメニュー ('tree' および 'sitemap') においてエントリの字下げを行う際に使用されます。
HTML_Menu_SigmaRenderer
HTML_Menu_SigmaRenderer が継承しているメソッド
表 47-1HTML_Menu_Renderer から継承したもの
メソッド名 | 概要 |
---|---|
HTML_Menu_Renderer::finishLevel() | ツリーのレベルを終了します ('tree' 型および 'sitemap' 型用)。 |
HTML_Menu_Renderer::finishMenu() | メニューを終了します。 |
HTML_Menu_Renderer::finishRow() | メニューの行を終了します。 |
HTML_Menu_Renderer::renderEntry() | メニューの要素をレンダリングします。 |
HTML_Menu_Renderer::setMenuType() | レンダリングするメニューの型を設定します。 |