Magento在自定义扩展中显示产品数据

时间:2014-04-03 00:32:25

标签: magento magento-1.8

在自定义Magento 1.8.x扩展中,我想显示产品数据,但利用所有现有目录/产品核心代码。

直接从category.xml复制/粘贴product.info块(和子),继承核心功能,但更改块以使用自定义模板。到目前为止,除产品价格/可用性外,所有产品数据都显示正常。

价格/可用性(对于一个简单的产品)来自块product.info.simple,作为下面布局句柄的一部分。

<PRODUCT_TYPE_simple translate="label" module="catalog">
    <label>Catalog Product View (Simple)</label>
    <reference name="product.info">
        <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data" template="catalog/product/view/type/default.phtml">
            <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
</PRODUCT_TYPE_simple>

但是,无论放置此布局xml的位置(在扩展布局或local.xml中),都不会呈现价格/可用性。如果product.info直接包含block product.info.simple,则会进行渲染。 e.g。

<block type="catalog/product_view" name="product.info" template="aydus/quickview/view.phtml">
    <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data" template="catalog/product/view/type/default.phtml">
        <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label">
            <label>Product Extra Info</label>
        </block>
    </block>
    etc.

如何使用现有(或复制)这些布局句柄显示产品价格/可用性?

1 个答案:

答案 0 :(得分:1)

<PRODUCT_TYPE_simple>是一个特殊的句柄。 Magento知道它何时显示一个简单的产品,并且神奇地*包含XML。这有点像对类别n的任何更新。我建议你创建一个这样的例子:

<my_magic_price_availablity translate="label" module="catalog">
    <label>Catalog Product View (Simple)</label>
    <reference name="product.info">
        <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data" template="catalog/product/view/type/default.phtml">
            <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
</my_magic_price_availablity>

然后在你的XML中你想要这个句柄的任何地方将块添加到一个布局(已经有一个名为&#34; product.info&#34;的块)中你只需要添加...

  <update handle="my_magic_price_availablity"/>

所以在上下文中,在local.xml中,你可能有

<catalog_product_view translate="label">
  <update handle="my_magic_price_availablity"/>
</catalog_product_view>

<update表示复制my_magic_price_availability的内容,就像我在此处输入的那样&#39;。

*如果你不相信魔法,那么你应该在这里阅读代码:

//file: app/code/core/Mage/Catalog/Helper/Product/View.php
//class: Mage_Catalog_Helper_Product_View
//function: initProductLayout()
//...
        $update->addHandle('PRODUCT_TYPE_' . $product->getTypeId());
        $update->addHandle('PRODUCT_' . $product->getId());
//...

所以是的,如果你想为单个产品指定块,可以在local.xml中使用<PRODUCT_n>

我想你可以将这些行添加到自定义模块中 - 这可能是一个更通用的解决方案。 $update$update = $controller->getLayout()->getUpdate();