Николай Ланец
30 июля 2013 г., 8:19

Wayfinder Revo + hideSubMenus

Переношу сайт с Эво на Рево. И натыкаюсь вот на такую проблему: на Эво менюшка нормально формируется, а в Рево этой менюшки нет. MODX-тег очень простой:
[[Wayfinder?startId=`2`&level=`2`&hideSubMenus=`1`]]
И что же здесь не так? А оказывается, всему виной hideSubMenus=`1`. Я этот параметр довольно часто раньше использовал и знаком с ним хорошо — полезная и простая штука — не выводит подразделы меню, если они не активные. А здесь раз, и всего меню нет…
Полез в код Wayfinder-а, а там следующее:
/* only process resource group, if starting at root, hidesubmenus is off, or is in current parenttree */ if ((!$this->_config['hideSubMenus'] || $this->isHere($parentId) || $parentId == 0)) { /* build the output for the group of resources */ $menuPart = $this->buildSubMenu($docs,$level); /* if at the top of the menu start the output, otherwise replace the wrapper with the submenu */ if (($level == 1 && (!$this->_config['displayStart'] || $this->_config['id'] == 0)) || ($level == 0 && $this->_config['displayStart'])) { $output = $menuPart; } else { $output = str_replace("[[+wf.wrapper.{$parentId}]]",$menuPart,$output); } }
То есть формировать меню только если не указано, что скрывать меню, или startId==0, или это текущий раздел. И вот здесь засада получается. То есть если надо меню не из корня формировать, то оно просто не будет выводиться, если пользователь не находится в этом разделе.
В общем, я думаю, здесь надо добавить еще одно условие || $level==1, то есть если это первый уровень, то обязательно меню фигачить. Хотя может надо добавить еще одну настройку, типа «выводить ли первый уровень, если он не активен и включено hideSubMenus».
Кто-нибудь вообще с этим сталкивался? Есть какие-то мысли? Просто Wayfinder уже два года не обновлялся, и возможно мы просто возьмем этот пакет на поддержку, и будем фиксить баги сами. Вряд ли Шон будет этим заниматься.
P.S. на уровне Smarty я пока без багфикса так сделал:
{snippet name=Wayfinder params="startId=`2`&level=`2`&hideSubMenus=`1`" assign=modelslist} {if $modelslist} {$modelslist} {else} {snippet name=Wayfinder params="startId=`2`&level=`1`"} {/if}
То есть сначала просто пытаюсь получить это меню с настройкой hideSubMenus и на два уровня. И если меню было получено, то вывожу его. Если нет, то уже вывожу меню без hideSubMenus, но на 1 уровень.

Добавить комментарий