2011-01-10 129 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那么你可能一个产品页面上,虽然这并不能保证该页面正在由目录控制器处理。