写一套新的.phtml&块:
什么是知道块目前是否在产品页面上的推荐方法?
如果它在产品页面上,那么如何获取当前正在查看的产品的数据?
谢谢, 的Eyal
答案 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
,那么您在产品页面上可能,但这并不能保证页面由目录控制器处理。