2011-01-10 82 views
1

當編寫一組新的.phtml文件時&代碼塊:
什麼是推薦方式以瞭解該塊當前是否在產品頁面上?
如果它在產品頁面上,那麼我該如何獲取當前正在查看的產品的數據?在magento中獲取產品或產品編號

感謝, 的Eyal

回答

6

第一個問題)如何知道您在產品視圖頁上。

你的問題並不清楚,因爲你沒有說這種功能的目的。我將你的問題解釋爲「我怎麼能知道它嵌入到產品視圖頁面而不是其他頁面?」。

最常見的方法是獲取頁面佈局並搜索標準塊以查看產品。因此,在你塊,你可以做以下請求:

$block = $this->getLayout() 
    ->getBlock('product.info'); 

if ($block) { 
    // Block exists - you're viewing product page 
} 


另一種方法是檢查佈局手柄用來形成當前頁面佈局:

$handles = $this->->getLayout() 
    ->getUpdate() 
    ->getHandles(); 
if (in_array('catalog_product_view', $handles)) { 
    // Handle exists - you're viewing product page 
} 

但是它更具體的方法,它僅在查看產品頁面時返回肯定結果,而不是使用產品視圖塊返回具有類似設計的頁面。因此,示例產品評論頁面將向您顯示具有細微差異的相同產品頁面,但它使用它自己的(不是'catalog_product_view')句柄。就你說的目的而言,我不建議你選擇第一種或第二種方法。

注意:你的架構可以是錯誤的,因爲通常
A)您無論是塊並不需要知道它的嵌入,所以它並不需要不檢查當前瀏覽的頁面
b)或你的塊僅用於產品查看頁面。但在這種情況下,它是一個佈局xml任務,只能將您的塊放入所需的頁面和塊中。

第二個問題)如何獲得產品視圖頁面上當前的產品。

使用下面的代碼:

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

,你會得到該產品目前觀察。

1

您可以查看當前請求的對象 - 它持有約模塊,控制器,動作,而params這是目前正在使用的所有數據。之後,你可以用產品頁面的人比較一下:的確模塊,控制器和動作相同,做產品ID匹配

,但你應該知道第三方定製這可能與他們的人

取代標準的Magento產品視圖控制器
+0

所以你說你自己,這種方法不是一個好的... – epeleg 2011-01-10 11:31:42

+0

我的意思是你應該從配置獲得產品視圖模塊和控制器,而不僅僅使用默認的一個 – 2011-01-10 12:19:04

+0

o.k.你能提供更多細節嗎? 我認爲我必須以某種方式在佈局中查找產品視圖塊。因爲任何人都可以添加一個新的動作,最終將產品視圖添加到其中,不是嗎? 我Q的第二部分呢? – epeleg 2011-01-10 12:24:42

0

這會讓你知道什麼產品正在瀏覽。

Mage::registry('current_product') 

如果有current_product那麼你可能一個產品頁面上,雖然這並不能保證該頁面正在由目錄控制器處理。