1

有没有办法在不编写自己的 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 参数加载产品,但我认为这并不干净。

有什么好主意吗?

4

2 回答 2

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 风格的语法是否也是如此,但我希望它会如此。

希望有帮助!

于 2012-05-08T11:54:43.973 回答
0

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

于 2012-05-09T06:59:39.347 回答