我有一个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>
我在product / view.phtml中显示块
<?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();
应该适用于目录/导航块。你能帮我指向正确的方向吗?我做错了什么?
谢谢。
答案 0 :(得分:1)
似乎我必须为ESI策略添加注册表才能访问getId()方法:
<registry_keys>
<current_product/>
</registry_keys>
此外,在我的情况下,似乎ESI政策没有在'目录/导航'上工作,不得不用'核心/模板'进行更改
希望这有助于任何人。
答案 1 :(得分:0)
您必须在自定义控制器和操作中使用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();
}