We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23276
    • 85 Posts
    Wayfinderで、各アイテム(行)の中の最初のアイテムと最後のアイテムにクラス名を付けることができると思うのですが、
    CSSのfirst-child/last-child擬似クラスの代わりに使おうとしてちょっとハマってしまったので、解決した方法のポストです。

    [[Wayfinder? &startId=`0` &outerTpl=`treeOuter` &rowTpl=`treeRow` &innerTpl=`treeInner` &innerRowTpl=`treeInnerRow` &firstClass=`first` &lastClass=`last`]]

    などとやると(「***Tpl」パラメータで指定したチャンクの内容は省略)、次のように出力されます。

    <ul>
      <li class="first">リスト</li>
      <li class="last">リスト
        <ul>
          <li class="first">リスト</li>   <!-- 最後のアイテムでもあるのにlastが出力されない -->
        </ul>
        <ul>
          <li class="first">リスト</li>
          <li>リスト</li>
          <li class="last">リスト</li>
        </ul>
      </li>
    </ul>


    lastClassで指定したクラス名が出力されないと思ったら、

    参考: Let’s enjoy MODx(MEGUさんのサイト) Wayfinder 2.0 - パラメータ(CSSclass)
    http://www.liolion.info/modx/resource/Wayfinder.html

    firstClassパラメータで指定したクラス名は各アイテム(行)の中のアイテムが1つの場合でも付けられるけれど、lastClassパラメータで指定したクラス名はアイテムが1つの場合には付けられないということだったのですね。

    リストとして表示させる場合、アイテム(li要素)が1つの場合にはそのアイテムは最初の子要素であり、最後の子要素でもあり、
    lastClassで指定したクラス名も付けてほしかったので、wayfinder.inc.php 93行目の「 && $numSubitems > 1」を削ってみました。

    			//Determine if last item in group
    //			if ($counter == ($numSubItems) && $numSubItems > 1) {
    			if ($counter == ($numSubItems)) {
    				$docInfo['last'] = 1;
    			} else {
    				$docInfo['last'] = 0;
    			}


    <ul>
      <li class="first">リスト</li>
      <li class="last">リスト
        <ul>
          <li class="first last">リスト</li>   <!-- lastも出力された -->
        </ul>
        <ul>
          <li class="first">リスト</li>
          <li>リスト</li>
          <li class="last">リスト</li>
        </ul>
      </li>
    </ul>


    無事、lastClassで指定したクラス名も出力されるようになりました。

    lastClassが出力されないのはWayfinderの仕様だとは思うのですが、この方法だとCSSやDOMと同じ挙動なので、個人的にはこっちのほうがしっくりきました。
    こうなっていない理由がなにかあるのかもしれませんが、あまりテストしてません tongue