在自定义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.
如何使用现有(或复制)这些布局句柄显示产品价格/可用性?
答案 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();