1

我正在尝试Mage_Catalog_Block_Layer_View在 magento 中覆盖。我试图覆盖它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>

请帮帮我。我正在尝试几个小时

4

3 回答 3

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块,它不会使用您的覆盖。

于 2012-06-25T15:19:01.857 回答
1

找到您的 .phtml 使用哪个类的最佳方法放在echo get_class($this)其中。

由于我使用的是企业版,所以我的分层导航不使用 Mage_Catalog_Block_Layer_View。相反,它使用 Enterprise_Search_Block_Catalog_Block_Layer_View 类。

当我覆盖该课程时,所有事情都为我整理好了。

于 2013-03-21T08:02:49.413 回答
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;
    }
}

它在我的最后工作。所以没有错误。:)

于 2014-05-21T10:36:47.967 回答