Czy można zmienić typ bloku w układzie XML układu?
Wiem, jak zmienić szablon przy użyciu setTemplate
metody, ale próbuję zmienić typ bloku. czy to możliwe?
Czy można zmienić typ bloku w układzie XML układu?
Wiem, jak zmienić szablon przy użyciu setTemplate
metody, ale próbuję zmienić typ bloku. czy to możliwe?
Odpowiedzi:
Zmiana typu bloku oznacza zmianę klasy bloku, więc nie, ale ...
... możesz po prostu zastąpić blok:
layout.xml
jest przetwarzany po utworzeniu bloku, np. Z <depends>
inCompany_Module.xml
Problem polega na tym, że to zastępuje blok i nie zmienia typu. Oznacza to, że wszystko, co zostało zrobione w tym bloku między stworzeniem a twoją zmianą, zostało utracone.
Na przykład do zmiany catalog.navigation
:
<layout version="0.1.0">
<catalog_category_default translate="label">
<reference name="left">
<block type="myModule/navigation" name="catalog.leftnav" after="currency" template="myModule/catalog/navigation/left.phtml"/>
</reference>
</catalog_category_default>
</layout>
Nie można tego zmienić w plikach układu afaik. Możesz je jednak rozszerzyć i zastąpić w plikach konfiguracyjnych.
Przykład:
<config>
<global>
<blocks>
<catalog>
<rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
</catalog>
</blocks>
</global>
</config>
Pamiętaj, aby przedłużyć oryginalny blok.
Miałem podobny problem, że muszę zaktualizować konkretny blok dla określonego układu.
Skończyło się to i wydaje się, że działa (w pliku układu)
<controller_x_y>
<reference name="block_name_reference">
<block type="mymodule/customblock" name="block_name_reference" />
</reference>
</controller_x_y>
Mam nadzieję że to pomoże.