MODxのスニペット、Wayfinderのclass属性値の出力を改善する

MODxにかかせないスニペットの一つにWayfinderがあります。Wayfinderは、指定した条件でドキュメントを走査した後、テンプレートを通して出力してくれる便利なスニペットです。ナビゲーションからサイトマップまで大活躍してくれるのですが、class属性値の出力方法がいまいちなので、その改善策を紹介しておきます。

Wayfinderは、デフォルトでは最初の入れ子要素にfirst、最後の入れ子要素にlast、そして、現在のドキュメントにはactiveというclass属性値を出力してくれます。これらのクラス名は、それぞれ、firstClass、lastClass、hereClassというパラメータで設定することもできます。

これはとても便利なのですが、一つ、困った点があります。例えば、Wayfinderからリストとして出力するときのことを考えてみます。入れ子要素が一つしかない場合、Wayfinderは次のように出力します。

<ul>
  <li class="first">リスト</li>
</ul>

firstは出力されますが、lastが出力されません。

このli要素は、ul要素の最初の子要素であると同時に最後の子要素でもあるわけですから、ここはやはりlastも出力してほしいところです。しかし、実際は上記のように出力されます。これは、もっと複雑な入れ子になったときにもそうです。

lastも同時に出力するようにするには、/assets/snippets/wayfinder/wayfinder.inc.phpを修正します。

wayfinder.inc.php 93行目付近(修正前)
//Determine if last item in group
if ($counter == ($numSubItems) && $numSubItems > 1) {
    $docInfo['last'] = 1;
} else {
    $docInfo['last'] = 0;
}
wayfinder.inc.php 93行目付近(修正後)
//Determine if last item in group
if ($counter == ($numSubItems)) {
    $docInfo['last'] = 1;
} else {
    $docInfo['last'] = 0;
}

これで、入れ子要素が1つしかない場合でも、次のようにlastが出力されるようになります。

<ul>
  <li class="first last">リスト</li>
</ul>

わざわざ条件分岐しているということは、これはWayfinderの仕様なのかもしれません。個人的にはしっくりこないので、いつもこのように修正をしてから使っていますが、少なくとも自分ではどこにも書いていなかったと思うので紹介しておきました(ただし、テストはほとんどしてないので、おかしなことが発生する可能性もあります)。

CSS等を使う場合には、このように修正しておくと、より柔軟なスタイリングができるようになりますね。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/119/trackback/
この記事のURI
http://dxd8.com/archives/119/