{"id":1350,"date":"2016-04-21T14:16:35","date_gmt":"2016-04-21T12:16:35","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1350"},"modified":"2016-04-21T14:16:35","modified_gmt":"2016-04-21T12:16:35","slug":"magento-ajouter-un-block-dans-une-page-via-les-observers","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2016\/04\/21\/magento-ajouter-un-block-dans-une-page-via-les-observers\/","title":{"rendered":"Magento : Ajouter un block dans une page via les observers"},"content":{"rendered":"<p>Voyons ensemble aujourd&rsquo;hui comment ajouter un block de contenu dans une page magento via les observers.<br \/>\nPour l&rsquo;exemple on va se baser sur la probl\u00e9matique suivante :<br \/>\nJe souhaite afficher un message particulier sur la page du panier pour les clients qui ne sont pas connect\u00e9s.<br \/>\nLe contenu du message doit \u00eatre g\u00e9rable dans le backoffice via un block cms.<\/p>\n<p>En analysant la structure du fichier de layout checkout.xml pour la page panier, on constate qu&rsquo;il existe un noeud de type core\/text_list dans lequel nous allons inserer le contenu.<\/p>\n<pre lang=\"xml\" escaped=\"true\">&lt;checkout_cart_index&gt;\r\n...\r\n&lt;block type=\"core\/text_list\" name=\"additional.product.info\" translate=\"label\"&gt;\r\n&lt;label&gt;Additional Product Info&lt;\/label&gt;\r\n&lt;\/block&gt;\r\n&lt;\/checkout_cart_index&gt;\r\n<\/pre>\n<p>Pour r\u00e9aliser cela nous allons cr\u00e9er un module. ( je ne d\u00e9taille pas la proc\u00e9dure ) qui va se baser sur l\u2019\u00e9v\u00e9nement : <strong>controller_action_layout_generate_blocks_after<br \/>\n<\/strong>via le code suivant dans le fichier config.xml<\/p>\n<pre lang=\"xml\" escaped=\"true\"> \r\n&lt;events&gt;\r\n\u00a0&lt;controller_action_layout_generate_blocks_after&gt;\r\n\u00a0 &lt;observers&gt;\r\n\u00a0\u00a0 &lt;test_add_block_layout_xml&gt;\r\n\u00a0\u00a0\u00a0 &lt;class&gt;Hhennes_Tests_Model_Observer&lt;\/class&gt;\r\n\u00a0\u00a0\u00a0 &lt;method&gt;testAddBlockToLayoutXml&lt;\/method&gt;\r\n\u00a0\u00a0 &lt;\/test_add_block_layout_xml&gt;\r\n\u00a0 &lt;\/observers&gt;\r\n\u00a0&lt;\/controller_action_layout_generate_blocks_after&gt;\r\n&lt;\/events&gt;\r\n<\/pre>\n<p>Puis voici le code de l&rsquo;observer :<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php \r\nclass Hhennes_Tests_Model_Observer\u00a0 {\r\n\u00a0 \r\n\u00a0 \/**\r\n\u00a0\u00a0 * Ajout d'un contenu dynamique dans le layout\r\n\u00a0\u00a0 *\/\r\n\u00a0 public function testAddBlockToLayoutXml($observer) {\r\n\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 $action = $observer-&gt;getAction();\r\n\u00a0\u00a0\u00a0 $layout = $observer-&gt;getLayout();\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 \/\/Sur la page du panier : On ajoute le texte d'un block cms\r\n\u00a0\u00a0\u00a0 if ( $action-&gt;getRequest()-&gt;getOriginalPathInfo() == '\/checkout\/cart\/') {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 $additionnalBlock = $layout-&gt;getBlock('additional.product.info'); \/\/R\u00e9cup\u00e9ration du block parent auquel on veut ajouter le contenu\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 $cmsBlock = $layout-&gt;createBlock('cms\/block','test_block')-&gt;setBlockId('dresses-skirts'); \/\/Cr\u00e9ation du block cms dans le layout\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 $additionnalBlock-&gt;append($cmsBlock,'test_add_cms_block'); \/\/Ajout du nouveau block au block parent\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0 \u00a0\r\n\u00a0 }\r\n\u00a0 \r\n}<\/pre>\n<p>Avec ce principe il est ainsi possible d&rsquo;ajouter facilement du contenu sur n&rsquo;importe laquelle de vos pages, de mani\u00e8re programmable.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voyons ensemble aujourd&rsquo;hui comment ajouter un block de contenu dans une page magento via les observers. Pour l&rsquo;exemple on va se baser sur la probl\u00e9matique suivante : Je souhaite afficher un message particulier sur la page du panier pour les clients qui ne sont pas connect\u00e9s. Le contenu du message doit \u00eatre g\u00e9rable dans le [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[246],"tags":[434,337,150,435],"class_list":["post-1350","post","type-post","status-publish","format-standard","hentry","category-magento-2","tag-block","tag-layout","tag-magento","tag-observers"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=1350"}],"version-history":[{"count":1,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1350\/revisions"}],"predecessor-version":[{"id":1351,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1350\/revisions\/1351"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}