我敢肯定,我们都遇到过这样一种情况,即您有多个扩展,其中一个块或模型重写了相同的核心块/模型。我遇到的问题是: 你如何控制 Magento 看到这些类的顺序?
例如,假设我们有 2 个具有以下 2 个类的扩展:
A级
配置文件
<catalog>
<rewrite>
<product_view>My_ClassA_Block_Catalog_Product_View</product_view>
</rewrite>
</catalog>
我的/ClassA/块/目录/产品/View.php
class My_ClassA_Block_Catalog_Product_View extends Mage_Catalog_Block_Product_View {}
B类
<catalog>
<rewrite>
<product_view>My_ClassB_Block_Catalog_Product_View</product_view>
</rewrite>
</catalog>
我的/ClassB/块/目录/产品/View.php
class My_ClassB_Block_Catalog_Product_View extends Mage_Catalog_Block_Product_View {}
--
推荐的解决方案是更改其中一个,以便它们扩展另一个并将它们链接在一起(class A extends B {}
,,class B extends C {}
等):
我的/ClassA/块/目录/产品/View.php
class My_ClassA_Block_Catalog_Product_View extends My_ClassB_Block_Catalog_Product_View {}
我的/ClassB/块/目录/产品/View.php
class My_ClassB_Block_Catalog_Product_View extends Mage_Catalog_Block_Product_View {}
--
我遇到的问题是 Magento 不一定这么看。我不知道它是按字母顺序排列还是有些随机,但有时这有效,有时无效。在某些情况下,Magento 优先考虑ClassBcreateBlock('catalog/product_view')
和创建ClassB实例的所有调用,完全绕过ClassA中的任何代码。
createBlock('catalog/product_view')
所以我的问题是:当两个不同的扩展都重写核心 catalog_product_view 类时,我如何控制哪个类被实例化?