Escaper dans les templates PHTML
Magento 2 supprime de manière radicale toutes les balises HTML que vous pourriez renseigner dans des champs du BO. Dans notre exemple, le champ à renseigner affiche un titre en front et si on renseigne ceci: 50<sup>th</sup> Anniversary
, l’élément <sup>
est automatiquement supprimé.
Pour éviter ceci, on peut déclarer(1) et exploiter l’Escaper dans les fichiers PHTML en listant dans un tableau(2) l’ensemble des balises HTML à conserver:
1 |
/** @var \Magento\Framework\Escaper $escaper */ |
1 |
<h1><?= $escaper->escapeHtml($story->getName(), ['sup']); ?></h1> |
Valable également en cas d’utilisation d’une clé de traduction (fichiers CSV):
1 |
"Related news & stories","Related<sup>TH</sup> news & stories" |
1 |
<?= $escaper->escapeHtml(__('Related news & stories'), ['sup']) ?> |
Extension Page Builder de Magento 2 (payante)
Documentation officielle du Page Builder Adobe Commerce (ex Magento 2).
Knockout JS dans les fichiers HTML
C’est en fait dans un fichier title-tag-escaper.js qu’on liste les tags HTML à ne pas échapper:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * Strip html tags except strong|em|span|br|sup * * @param {string} name * @param {Object} data * @returns {string} */ ; _proto.toDom = function toDom(name, data) { var input = ((0, _object.get)(data, name)); return this.stripTags(input, '<strong><em><span><br><sup>'); }; |
Configuration d’un module dans un fichier XML
Dans app/code/MyVendor/PageBuilder/view/adminhtml/pagebuilder/content_type/module_XX, afin que la liste des balises autorisées soit prise en compte il faut ajouter un attribut converter
pour l’élément (le champ du formulaire d’édition en BO) ciblé:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_PageBuilder:etc/content_type.xsd"> <type name="module_21" label="Text" menu_section="add_content" component="Magento_PageBuilder/js/content-type" preview_component="MyVendor_PageBuilder/js/content-type/module-21/preview" master_component="Magento_PageBuilder/js/content-type/master-collection" form="pagebuilder_module_21_form" icon="icon-pagebuilder-module-21" sortOrder="21" translate="label"> <parents default_policy="deny"> <parent name="root-container" policy="allow"/> <parent name="row" policy="allow"/> </parents> <children default_policy="deny"/> <appearances> <appearance name="theme_01" default="true" preview_template="MyVendor_PageBuilder/content-type/module-21/theme-01/preview" master_template="MyVendor_PageBuilder/content-type/module-21/theme-01/master" reader="Magento_PageBuilder/js/master-format/read/configurable"> <elements> <element name="title"> <html name="title" converter="MyVendor_PageBuilder/js/converter/html/title-tag-escaper"/> <attribute name="title_italic" source="data-italic"/> <attribute name="title_tag" source="data-tag"/> </element> |