Fi1osof 30 июля 2013 0 0
Переношу сайт с Эво на Рево. И натыкаюсь вот на такую проблему: на Эво менюшка нормально формируется, а в Рево этой менюшки нет.
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 уровень.
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.