有没有办法在不编写自己的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参数中的产品,但我认为这不是干净的。
有什么好主意吗?
答案 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