3

我正在尝试用我的模块中提供的新模块覆盖 Mage_Catalog_Block_Product_Price_Template 块和模板,通过设置配置覆盖块是可以的:

<global>
    <blocks>
        <catalog>
            <rewrite>
                <product_price>ABC_PriceX_Block_Price</product_price>
            </rewrite>
        </catalog>
    </blocks>
</global>

新块被调用

<?php

class ABC_PriceX_Block_Price extends Mage_Catalog_Block_Product_Price_Template {

    protected function _construct() {
        parent::_construct();

        Mage::log('I am in ABC block');
        $this->setTemplate('pricex/price.phtml');


        Mage::log('Template file is '. $this->getTemplateFile() );
    }

}

但是我得到了一个非常奇怪的行为,价格块不再出现在前端,我在日志文件中得到的只是

2012-09-07T18:05:38+00:00 DEBUG (7): I am in ABC block
2012-09-07T18:05:38+00:00 DEBUG (7): Template file is 

并且模板未呈现:

<p>
<?php Mage::log('I am in ABC template'); ?>
</p>

我在这里错过了什么吗?

4

1 回答 1

7

您没有提到 Magento 版本,在 Magento 1.7.0.1 的香草安装中Mage_Catalog_Block_Product_Price_Template,尽管名称具有误导性,但该类不是板块类。

#File: app/code/core/Mage/Catalog/Block/Product/Price/Template.php
class Mage_Catalog_Block_Product_Price_Template extends Mage_Core_Block_Abstract
{
    ...
}

Mage_Core_Block_Abstract请注意,它从而不是延伸Mage_Core_Block_Template

所以,既然它是一个块,你可以设置一个模板

$this->setTemplate('pricex/price.phtml');

但这只是块的魔力getset方法。同样,当您调用getTemplateFileMagento 时返回 null,因为setTemplateFile尚未在您的块上调用任何人。(与继承自 的块相反Mage_Core_Block_Template,它实际上具有已定义的getTemplateFile方法。

您的主要问题是当它不是模板块时,您将Mage_Catalog_Block_Product_Price_Template其视为模板块。这由同一块的布局更新 XML 代码支持

<block type="catalog/product_price_template" name="catalog_product_price_template" />
于 2012-09-07T18:58:53.060 回答