Активный пункт меню Есть решение
В шаблоне 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)
Вопросов несколько:
- Почему это происходит?
- Как правильно отметить активный пункт меню без костылей c capture и прочим?
- Есть ли где-то диаграмма жизненного цикла компонентов и классов?
В идеале, я рассчитывал, что фреймворк подхватит роут плагина и сам автоматически добавит значение в waRequest о том, что сейчас активен action нашего плагина.
3 ответа
потому что есть слой layer и есть страница controller/action
используй сессии чтобы было доступно везде
Насколько я знаю, ф-ия myNav в waViewHelper косячная и удаляет waRequest::param(), в связи с чем пропадают module, action, plugin. Костыльте, сохраняйте до вызова myNav парамсы и после вызова присваивайте их.