{"id":1761,"date":"2018-03-15T15:05:46","date_gmt":"2018-03-15T13:05:46","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=1761"},"modified":"2022-10-25T20:29:22","modified_gmt":"2022-10-25T18:29:22","slug":"prestashop-1-7-dynamisez-vos-contenus-wysiwyg","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2018\/03\/15\/prestashop-1-7-dynamisez-vos-contenus-wysiwyg\/","title":{"rendered":"Prestashop 1.7 : Dynamisez vos contenus wysiwyg"},"content":{"rendered":"<p>La probl\u00e9matique n&rsquo;est pas nouvelle sur Prestashop, et c&rsquo;est un point qui me frustre assez souvent et pour lequel j&rsquo;avais d\u00e9j\u00e0 fait un module en 2014 ( cf. <a href=\"https:\/\/www.h-hennes.fr\/blog\/2014\/01\/18\/prestashop-liens-dynamiques-vers-les-pages-cms-dans-lediteur-tinymce\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.h-hennes.fr\/blog\/2014\/01\/18\/prestashop-liens-dynamiques-vers-les-pages-cms-dans-lediteur-tinymce\/<\/a> )<br \/>\nCe module n&rsquo;est malheureusement plus fonctionnel sur Prestashop 1.7.<\/p>\n<p>Dans les \u00e9diteurs de contenus, il n&rsquo;est pas possible\u00a0 des mettre des liens ou des contenus dynamiques.<br \/>\nLa bonne nouvelle cependant c&rsquo;est que la version 1.7 de Prestashop apporte de nouveaux hooks qui vont permettre de modifier ces contenus avant l&rsquo;affichage des \u00e9l\u00e9ments, et donc sans surcharge\u00a0 \ud83d\ude42<\/p>\n<p>Les \u00e9l\u00e9ments dont les contenus sont modifiables sont les suivants :<\/p>\n<ul>\n<li>Pages cms<\/li>\n<li>Cat\u00e9gories cms<\/li>\n<li>Contenu produit<\/li>\n<li>Contenu cat\u00e9gorie<\/li>\n<li>Contenu Fabriquants<\/li>\n<li>Contenu fournisseurs<\/li>\n<\/ul>\n<p>Pour l&rsquo;exemple on va partir sur le besoin suivant :<\/p>\n<p>Je souhaite <strong>afficher un \u00e9l\u00e9ment de configuration<\/strong>\u00a0 dans l&rsquo;ensemble des contenus not\u00e9 ci-dessous.<br \/>\nCe sera la configuration <em>PS_SHOP_EMAIL<\/em> , qui correspond \u00e0 l&rsquo;\u00e9mail par d\u00e9faut de la boutique.<\/p>\n<p>Pour afficher cette variable il faudra int\u00e9grer dans les zones de contenus le code suivant :<\/p>\n<p><strong>{{configuration name=PS_SHOP_EMAIL}}<\/strong><\/p>\n<p>Le but du module sera donc de remplacer cet \u00e9l\u00e9ment par sa valeur de configuration.<\/p>\n<p>Voici le contenu qui sera saisi dans l&rsquo;admin :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1762 size-full\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/03\/cms-content-placeholder-e1521119043927.jpg\" alt=\"Cms placeholder\" width=\"780\" height=\"230\" \/><\/p>\n<p>Et le r\u00e9sultat :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1763\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/03\/cms-content-placeholder-result.jpg\" alt=\"Cms placeholder result\" width=\"737\" height=\"282\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/03\/cms-content-placeholder-result.jpg 737w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/03\/cms-content-placeholder-result-300x115.jpg 300w\" sizes=\"auto, (max-width: 737px) 100vw, 737px\" \/><\/p>\n<p>Vous trouverez ci-dessous le code complet du module qui permets de g\u00e9rer cela<\/p>\n<pre escaped=\"true\" lang=\"php\">&lt;?php\r\nclass HhContentVars extends Module {\r\n\r\n    public function __construct() {\r\n        $this-&gt;name = 'hhcontentvars';\r\n        $this-&gt;tab = 'others';\r\n        $this-&gt;author = 'hhennes';\r\n        $this-&gt;version = '1.0.0';\r\n        $this-&gt;need_instance = 0;\r\n        $this-&gt;bootstrap = true;\r\n\r\n        parent::__construct();\r\n\r\n        $this-&gt;displayName = $this-&gt;l('Hh content var');\r\n        $this-&gt;description = $this-&gt;l('Add content var in wysiwyg editors');\r\n    }\r\n\r\n    public function install() {\r\n        if (!parent::install() \r\n                \/\/Hooks Fronts d'affichage\r\n                || !$this-&gt;registerHook('filterCmsContent') \r\n                || !$this-&gt;registerHook('filterCmsCategoryContent') \r\n                || !$this-&gt;registerHook('filterProductContent') \r\n                || !$this-&gt;registerHook('filterCategoryContent') \r\n                || !$this-&gt;registerHook('filterManufacturerContent') \r\n                || !$this-&gt;registerHook('filterSupplierContent')\r\n        )\r\n            return false;\r\n\r\n        return true;\r\n    }\r\n\r\n\r\n    \/**\r\n     * Filtre des contenus Cms\r\n     * @param $params\r\n     * @return array\r\n     *\/\r\n    public function hookFilterCmsContent($params) {\r\n\r\n        $params['object']['content'] = $this-&gt;_updateContentVars($params['object']['content']);\r\n\r\n        return [\r\n            'object' =&gt; $params['object']\r\n        ];\r\n    }\r\n\r\n    \/**\r\n     * Filtre des contenus des cat\u00e9gories cms\r\n     * @param $params\r\n     * @return array\r\n     *\/\r\n    public function hookFilterCmsCategoryContent($params) {\r\n\r\n        $params['object']['description'] = $this-&gt;_updateContentVars($params['object']['description']);\r\n\r\n        return [\r\n            'object' =&gt; $params['object']\r\n        ];\r\n    }\r\n\r\n    \/**\r\n     * Filtre des contenu des produits\r\n     * @param $params\r\n     *\/\r\n    public function hookFilterProductContent($params) {\r\n        $params['object']['description'] = $this-&gt;_updateContentVars($params['object']['description']);\r\n        return [\r\n            'object' =&gt; $params['object']\r\n        ];\r\n    }\r\n\r\n    \/**\r\n     * Filtre des contenus des cat\u00e9gories produits\r\n     * @param $params\r\n     * @return array\r\n     *\/\r\n    public function hookFilterCategoryContent($params) {\r\n\r\n        $params['object']['description'] = $this-&gt;_updateContentVars($params['object']['description']);\r\n\r\n        return [\r\n            'object' =&gt; $params['object']\r\n        ];\r\n    }\r\n\r\n    \/**\r\n     * Filtre des contenus des Marques\r\n     * @param $params\r\n     * @return mixed\r\n     *\/\r\n    public function hookFilterManufacturerContent($params) {\r\n\r\n        return $this-&gt;_updateContentVars($params['filtered_content']);\r\n    }\r\n\r\n    \/**\r\n     * Filtre des contenus des fournisseurs\r\n     * @param $params\r\n     * @return array\r\n     *\/\r\n    public function hookFilterSupplierContent($params) {\r\n        $params['object']['description'] = $this-&gt;_updateContentVars($params['object']['description']);\r\n\r\n        return [\r\n            'object' =&gt; $params['object']\r\n        ];\r\n    }\r\n\r\n    \/**\r\n     * Mise \u00e0 jour du contenu\r\n     * @param string : contenu ou il faut remplacer les variables\r\n     * @return string : contenu avec les variables remplac\u00e9es\r\n     *\/\r\n    protected function _updateContentVars($content) {\r\n\r\n        $content = urldecode($content);\r\n        \r\n        \/\/R\u00e9cup\u00e9ration des \u00e9l\u00e9ments de configuration\r\n        preg_match_all('#{{configuration name=(.*)}}#i', $content, $configurations);\r\n        if (isset($configurations[1]) &amp;&amp; sizeof($configurations[1])) {\r\n            foreach ($configurations[1] as $conf) {\r\n                if ( $value = Configuration::get($conf) ) {\r\n                    $content = preg_replace('#{{configuration name=' . $conf . '}}#',$value, $content);\r\n                }\r\n            }\r\n        }\r\n\r\n        return $content;\r\n    }\r\n}<\/pre>\n<p>Ceci n&rsquo;est qu&rsquo;un exemple, il donc possible de mettre en place autant de tags que souhait\u00e9s.<br \/>\nSi j&rsquo;ai le temps durant les prochaines semaines je verrais peu \u00eatre pour mettre \u00e0 jour mon module pr\u00e9c\u00e9dent uniquement PS 1.7<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La probl\u00e9matique n&rsquo;est pas nouvelle sur Prestashop, et c&rsquo;est un point qui me frustre assez souvent et pour lequel j&rsquo;avais d\u00e9j\u00e0 fait un module en 2014 ( cf. https:\/\/www.h-hennes.fr\/blog\/2014\/01\/18\/prestashop-liens-dynamiques-vers-les-pages-cms-dans-lediteur-tinymce\/ ) Ce module n&rsquo;est malheureusement plus fonctionnel sur Prestashop 1.7. Dans les \u00e9diteurs de contenus, il n&rsquo;est pas possible\u00a0 des mettre des liens ou des contenus [&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":[245],"tags":[110,104,218],"class_list":["post-1761","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-cms","tag-prestashop","tag-wysiwyg","prestashop-1-7","prestashop-1-7-7","prestashop-1-7-8"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1761","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=1761"}],"version-history":[{"count":7,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1761\/revisions"}],"predecessor-version":[{"id":1770,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1761\/revisions\/1770"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}