Magento:在没有自定义的CMS块中包含特定产品价格

时间:2012-05-08 10:43:25

标签: magento

有没有办法在不编写自己的Magento模块的情况下将特定产品的价格包含在静态CMS块中?

我试过了:

{{block type="catalog/product_view" product_id="1234" template="catalog/product/price.phtml"}}

这使用了Mage_Catalog_Block_Product_View从product_id属性加载产品的事实。但这只有在注册表中没有product时才有效。因此,在产品详细信息页面上,将使用详细信息页面的产品。

我也看了Mage_Catalog_Block_Product::getProduct。这可以从产品ID加载,但前提是它包含在product字段中。

这样的东西
{{block type="catalog/product" product.product_id="1234" template="catalog/product/price.phtml"}}

无效,因为它会设置属性product.product_id,而不是像product->product_id那样嵌套。

另一种选择是添加一个自己的模板文件来加载productId参数中的产品,但我认为这不是干净的。

有什么好主意吗?

2 个答案:

答案 0 :(得分:2)

我没有尝试按照您之前建议的方式加载价格,但我可以看到的直接问题是price.phtml文件需要产品对象,而不仅仅是ID。

我要做的只是创建一个自定义.phtml文件,该文件接受布局中的ID并返回所需的HTML。然后,无论注册表加载什么产品,您都可以随意使用它。

.phtml文件的关键方法是: $id = $this->getProductId();从布局加载ID,然后$product = Mage::getModel('catalog/product')->load($id);获取产品对象。

现在您已经加载了产品,您可以输出您想要的任何属性和格式 - 例如$product->getFinalPrice()将为您提供产品的最终销售价格。

现在要包含自定义块,请将XML代码更改为{{block type="core/template" template="path/to/your/file.phtml" name="someReferenceName" product_id="1234"}}

XML中的等价物是: <block type="core/template" template="path/to/your/file.phtml" name="someReferenceName"><action method="setProductId"><product_id>1234</product_id></action></block>

注意:为块设置名称很重要,因为传递给块的任何参数(即product_id)都将根据此引用名称进行存储。如果您未能提供引用名称,至少在XML等效项中,您的块将不会收到传递的ID。我还没有测试过smarty风格的语法是否也是如此,但我希望它会是。

希望有所帮助!

答案 1 :(得分:0)

IcebergCommerce有一个名为Single product Embed Widget的扩展程序。这似乎具有您需要的功能,可配置为仅显示产品价格:http://icebergcommerce.com/software/magento-product-embed-widget.html

相关问题