当编写一组新的.phtml文件时&代码块:
什么是推荐方式以了解该块当前是否在产品页面上?
如果它在产品页面上,那么我该如何获取当前正在查看的产品的数据?在magento中获取产品或产品编号
感谢, 的Eyal
当编写一组新的.phtml文件时&代码块:
什么是推荐方式以了解该块当前是否在产品页面上?
如果它在产品页面上,那么我该如何获取当前正在查看的产品的数据?在magento中获取产品或产品编号
感谢, 的Eyal
第一个问题)如何知道您在产品视图页上。
你的问题并不清楚,因为你没有说这种功能的目的。我将你的问题解释为“我怎么能知道它嵌入到产品视图页面而不是其他页面?”。
最常见的方法是获取页面布局并搜索标准块以查看产品。因此,在你块,你可以做以下请求:
$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');
,你会得到该产品目前观察。
您可以查看当前请求的对象 - 它持有约模块,控制器,动作,而params这是目前正在使用的所有数据。之后,你可以用产品页面的人比较一下:的确模块,控制器和动作相同,做产品ID匹配
,但你应该知道第三方定制这可能与他们的人
取代标准的Magento产品视图控制器这会让你知道什么产品正在浏览。
Mage::registry('current_product')
如果有current_product
那么你可能一个产品页面上,虽然这并不能保证该页面正在由目录控制器处理。
所以你说你自己,这种方法不是一个好的... – epeleg 2011-01-10 11:31:42
我的意思是你应该从配置获得产品视图模块和控制器,而不仅仅使用默认的一个 – 2011-01-10 12:19:04
o.k.你能提供更多细节吗? 我认为我必须以某种方式在布局中查找产品视图块。因为任何人都可以添加一个新的动作,最终将产品视图添加到其中,不是吗? 我Q的第二部分呢? – epeleg 2011-01-10 12:24:42