Не работает интерфейсный хук, почему?
Есть тестовый хост, где я веду разработку, и есть хост клиента, которому я заливаю плагин. На моем хосте (тема default) все работает. На его хосте - нет.
Подписался на хук:
'handlers' => array( 'frontend_my_nav' => 'frontendMyNav' ),
В плагине есть метод:
public static function frontendMyNav() { $view_helper = new waViewHelper(wa()->getView()); return '<a href="' . $view_helper->myUrl() . 'discounts/">Мои скидки</a>'; }
В приложении Shop редактирую my.nav.html:
... <li>Тестовая строка, файл подключается</li> <!-- 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} {$wa->globals('isMyAccount', true)}
В итоге, захожу в личный кабинет, и вижу строку Тестовая строка, но в frontend_my_nav == null. Кеш чистил, дебаг режим включал, в чем может быть проблема?
Раздел сайта для авторизации в настройках домена - Shop.
Плагин включен.
Роут со скидками работает.
5 ответов
Кеш Webasyst чистили?
Да, я нажимал кнопку в инсталлере, нажимал кнопку в приложении "Настройки", и, чтоб на верняка, полностью удалял содержимое папки wa-cache.
Или есть ещё какие-то кеши?
Поставил приложение "Управление плагинами", в нем видно, что мой плагин зарегистрирован на данный хук.
wa_dump говорит что $frontend_my_nav == null:
В общем, заметил, что на тебе default все отлично выводится, на модифицированной теме (которая форкнутый default) - нет.
shopMyNavAction не срабатывает, просто напросто. Кто знает фреймворк, в каких случаях это происходит? Поиск по коду, увы, ничего не дает, так как судя по всему, данный экшен подключается динамически.
Возможно тема/плагин используют аналогичную переменную - поищи в php/html коде frontend_my_nav. Также другой плагин мог переопределить данный экшен - поотключай плагины с роутингом.
Проблема была в том, что файл my.nav.html просто инклюдился, а нужно делать вызов {wa->myNav('')}