2012-07-16 142 views
19

我的佈局中有一個側欄模塊正在不同的頁面上顯示。Magento - 獲取當前產品

在此塊中,我有一個產品列表,並且我想在產品頁面上選擇當前產品。

我使用:

$current_product = Mage::registry('current_product'); 

獲得當前的產品,但這僅適用於第一次我加載的產品頁面。當我選擇不同的產品時,上面的代碼會返回相同的值(第一個產品)。

我假設這是因爲我使用Magento緩存。我能做些什麼來獲得正確的價值?

同樣的事情發生時,我使用:

$currentCategory = Mage::registry('current_category'); 

側邊欄塊是導航模板我在這裏補充說: .. \程序\設計\前臺\ DEFAULT \ mytheme的\模板\目錄\導航\ page_left.phtml。

我將它添加到這個XML佈局:

<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"/> 
+0

你的街區是什麼類?它從哪個Magento塊類繼承? – blmage 2012-07-16 17:58:19

+0

請參閱我添加到我的問題的其他信息 – Shani1351 2012-07-17 07:42:55

回答

5

如果你不願意用自己的塊類從Mage_Catalog_Block_Navigation繼承,在其中您可以設置自己的緩存信息(它例如取決於當前的產品讓),你可以擺脫緩存爲您塊在其佈局定義使用這樣的:

<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"> 
    <action method="unsetData"><key>cache_lifetime</key></action> 
</block> 
-3

你可以從下面的代碼當前產品ID和產品的詳細信息。

$_proId = $this->getProduct()->getId(); 
$_product= Mage::getModel('catalog/product')->load($_proId); 
+0

$ this-> getProduct()在我處於邊欄模板中時不會返回任何內容 – Shani1351 2012-07-16 14:56:59

+0

而且調用$ this-> getProduct時產品對象已經加載(),所以再次調用產品加載沒有任何意義。 – Bery 2013-03-07 13:22:36

+0

它沒有必要在這裏加載產品 – drsndodiya 2015-07-03 05:26:25

23

如何獲得當前的產品ID

嘗試下面的代碼來獲取當前負載的產品ID:

$product_id = $this->getProduct()->getId(); 

當你沒有獲得$這一點,你可以使用Magento的註冊表:

$product_id = Mage::registry('current_product')->getId(); 
2
$_proId = $this->getProduct()->getId(); 
$_product= Mage::getModel('catalog/product')->load($_proId); 

這實際上做的工作。它已被放棄在上面投票,但它對我有用。我瞭解,當您使用getProduct()時,產品確實會加載,但是,我只是獲取產品的部分信息。獲取ID並重新加載產品帶回了所有信息。

它可能是特定於Magento的一個版本,但它確實工作,雖然它看起來很愚蠢。