Jeder Block oder jede Gruppe von Blöcken wird in der config.xml
Datei eines solchen Moduls (innerhalb des <global>
Tags) deklariert .
Hier ist ein Beispiel aus dem Katalogmodul
<blocks><!-- marks definition of a block group -->
<catalog><!-- unique alias for blocks in the module -->
<class>Mage_Catalog_Block</class><!-- class prefix for all blocks -->
</catalog>
</blocks>
Dies bedeutet, dass ein Block mithilfe des Alias instanziiert werden kann, catalog/class_name_here
wobei class_name_here
sich der Rest des Klassenpfads ab dem Präfix befindet.
Dies bedeutet catalog/class_name_here
, dass standardmäßig auf zugeordnet wird Mage_Catalog_Block_Class_Name_Here
.
Um einen Block neu zu schreiben, müssen Sie ein Modul erstellen, das von dem Modul abhängt, das Sie Magento_Catalog
in meinem Beispiel ändern möchten ( ).
Und Sie müssen dies config.xml
unter dem <global>
Tag hinzufügen .
<blocks>
<catalog><!-- alias of the block group you are rewriting -->
<rewrite><!-- reserved tag: specify that you are rewriting something -->
<class_name_here>YourNamespace_YourModule_Block_Your_New_Class_Here</class_name_here> <!-- tag: the rest of the alias of the class you are rewriting. value: the name of your class that rewrites the core class -->
</rewrite>
</catalog>
</blocks>
Erstellen Sie dann die Klasse YourNamespace_YourModule_Block_Your_New_Class_Here
(gemäß der ZF-Ordnerstruktur) und lassen Sie diese Klasse die ursprüngliche Klasse erweitern.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Wenn Sie fertig sind, deaktivieren Sie die Kompilierung und aktivieren Sie sie erneut (falls erforderlich) und leeren Sie den Cache.
Dies funktioniert nicht für abstrakte Blöcke.
Es funktioniert nur für Klassen, die instanziiert werden.
Beispiel
Angenommen, Sie möchten die Datei app \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php neu schreiben, die die Klasse Mage_Catalog_Block_Product_View_Options_Type_Select
in Ihrem eigenen Modul Marius_Test enthält .
Dann benötigen Sie diesen Eintrag in Ihrem config.xml
:
<blocks>
<catalog>
<rewrite>
<product_view_options_type_select>Marius_Test_Block_Catalog_Block_Product_View_Options_Type_Select</product_view_options_type_select>
</rewrite>
</catalog>
</blocks>
app \ code \ local \ Marius \ Test \ Block \ Katalog \ Produkt \ Ansicht \ Optionen \ Typ \ Select.php :
class Marius_Test_Block_Catalog_Product_View_Options_Type_Select extends Mage_Catalog_Block_Product_View_Options_Type_Select
{
//your awesome code here
}
Mage_Catalog_Block_Product_View_Options_Type_Select
in app \ code \ local \ WR \ EPO \ Block \ Katalog \ Block \ Produkt \ Ansicht \ Optionen \ Typ \ Select.php zu überschreiben . Ich habe es so versucht: codepen.io/anon/pen/WYOqBr<Mage_Catalog_Block_Product_View_Options_Type_Select> WR_EPO_Block_Catalog_Block_Product_View_Options_Type_Select </Mage_Catalog_Block_Product_View_Options_Type_Select>
durch<product_view_options_type_select>WR_EPO_Block_Catalog_Block_Product_View_Options_Type_Select</product_view_options_type_select>
und stellen Sie sicher, dass keine Leerzeichen vorhanden sindproduct_view_options_type_select
product_view_options_type_select
anstelle des echten Klassennamens verwendenMage_Catalog_Block_Product_View_Options_Type_Select
. Wenn Sie Ihre Antwort entsprechend ändern, werde ich abstimmen.Für My Point of View überschreiben und schreiben Sie diese beiden Dinge unterschiedlich.
Überschreiben:
Umschreiben:
1) Beispiel für das Überschreiben:
Wenn ich die
app/code/core/Mage/Catalog/Block/Product/List.php
Datei überschreiben muss, kopiere ich sie in mein lokales Modul mit demselben Pfad wie unten gezeigtapp/code/local/Mage/Catalog/Block/Product/List.php
Dies wird von Magento nicht empfohlen. Sie können dies jedoch tun.
2) Beispiel für ein Umschreiben:
Wenn ich diese Blockklasse neu schreiben möchte,
Mage_Adminhtml_Block_Sales_Order_Create
codiere ich in meinem Modul config.xml wie untenUnd in meiner Klasse
Trimantra_Smallchanges_Block_Adminhtml_Sales_Order_Create
Ich codiere wie unten
quelle
Es ist wichtig, hier hinzuzufügen, dass Blockumschreibungen (sowie alle anderen Umschreibungen von Magento-Modulen) den höheren Wartungsaufwand bedeuten und daher als letzte Chance zur Erweiterung der Funktionalität nach Konfigurationsmanipulation, Ereignissen und Themenanpassung betrachtet werden sollten.
Mögliches Problem 1: Die neu geschriebene Vorlage wird nicht aktualisiert, wenn Sie oder ein anderer Betreuer die Quelldateien von Magento aktualisieren. Bedeutet, dass die Sicherheitsupdates oder -verbesserungen nicht auf Ihren Code angewendet werden. Gleiches gilt für andere neu geschriebene Klassen, einschließlich Blöcke, hängt jedoch davon ab, wie viel neu geschrieben wurde (siehe unten).
Mögliches Problem 2: Der neu geschriebene Block (oder eine andere Klasse) wird möglicherweise von einer anderen Erweiterung neu geschrieben, die Sie oder ein anderer Betreuer zu installieren versuchen. Dann müssen Sie diesen Konflikt lösen.
Alternative 1: Verwenden Sie Ereignisse, dh durchsuchen Sie den Code, den Sie gerade umschreiben möchten, und prüfen Sie, ob Ereignisse vorhanden sind, mit denen die gewünschte Funktionalität erreicht werden kann.
Alternative 2: Smart umschreiben, dh umschauen: Überprüfen Sie möglicherweise die Stelle, an der die Klasse, die Sie umschreiben möchten, instanziiert ist, und prüfen Sie, ob Sie beeinflussen können, welche Klasse über config oder events ausgewählt wird. Möglicherweise gibt es eine Klasse, um die Sie eine 3-Zeilen-Methode überschreiben können, um den Klassennamen zu ersetzen, anstatt die 30-Zeilen-Methode von der ursprünglichen Klasse in die neu geschriebene zu kopieren.
quelle