Как условно добавить блок (в зависимости от конфигурации в админ-панели) в макет Magento XML?
Мы можем проверить, является ли config верным для действий. В приведенном ниже примере, если sample/config/show_toplinks
config из панели администратора (в System-> Configuration) имеет значение true , тогда файл шаблона links.phtml
будет использоваться для визуализации Top Links. Если sample/config/show_toplinks
это ложь , то будет использоваться шаблон по умолчанию.
<reference name="top.links">
<action method="setTemplate" ifconfig="sample/config/show_toplinks">
<template>page/template/links.phtml</template>
</action>
</reference>
Я нашел этот обходной путь где-то в сети. Мы можем установить пустой шаблон в качестве шаблона по умолчанию для Top Links, например так:
<reference name="top.links">
<action method="setTemplate" ifconfig="sample/config/show_toplinks">
<template>page/template/links.phtml</template>
</action>
<!-- OR set completely empty template -->
<action method="setTemplate">
<template>page/template/empty_template_for_links.phtml</template>
</action>
</reference>
В этом случае, если sample/config/show_toplinks
это правда , то шаблон links.phtml
будет использоваться и будет отображаться Top Links. но если sample/config/show_toplinks
это ложь , то empty_template_for_links.phtml
шаблон будет использоваться , и этот шаблон полностью пуст, поэтому он не возвращает HTML и Top ссылка не будет видна.
- Есть ли другой способ условно показать или скрыть блоки в зависимости от конфигурации в админ-панели?
- Этот обходной путь безопасен?
- Может ли это привести к неожиданным ошибкам?
РЕДАКТИРОВАТЬ:
Исходя из всех ответов, я думаю, что решение Рика Койперса выглядит наиболее удобным для моего случая. Но у меня есть еще один связанный вопрос:
<block type="core/template" name="my_block" template="my/block.phtml" />
<!-- ...add more blocks here -->
<reference name="footer">
<action method="append" ifconfig="sample/config/show_toplinks">
<block>my_block</block>
</action>
<!-- ...append more blocks here -->
</reference>
Если мне нужно добавить много таких блоков (используя append
метод и ifconfig
), скажем, 50,
это влияет на производительность ? Только некоторые из блоков будут действительно отображаться (это зависит от настроек пользователя в System -> Config), но мне нужно добавить все эти блоки, прежде чем я добавлю их внутрь <reference name="footer">...</reference>
.
Magento мгновенно обрабатывает все добавленные блоки, как это?
<block type="core/template" name="my_block" template="my/block.phtml" />
Или блоки обрабатываются, только если они должны быть окончательно отображены в шаблоне? Так будет ли Magento обрабатывать все мои 50 блоков, несмотря на то, что нужно отображать только некоторые из этих блоков?