wayfinderの不具合

質問全般・改善要望
kazuike
メンバー
メンバー
記事: 461
登録日時: 2009年8月12日(水) 12:53

wayfinderの不具合

投稿記事by kazuike » 2017年1月20日(金) 22:04

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)
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 461
登録日時: 2009年8月12日(水) 12:53

wayfinderの不具合

投稿記事by kazuike » 2017年1月20日(金) 22:14

直接関係するかわかりませんが、
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);
とりあえず、上記の現象は解消されましたが、
制作中のサイトで数ページ試しただけなので、他にどんな副作用があるかはわかりません。
とり急ぎ、報告まで。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 2910
登録日時: 2009年7月29日(水) 02:50

wayfinderの不具合

投稿記事by yama » 2017年1月20日(金) 22:30

なるほど、検証してないけどそれで合ってると思います。あとで修正しますね