Прошу обратить внимание разработчиков тем дизайна на баг в коде.
Практически стандартный код для всех тем дизайна берущих начало от Default3. Включая её саму.
{strip}
<!-- plugin hook: 'frontend_nav' -->
{* @event frontend_nav.%plugin_id% *}
{$_hook_frontend_sidebar_section = false}
{foreach $frontend_nav as $plugin => $output}
{if !empty($output)}
{$_hook_frontend_sidebar_section = true}
{/if}
{/foreach}
{if $_hook_frontend_sidebar_section}
{foreach $frontend_nav as $_key => $_}
<div class="sidebar-wrap sidebar-{$_key}">
<div class="sidebar-wrap__head">
{if substr($_key, -7) == '-plugin'}{$wa->pluginName(substr($_key, 0, -7))}{else}[`More`]{/if}
</div>
<div class="sidebar-wrap__body">
{$_}
</div>
</div>
{/foreach}
{foreach $frontend_nav_aux as $_key => $_}
<div class="sidebar-wrap sidebar-{$_key}">
<div class="sidebar-wrap__head">
{if substr($_key, -7) == '-plugin'}{$wa->pluginName(substr($_key, 0, -7))}{else}[`More`]{/if}
</div>
<div class="sidebar-wrap__body">
{$_}
</div>
</div>
{/foreach}
{/if}
{/strip}
Первый блок кода выставляет флаг $_hook_frontend_sidebar_section, в случае если хотя бы один из плагинов, использующих этот хук что-то выводит.
Во втором блоке таких проверок уже нет и даже если плагин возвращает в хуке false, всё равно выводится название плагина.
Обычно такое можно увидеть при использовании плагина "Бренды" и любого другого плагина, использующего этот хук.
Самое простое что можно сделать, добавить {if empty($_)}{continue}{/if} в начало циклов перебора foreach.
Касается популярных тем Mastershop и supreme - про них мне уже написали несколько раз.
А то что-то устал я бодаться. Мол, плагин "Youtube каналы и ролики" виноват, потому что в Default3 тоже самое - пишите разработчику.
5 комментариев
protected function runPlugins
Почти всегда в хуках использовал return false там, где надо было известить о ложности/пустоте. И не парился(давно я к этому привык). Да и так как практически везде используется другая структура для вывода через хуки всё работало. В документации об этом как всегда ни слова, пришлось лезть в код фрэймворка.
Сабжевый код, такое впечатление, был сделан только для того, чтобы вывести слово "Бренды" у соответствующего плагина -)
Понятно, что сделаю "как надо" фрэймворку, но кажется мне что это всё таки не очень правильно.
При использовании какого плагина и какой темы дизайна это можно увидеть? Если речь о плагине «Бренды», то в каком месте кода он отдаёт false при обработке какого именно события?
Темы Default3, Mastershop, Supreme.
Речь о совокупности факторов. С плагином "Бренды" всё хорошо. Он возвращает свой контент, а если его нет, то null(то есть там просто return).
Но если есть еще другой плагин(например, текущая версия "ytb" 1.0.5), который возвращает не null, а "пустую строку"(false/true) в хуке frontend_nav, когда соотв. настройка не включена в плагине, то получается то что описано выше.
А пустая строка может возвращаться, например, если пустой шаблон(ну взял человек и удалил там всё) и в плагине нет проверки на эту "пустоту". Ну или просто не знание этой особенности фрэймворка, как в случае "ytb" и привычки так делать -)
Новая версия ytb скоро отправится на модерацию и там этот недочёт будет исправлен. Но это не мешает возможности подстраховаться и в темах дизайна добавить дополнительные проверочные условия, дабы в будущем исключить такой баг и в других плагинах. Имхо конечно, решать вам.
Проблема пропадает, если возвращать в обработчике хука null вместо false?
Вот ты некрофил-) Да, пропадает.