如何有条件地在Magento的布局XML中添加一个块(取决于管理面板中的配置)?
我们可以检查config是否为true。在下面的示例中,如果sample/config/show_toplinks
管理面板中的config(在“系统”->“配置”中)为true,则将使用模板文件links.phtml
来呈现“顶部链接”。如果sample/config/show_toplinks
为false,则将使用默认模板。
<reference name="top.links">
<action method="setTemplate" ifconfig="sample/config/show_toplinks">
<template>page/template/links.phtml</template>
</action>
</reference>
我在网络中的某个地方找到了解决方法。我们可以将一个空模板设置为“顶部链接”的默认模板,如下所示:
<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
为true,则将使用模板links.phtml
并显示“顶部链接”。但是如果sample/config/show_toplinks
为false,则将empty_template_for_links.phtml
使用该模板,并且该模板完全为空,因此它不返回任何HTML,并且顶部链接也不可见。
- 还有其他方法可以根据管理面板中的配置有条件地显示或隐藏块吗?
- 这种解决方法安全吗?
- 这会导致任何意外错误吗?
编辑:
根据所有答案,我认为Rick Kuipers的解决方案对于我的情况而言似乎最为方便。但是我还有另一个相关的问题:
<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
method和ifconfig
),比如说50,
这会影响性能吗?仅会真正显示某些块(这取决于用户在System-> Config中的设置),但是我需要添加所有这些块,然后才能有条件地将其添加到内<reference name="footer">...</reference>
。
Magento是否立即处理所有这样添加的块?
<block type="core/template" name="my_block" template="my/block.phtml" />
还是仅在必须最终将其显示在模板中时才处理块?因此,尽管事实上只需要显示其中的某些块,但Magento是否必须处理我的全部50个块?