以magento获取Product或ProductID

时间:2011-01-10 10:52:50

标签: magento

写一套新的.phtml&块:
什么是知道块目前是否在产品页面上的推荐方法?
如果它在产品页面上,那么如何获取当前正在查看的产品的数据?

谢谢, 的Eyal

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以检查当前请求对象 - 它包含当前正在使用的有关模块,控制器,操作和参数的所有数据。之后,您可以将其与产品页面进行比较:模块,控制器和操作是否相同,产品ID是否匹配

但是你应该知道第三方自定义可以替换标准的Magento产品视图控制器

答案 2 :(得分:0)

这会让您知道正在浏览的产品。

Mage::registry('current_product')

如果有current_product,那么您在产品页面上可能,但这并不能保证页面由目录控制器处理。