Dans Magento 1, en tant que développeur de module, il est possible de modifier le modèle d'un bloc à l'aide d'un code XML de présentation, comme ceci
<reference name="block_to_change">
<action method="setTemplate">
<param>/path/to/template.phtml</param>
</action>
</reference>
puis en ajoutant votre modèle au thème de base.
app/design/frontend/base/default/template/path/to/template.phtml
Est-il possible, en tant que développeur de module, de faire quelque chose de similaire dans Magento 2? Ou aurais-je besoin d'utiliser du code XML de présentation ou du code PHP pour supprimer le bloc qui m'intéresse et insérer un nouveau bloc avec un modèle différent (dont la classe étend celle de la classe de bloc d'origine)
Je sais que je pourrais créer un thème personnalisé qui remplace un modèle, mais je souhaiterais créer un module qui modifie le modèle par défaut, tout en permettant à un thème personnalisé de le remplacer.
Le nœud d'action est obsolète, mais vous pouvez utiliser des arguments de blocage
la source
addtocart.phtml
fichier en fonction de la configuration du système et je souhaite également le mettre à jour à l'aide d'un module personnalisé<action method='setTemplate'>
) fonctionne sans problème.Pour comprendre la différence entre
<arguments>
et,<action>
vous devez comprendre le fonctionnement des constructeurs d’objets Magento 2. Si vous substituez un constructeur dans Magento, vous obtiendrez toujours un$data-parameter
qui est un tableau. Ce sont les données telles que fournies dans les fichiers XML et traduites en interne$_data-array
de\Magento\Framework\DataObject
:Cependant, dans le cas d'un modèle, si
setTemplate()
est utilisé dans le pseudo constructeur (_construct()
, un soulignement simple), cela signifie que le$data
est remplacé, peu importe s'il est défini dans le XML.Dans ce scénario, il
<action>
est préférable, car cela est exécuté après le constructeur & pseudo constructeur.la source
Ce qui suit a fonctionné pour moi dans Magento EE 2.2.3
Remarque: si vous utilisez un module personnalisé pour modifier le modèle d'un core et que vous vous énervez parce que le code précédemment coupé ne fonctionne pas, assurez-vous que votre module est chargé après le core que vous essayez de modifier (module.xml) et que vous le souhaitez. exécuté
bin/magento setup:upgrade
:)la source
Je ne sais pas pourquoi, mais je trouve ce moyen d'être le meilleur:
la source
Cela ne fonctionnera que si votre bloc n'a pas été écrasé avant d'utiliser la
setTemplate
méthode. Magento 2.2.x et supérieur.la source