In Magento 1 ist es als Modulentwickler möglich, die Vorlage eines Blocks mit Layout-XML-Code zu ändern
<reference name="block_to_change">
<action method="setTemplate">
<param>/path/to/template.phtml</param>
</action>
</reference>
und fügen Sie dann Ihre Vorlage zum Basisthema hinzu.
app/design/frontend/base/default/template/path/to/template.phtml
Kann man als Modulentwickler in Magento 2 etwas Ähnliches tun? Oder muss ich Layout-XML oder PHP-Code verwenden, um den gewünschten Block zu entfernen und einen neuen Block mit einer anderen Vorlage einzufügen (deren Klasse die der ursprünglichen Blockklasse erweitert)?
Ich weiß, dass ich ein benutzerdefiniertes Design erstellen kann, das eine Vorlage ersetzt. Ich möchte jedoch ein Modul erstellen, das die Standardvorlage ändert, es jedoch weiterhin zulässt, dass ein benutzerdefiniertes Design diese Vorlage ersetzt.
Aktionsknoten ist veraltet, aber Sie können Blockargumente verwenden
quelle
addtocart.phtml
Datei nach Systemkonfiguration und will auch diese mit benutzerdefinierten Modul aktualisieren<action method='setTemplate'>
) funktioniert ohne Probleme.Um den Unterschied zwischen
<arguments>
und zu verstehen<action>
, müssen Sie verstehen, wie die Konstruktoren von Magento 2-Objekten funktionieren. Wenn Sie einen Konstruktor in Magento überschreiben, erhalten Sie immer$data-parameter
ein Array. Dies sind die Daten in Bezug auf den internen in den XML - Dateien und übersetzte zur Verfügung gestellt$_data-array
von\Magento\Framework\DataObject
:Bei einer Vorlage,
setTemplate()
die im Pseudokonstruktor (_construct()
einzelner Unterstrich) verwendet wird, bedeutet dies jedoch, dass die$data
überschrieben wird, unabhängig davon, ob sie im XML festgelegt ist.In diesem Szenario
<action>
wird bevorzugt, da nach dem Konstruktor & Pseudo-Konstruktor ausgeführt wird dies.quelle
Folgendes funktionierte für mich in Magento EE 2.2.3
Hinweis: Wenn Sie ein benutzerdefiniertes Modul verwenden, um die Vorlage eines Cores zu ändern, und verrückt werden, weil der zuvor abgeschnittene Code nicht funktioniert, stellen Sie sicher, dass Ihr Modul geladen ist, nachdem Sie das zu ändernde Core-Modul (module.xml) und Sie hingerichtet
bin/magento setup:upgrade
:)quelle
Ich weiß nicht warum, aber ich finde diesen Weg der Beste zu sein:
quelle
Dies funktioniert nur, wenn Ihr Block vor der Verwendung der
setTemplate
Methode nicht überschrieben wurde . Magento 2.2.x und höher.quelle