Jak warunkowo dodać blok (w zależności od konfiguracji w panelu administracyjnym) w układzie XML Magento?
Możemy sprawdzić, czy config jest prawdziwy dla akcji. W poniższym przykładzie, jeśli sample/config/show_toplinks
konfiguracja z panelu administracyjnego (w System-> Konfiguracja) jest prawdziwa , plik szablonu links.phtml
zostanie użyty do renderowania Górnych łączy. Jeśli sample/config/show_toplinks
ma wartość false , zostanie użyty szablon domyślny.
<reference name="top.links">
<action method="setTemplate" ifconfig="sample/config/show_toplinks">
<template>page/template/links.phtml</template>
</action>
</reference>
Znalazłem to obejście gdzieś w sieci. Możemy ustawić pusty szablon jako domyślny szablon dla Top Links, w następujący sposób:
<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>
W takim przypadku, jeśli sample/config/show_toplinks
jest to prawda , szablon links.phtml
zostanie użyty i zostaną wyświetlone Górne łącza. ale jeśli sample/config/show_toplinks
jest to fałsz , empty_template_for_links.phtml
szablon zostanie użyty, a szablon będzie całkowicie pusty, więc nie zwróci żadnego kodu HTML, a górne linki nie będą widoczne.
- Czy istnieje inny sposób warunkowego pokazywania lub ukrywania bloków w zależności od konfiguracji w panelu administracyjnym?
- Czy to obejście jest bezpieczne?
- Czy może to powodować nieoczekiwane błędy?
EDYTOWAĆ:
Na podstawie wszystkich odpowiedzi uważam, że rozwiązanie Ricka Kuipersa wygląda najwygodniej w moim przypadku. Ale mam inne powiązane pytanie:
<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>
Jeśli mam wiele bloków do dodania w ten sposób (przy użyciu append
metody i ifconfig
), powiedzmy 50,
czy to wpływa na wydajność ? Tylko niektóre bloki będą naprawdę wyświetlane (to zależy od ustawień użytkownika w Systemie -> Konfiguracja), ale muszę dodać wszystkie te bloki, zanim warunkowo je dołączę <reference name="footer">...</reference>
.
Czy Magento natychmiast przetwarza wszystkie dodane bloki w ten sposób?
<block type="core/template" name="my_block" template="my/block.phtml" />
Czy bloki są przetwarzane tylko wtedy, gdy muszą zostać ostatecznie wyświetlone w szablonie? Czy więc Magento będzie musiało przetworzyć wszystkie moje 50 bloków, mimo że tylko niektóre z tych bloków muszą zostać wyświetlone?