HTML_Menu_SigmaRenderer クラス概要

HTML_Menu_SigmaRenderer クラス概要 --  HTML_Template_Sigma のインスタンスを使用してメニューを出力するレンダラ

説明

このレンダラは、 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 -->&nbsp;&nbsp;<!-- END mu_inactive_indent --><a href="{mu_url}">{mu_title}</a></td>
        <!-- END mu_inactive -->
        <!-- BEGIN mu_active -->
        <td><!-- BEGIN mu_active_indent -->&nbsp;&nbsp;<!-- END mu_active_indent --><strong>{mu_title}</strong></td>
        <!-- END mu_active -->
        <!-- BEGIN mu_activepath -->
        <td><!-- BEGIN mu_activepath_indent -->&nbsp;&nbsp;<!-- 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}">&lt;&lt;&lt; {mu_title}</a></td>
        <!-- END mu_previous -->
        <!-- BEGIN mu_next -->
        <td><a href="{mu_url}">{mu_title} &gt;&gt;&gt;</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> &gt;&gt;&gt;</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 が継承しているメソッド

表 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()レンダリングするメニューの型を設定します。