2014-01-13 185 views
1

我有一個magento 1.7.0.2,具有清漆緩存。我正在嘗試創建未緩存的區塊,並在產品視圖頁上獲取當前產品ID,但是Mage::registry('current_product')->getId();$this->getProduct()->getId();似乎都不起作用。我的自定義塊看起來像這樣,在catalog.xml中:Magento獲得當前產品

 <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'); ?> 一切都顯示在產品/ view.phtml塊工作正常,塊犯規得到緩存。但是,當我試圖獲得當前的產品ID時,我得到了PHP message: PHP Fatal error: Call to a member function getId() on a non-object

據我所知,Mage::registry('current_product')->getId();應該在目錄/導航塊上工作。你能否讓我朝正確的方向發展?我究竟做錯了什麼 ?

謝謝。

+0

將塊類型=「目錄/導航」更改爲「目錄/產品視圖」 –

+0

這是行不通的。 – Iulian

回答

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(); 
} 
+0

請在您添加塊的位置顯示整個佈局結構。 –

+0

我更新了我的佈局結構,不幸的是我不知道應該如何創建自定義控制器。 – Iulian

1

看來我不得不添加註冊表中的ESI政策,以訪問getId()方法:

    <registry_keys> 
         <current_product/> 
        </registry_keys> 

而且,它似乎在我的情況下,ESI政策是不致力於'目錄/導航',必須改變它'核心/模板'

希望這可以幫助任何人。

+0

這是正確的答案。謝謝。所有這些都在''下 –