Como adicionar condicionalmente um bloco (dependendo da configuração no painel de administração) no XML de layout do Magento?
Podemos verificar se a configuração é verdadeira nas ações. No exemplo abaixo, se a sample/config/show_toplinks
configuração do painel de administração (em Sistema-> Configuração) for verdadeira , o arquivo de modelo links.phtml
será usado para renderizar os Links principais. Se sample/config/show_toplinks
for falso , o modelo padrão será usado.
<reference name="top.links">
<action method="setTemplate" ifconfig="sample/config/show_toplinks">
<template>page/template/links.phtml</template>
</action>
</reference>
Encontrei essa solução alternativa em algum lugar da web. Podemos definir um modelo vazio como padrão para os Links principais, assim:
<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>
Nesse caso, se sample/config/show_toplinks
for verdade , o modelo links.phtml
será usado e os Links principais serão exibidos. mas se sample/config/show_toplinks
for falso , o empty_template_for_links.phtml
modelo será usado e esse modelo estará completamente vazio; portanto, ele não retornará nenhum HTML e os Links principais não estarão visíveis.
- Existe outra maneira de mostrar ou ocultar condicionalmente os blocos, dependendo da configuração no painel de administração?
- Esta solução alternativa é segura?
- Isso pode causar erros inesperados?
EDITAR:
Com base em todas as respostas, acho que a solução de Rick Kuipers parece a mais conveniente para o meu caso. Mas eu tenho outra pergunta relacionada:
<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>
Se eu tenho muitos blocos para adicionar assim (usando o append
método e ifconfig
), digamos 50,
isso afeta o desempenho ? Apenas alguns dos blocos serão realmente exibidos (isso depende da configuração do usuário em Sistema -> Configuração), mas preciso adicionar todos esses blocos antes de anexá-los condicionalmente <reference name="footer">...</reference>
.
O Magento processa instantaneamente todos os blocos adicionados assim?
<block type="core/template" name="my_block" template="my/block.phtml" />
Ou os blocos são processados apenas se tiverem que ser finalmente exibidos no modelo? Então o Magento terá que processar todos os meus 50 blocos, apesar do fato de que apenas alguns deles precisam ser exibidos?