【问题标题】:Overrriding Magento Block and Template覆盖 Magento 块和模板
【发布时间】:2012-09-07 18:16:26
【问题描述】:

我正在尝试用我的模块中提供的新块和模板覆盖 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>

我错过了什么吗?

【问题讨论】:

  • 请注意,扩展 Mage_Core_Block_Template 而不是 Mage_Catalog_Block_Product_Price_Template 会显示旧的价格模板 'frontend\base\default\template\catalog/product/price.phtml' 和新的块 ABC_PriceX_Block_Price,这更奇怪

标签: magento


【解决方案1】:

您没有提到 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 方法工作。同样,当您调用 getTemplateFile 时,Magento 会返回 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" />

【讨论】:

  • 什么是模板/非模板块?在 magento 网站上提到的所有内容都是结构和内容块
  • 模板块是使用 phtml 模板来呈现其内容的块。非模板块是使用它的 _toHtml 方法渲染模板的块,并且由于其他原因被插入到布局中。
  • 好答案 - 一直想知道为什么我不能 grep price.phtml!
猜你喜欢
  • 1970-01-01
  • 2016-05-18
  • 2023-03-22
  • 2014-12-31
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多