Активный пункт меню Есть решение

В шаблоне my.nav.html выводятся пункты меню через хук $frontend_my_nav:

<!-- plugin hook: 'frontend_my_nav' -->
{* @event frontend_my_nav.%plugin_id% *}
{foreach $frontend_my_nav as $_plugin => $_}
<li class="shop {if waRequest::param('plugin') == str_replace('-plugin', '', $_plugin)}selected{/if}">{$_}</li>
{/foreach}

Активный пункт меню ставится в случае, если waRequest::param('plugin') возвращает название плагина.

В своем экшене я делаю так:

waRequest::setParam('plugin', 'showdiscount');

И тут же делаю var_dump для дебага:


...
  'module' => string 'frontend' (length=8)
  'action' => string 'discount' (length=8)
  'plugin' => string 'showdiscount' (length=12)

Как видно, ключ plugin присутствует с нужным мне значением.

Когда дело доходит до шаблона, я делаю var_dump(waRequest::param()), ситуация следующая:

  • index.html - нужные ключи присутствуют
  • my.nav.html - нужные ключи отсутствуют (module, action, plugin)

Вопросов несколько:

  1. Почему это происходит?
  2. Как правильно отметить активный пункт меню без костылей c capture и прочим? 
  3. Есть ли где-то диаграмма жизненного цикла компонентов и классов? 

В идеале, я рассчитывал, что фреймворк подхватит роут плагина и сам автоматически добавит значение в waRequest о том, что сейчас активен action нашего плагина.

2 ответа

  • 1
    Константин Шевский 4 февраля 2019 16:35 # Решение

    Насколько я знаю, ф-ия myNav в waViewHelper косячная и удаляет waRequest::param(), в связи с чем пропадают module, action, plugin. Костыльте, сохраняйте до вызова myNav парамсы и после вызова присваивайте их.

  • 1
    enso_studio@mail.ru 1 февраля 2019 15:14 #

    потому что есть слой layer и есть страница controller/action

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите