Magento块:用扩展模板替换现有块而不触及原始文件

时间:2015-04-30 18:14:32

标签: magento

我想将正常标签“stock available”替换为客户可以通过控制面板为每个产品设置的属性值。这样简单,只适用于简单的产品。

现在,我想建立一个特定的模块,在需要的时候“关闭”此功能。 为何选择模块?

  • 我想用自定义块扩展(而不是覆盖)Mage_Catalog_Block_Product_View_Type_Simple类 类。
  • 我不想编辑原始的rwd / default / template / catalog / product / view / type / availability / default.phtml 文件
  • 我不想编辑product / view.phtml文件来更改调用原始可用性块的代码段(getChildHtml('product_type_availability');?>)

所以,我想要一个完全延迟的负载扩展。唯一认为我无法做到的事情是:在我的模块的布局文件中,我该怎么做:

<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>  
    <reference name="product.info.availability">
                <block type="disponibilita/catalog_product_view_type_semplice" name="product.info.disponibilita" as="product_disponibilita" template="itserv/disponibilita/catalog/product/view/type/default.phtml"/>                            
    </reference>                           
</catalog_product_view>        
</layout>

我知道它本身不能输出任何东西,但正如我所说,我不想用getChildHtml调用编辑或替换product / view.phtml文件。

所以:我知道可以通过xml删除product.info.availability块,但是如何在不编辑任何核心或原始包/主题文件的情况下将其替换为我的自定义模板(和块)?

注意:如果我在块声明中使用output =“toHtml”,它似乎无法识别参考product.info.availability

2 个答案:

答案 0 :(得分:2)

我假设您正在扩展块catalog/product_view_type_simple in the usual way的类,这意味着您的类现在处理布局中的现有调用,您不必替换它们。然后,您可以重新定义该块的模板:

<reference name="product.info.availability">
    <action method="setTemplate"><template>itserv/disponibilita/catalog/product/view/type/default.phtml</template></action>
</reference>

答案 1 :(得分:1)

您应该能够按名称删除原始块,然后插入具有相同名称和别名的新块。由于默认模板文件使用块的别名输出(<?php echo $this->getChildHtml('product_type_availability'); ?>),因此只需输出块代替原始块。

类似的东西:

<reference name="product.info">
    <!-- remove original availability block -->
    <remove name="product.info.availability" />

    <!-- replace with your own availability block, keeping the same name and alias -->
    <block type="disponibilita/catalog_product_view_type_semplice" name="product.info.availability" as="product_type_availability" template="itserv/disponibilita/catalog/product/view/type/default.phtml" />
</reference>