[英]Magento get current product
我有一个magento 1.7.0.2,带有清漆缓存。 我正在尝试创建一个未缓存的块并在产品视图页面上获取当前产品ID,但是Mage::registry('current_product')->getId();
,也不是$this->getProduct()->getId();
似乎正在工作。 我的自定义块在catalog.xml中如下所示:
<catalog_product_view translate="label">
...
<reference name="content">
...
<block type="catalog/product_view" name="product.info.frz" template="catalog/product/view/frz.phtml">
<action method="setEsiOptions">
<params>
<method>ajax</method>
<access>private</access>
</params>
</action>
</block>
...
</reference>
...
</catalog_product_view>
而且我正在用<?php echo $this->getChildHtml('product.info.frz'); ?>
在product / view.phtml中显示该块<?php echo $this->getChildHtml('product.info.frz'); ?>
<?php echo $this->getChildHtml('product.info.frz'); ?>
一切工作正常,该块不会被缓存。 但是,当我尝试获取当前产品ID时,我得到PHP message: PHP Fatal error: Call to a member function getId() on a non-object
。
据我所知, Mage::registry('current_product')->getId();
应该适用于目录/导航块。 您能按正确的方向给我打电话吗? 我究竟做错了什么 ?
谢谢。
似乎我必须为ESI策略添加注册表才能访问getId()方法:
<registry_keys>
<current_product/>
</registry_keys>
另外,就我而言,ESI政策似乎并未在“目录/导航”上奏效,因此必须使用“核心/模板”对其进行更改
希望这对任何人有帮助。
您必须在自定义的contoller和action中的renderLayour()中,将当前产品添加到注册表;
public function viewAction()
{
$this->loadLayout();
$id = $this->getRequest()->getParam('id');
$current_product=Mage::getModel('catalog/product')->load($id);
//Some code here
Mage::register('current_product',$current_product);
$this->renderLayout();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.