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