我正试图在magento中覆盖Mage_Catalog_Block_Layer_View
。我试图覆盖Mage_Catalog_Block_Layer_State
并且它正常工作,但layer_view
重写没有。这是一个错误吗?
<global>
<blocks>
<catalog>
<rewrite>
<layer_view>Mymodule_Catalog_Block_Layer_View</layer_view>
</rewrite>
</catalog>
</blocks>
</global>
<global>
<blocks>
<catalog>
<rewrite>
<layer_state>Mymodule_Catalog_Block_Layer_State</layer_state>
</rewrite>
</catalog>
</blocks>
</global>
请帮助我。我正在尝试几个小时
答案 0 :(得分:5)
诊断它的最佳方法是验证类名是否自己重写。在./demo.php
:
<?php
ini_set('display_errors',true);
error_reporting(E_ALL | E_STRICT);
include 'app/Mage.php';
Mage::setIsDeveloperMode(true);
Mage::app();
$layer = Mage::getConfig()->getBlockClassName('catalog/layer_view');
var_dump($layer);
您应该看到返回的自定义模块块类名而不是核心块类名。如果是这种情况,那么您需要逐步确定问题所在。这个块与其他几个块实例高度耦合,可能很难处理。
另请注意,Mage_CatalogSearch
模块有一个layer_view
块,该块从Mage_Catalog
layer_view
块延伸,不会使用您的覆盖。
答案 1 :(得分:1)
找到.phtml使用哪个类的最佳方法是将echo get_class($this)
放入其中。
由于我使用的是企业版,因此我的分层导航不使用Mage_Catalog_Block_Layer_View。相反,它使用Enterprise_Search_Block_Catalog_Block_Layer_View类。
当我覆盖那个课时,每件事都为我解决了。
答案 2 :(得分:1)
我使用了下面提到的代码:
在config.xml中
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<PKR_Advmixfilter>
<version>0.1.0</version>
</PKR_Advmixfilter>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<layer_view>PKR_Advmixfilter_Block_Layer_View</layer_view>
</rewrite>
</catalog>
</blocks>
</global>
</config>
并创建了一个块视图文件。
class PKR_Advmixfilter_Block_Layer_View extends Mage_Catalog_Block_Layer_View {
public function getFilters()
{
$filters = array();
if ($categoryFilter = $this->_getCategoryFilter()) {
$filters[] = $categoryFilter;
}
$filterableAttributes = $this->_getFilterableAttributes();
foreach ($filterableAttributes as $attribute) {
$filters[] = $this->getChild($attribute->getAttributeCode() . '_filter');
}
return $filters;
}
}
它正在我的工作。所以没有错误。 :)