Objectif
- Utiliser les
arguments
pour afficher ou masquer une partie de template PHTML dans le DOM qui va être généré (il peut arriver qu’on cherche à afficher certaines parties d’un PHTML et à en masquer d’autres sous condition) - Utiliser
$block->hasData()
et$block->getData()
dans un template PHTML pour interroger les arguments placés dans le layout XML - Utiliser la fonctionnalité de Custom Layout Update pour surcharger un layout XML de page
Ressources en ligne:
- Doc officielle: Common layout customization tasks > Create cms-page/product/category-specific selectable layouts
- Doc officielle: Common layout customization tasks > Modify block arguments
Layout XML
ATTENTION: j’ai écrit ça un peu vite; se référer plutôt à la doc officielle (lien ci-dessus).
On crée un Custom Layout Update. Le nom du fichier est important:
- cms_page_view_selectable_socialmedia_NoSocialFooter.xml: la surcharge sera à appliquer à la main, via le BO, pour n’importe quelle page CMS.
- cms_page_view_id_socialmedia.xml: la surcharge sera appliquée automatiquement à la page CMS dont l’URL Key est « socialmedia ».
Fichier: app/design/frontend/Vendor/default/Magento_Cms/layout/cms_page_view_selectable_socialmedia_NoSocialFooter.xml
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="footer.main"> <arguments> <argument name="display_social_footer" xsi:type="boolean">false</argument> </arguments> </referenceBlock> </body> </page> |
Template PHTML
Fichier: app/design/frontend/Vendor/default/Magento_Theme/templates/html/footer/main.phtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php /** * @var \Magento\Framework\View\Element\Template $block */ // [1] $displaySocialFooter = $block->hasData('display_social_footer') ? $block->getData('display_social_footer') : true; ?> // [2] <?php if ($displaySocialFooter): ?> <p>Lorem ipsum dolor sit amet</p> <?php endif; ?> |
- [1] On interroge le
$block
pour savoir si l’argumentdisplay_social_footer
est redéfini dans le layout XML. Mais par défaut, on set la variable$display_social_footer
àtrue
. - [2] Si l’argument
display_social_footer
est redéfini àfalse
dans mon exemple dans le layout XML (pour cela, il faut que le Custom Layout Update « NoSocialFooter » soit sélectionné en BO dans la config de la page CMS « socialmedia »), le<p>Lorem ipsum dolor sit amet</p>
n’apparaîtra pas dans le DOM généré. Sinon, il apparaîtra.
En BO:
cache flush de rigueur!