05.02.24追)
ver.1.14からモジュールにデフォルト組み込みになったのでこの項はdepricatedです。
マルチメニューがどんどん進化している。これを元にすればパン屑モジュールも簡単に作れるかもしれないな。
それはおいといて。今回は、multiMenuで作られた各ブロックの先頭行のclassを変更する話。system/blocks/system_blocks.phpが吐き出すメニューブロックを受けて、テンプレートは先頭行(デフォルトではホーム)のclassはmenuTop、その他はmenuMainとなっている。したがって、デフォルトをベースとしたテーマに付随するcssファイルにも両方が記述されるのが普通。
これに対しmultiMenuは全部menuMainなんだ。
だからcssでborder-topまたはborder-bottomなどを使う場合、区別できない問題が発生する。
そこで先頭行のみclassをmenuTopとする場合のテンプレートハック。
<{foreach item=imenu from=$block.contents}>
<{foreach name=menuloop item=imenu from=$block.contents}>
<{if $imenu.link != ""}>
<a class="menuMain" href="<{$imenu.link}>" target="<{$imenu.target}>"><{$imenu.title}></a>
<{if $smarty.foreach.menuloop.first}>
<a class="menuTop" href="<{$imenu.link}>" target="<{$imenu.target}>">
<{else}>
<a class="menuMain" href="<{$imenu.link}>" target="<{$imenu.target}>">
<{/if}>
<{$imenu.title}></a>
最後の行の場合は$smarty.foreach.menuloop.lastとすればOK。