ページ 11

wayfinderの不具合

Posted: 2017年1月20日(金) 22:04
by kazuike
Wayfinder(バージョン2.1/MODX1.0.18J)で、
「hideSubMenus=1」にした時、特定の条件で挙動がおかしかったので、少し調べてみました。

パラメータを「startId=1」「hideSubMenus=1」として、
下記のツリーAにおけるリソース(2)を表示した時、
期待するWayfinderの出力は、
・Lv2-1(2)
・Lv2-2(3)
・Lv2-3(4)
ですが、Wayfinderは何も出力しません。

コード: 全て選択

■ツリーA
Root(0)
 ├Lv1(1) ←startId
 │ ├Lv2-1(2) ←★このリソースを表示
 │ ├Lv2-2(3)
 │ ├Lv2-3(4)

コード: 全て選択

▼Wayfinderの出力
無し
ところが、下記ツリーBのように、
リソース(2)に子リソースが一つでもあると、
Wayfinderの出力は下記のように期待通りになります。

コード: 全て選択

■ツリーB
Root(0)
 ├Lv1(1) ←startId
 │ ├Lv2-1(2) ←★このリソースを表示
 │ │ ├Lv3-1(5)
 │ ├Lv2-2(3)
 │ ├Lv2-3(4)

コード: 全て選択

▼Wayfinderの出力
・Lv2-1(2)
・・Lv3-1(5)
・Lv2-2(3)
・Lv2-3(4)
面白い事に、子リソースは存在すれば非公開でも構わないようで、
上記の子リソース(5)を非公開にしても、
Wayfinderの出力は下記のように期待通りになります。

コード: 全て選択

■ツリーC
Root(0)
├Lv1(1) ←startId
│ ├Lv2-1(2) ←★このリソースを表示
│ │ ├Lv3-1(5) ←※非公開
│ ├Lv2-2(3)
│ ├Lv2-3(4)

コード: 全て選択

▼Wayfinderの出力
・Lv2-1(2)
・Lv2-2(3)
・Lv2-3(4)

wayfinderの不具合

Posted: 2017年1月20日(金) 22:14
by kazuike
直接関係するかわかりませんが、
assets/snippets/wayfinder/wayfinder.inc.php
の381行目~382行目が以下のコードになっています。

コード: 全て選択

                foreach($parents as $p)
                    $ids = $modx->getChildIds($p, 1, $ids);
一見してループの意味が無いように思えましたので、
試しに以下のように「=」を「+=」に修正してみました。

コード: 全て選択

                foreach($parents as $p)
                    $ids += $modx->getChildIds($p, 1, $ids);
とりあえず、上記の現象は解消されましたが、
制作中のサイトで数ページ試しただけなので、他にどんな副作用があるかはわかりません。
とり急ぎ、報告まで。

wayfinderの不具合

Posted: 2017年1月20日(金) 22:30
by yama
なるほど、検証してないけどそれで合ってると思います。あとで修正しますね