【问题标题】:Magento get current productMagento 获取当前产品
【发布时间】:2014-02-01 01:26:06
【问题描述】:

我有一个 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 中显示块 &lt;?php echo $this-&gt;getChildHtml('product.info.frz'); ?&gt; 一切正常,块没有被缓存。但是,当我尝试获取当前产品 id 时,我得到了PHP message: PHP Fatal error: Call to a member function getId() on a non-object

据我所知,Mage::registry('current_product')-&gt;getId(); 应该适用于目录/导航块。你能指点我正确的方向吗?我做错了什么?

谢谢。

【问题讨论】:

  • 将块类型="catalog/navigation" 更改为 "catalog/product_view"

标签: php magento


【解决方案1】:

您必须在您的自定义控制器和操作中 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();
 }

【讨论】:

  • 我更新了布局结构,不幸的是我不知道应该如何创建我的自定义控制器。
【解决方案2】:

看来我必须为 ESI 策略添加注册表才能访问 getId() 方法:

                    <registry_keys>
                        <current_product/>
                    </registry_keys>

另外,在我的情况下,ESI 政策似乎不适用于 'catalog/navigation' ,必须使用 'core/template' 进行更改

希望这对任何人都有帮助。

【讨论】:

  • 这是正确答案。谢谢你。所有这些都归于&lt;param&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多