我正在尝试使用我的模块中提供的新模块覆盖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>
我在这里错过了什么吗?
答案 0 :(得分:7)
你没有在Magento 1.7.0.1的vanilla安装中提到Magento版本,但是,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');
但这只是该块的魔术get
和set
方法正常工作。同样,当你调用getTemplateFile
时,Magento会返回null,因为你的块上还没有人调用setTemplateFile
。 (与继承自Mage_Core_Block_Template
的块相反,后者实际上具有已定义的getTemplateFile
方法。
您的主要问题是,当Mage_Catalog_Block_Product_Price_Template
不是模板块时,您将<block type="catalog/product_price_template" name="catalog_product_price_template" />
视为模板块。这由相同块的布局更新XML代码支持
{{1}}