我正在尝试使用我的模块中提供的新模块覆盖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>
我错过了什么吗?
你没有提到的Magento的版本,但在香草,安装Magento的1.7.0.1的Mage_Catalog_Block_Product_Price_Template类,尽管它的误导性名称,不是一个模板block类.
#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');
但这只是该区块的魔力get和set方法.类似地,当你调用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" />