Как добавить блок в макет, если в макете существует блок CMS?
-
11-12-2019 - |
Вопрос
Итак, вот ситуация.мне нужно создать core/template
заблокировать программно, если есть CMS Block
(Static Block
) присутствует в структуре макета.Я буду использовать этот шаблон, чтобы динамически добавлять в него некоторый контент.
Если есть наблюдатель за статическими блоками, я могу его использовать.Другой вариант: я могу добиться того же с помощью макетов, если есть дескриптор макета, специфичный для статического блока (точно так же, как cms_page
дескриптор макета).
Но мне пока не удалось найти наблюдателя за статическими блоками.Поэтому я не могу пойти с наблюдателем.Я также ищу любой дескриптор макета статического блока.Этот поиск также привел меня в отчаяние.Я не смог найти ни одного.Таким образом, обновление макета также невозможно.
Так что, похоже, единственный способ добиться этого — это наблюдать за любыми общими событиями (может быть, controller_action_layout_generate_blocks_after
).Но я чувствую, что это слишком плохой путь..
Так что мне теперь делать?Каким будет лучший способ сделать это?Могу ли я создать собственный прослушиватель событий для статических блоков (не знаю, возможно ли это!!)?Поделитесь своими мыслями.
Примечание : Я создаю расширение.Я хочу, чтобы было как можно более чисто.:)
Решение 2
Кажется, другого способа сделать это нет.Итак, я слушал общее событие controller_action_layout_generate_blocks_after
.Там я создал новый блок, если присутствует блок cms.
Другие советы
Возможно, вы можете использовать помощник в XML и проверять наличие внутри него условия, выполняя условие внутри XML, а затем действовать соответствующим образом.Возможно, это лучше, чем наблюдать за загрузкой каждого блока наблюдателем.
Вот ответ на использование подхода XML.
<action method="addLink" translate="label title" module="catalog" ifconfig="catalog/seo/site_map">
<label>Site Map</label>
<url helper="catalog/map/getCategoryUrl" />
<title>Site Map</title>
</action>