正在magento中获取产品或产品ID

正在magento中获取产品或产品ID,magento,Magento,写入一组新的.phtml&block时: 建议用什么方法来知道该块当前是否在产品页面上? 如果它位于产品页面上,那么如何获取当前正在查看的产品的数据 谢谢, Eyal您可以检查当前请求对象-它保存有关当前正在使用的模块、控制器、操作和参数的所有数据。之后,您可以将其与产品页面进行比较:模块、控制器和操作是否相同,产品id是否匹配 但是您应该知道,第三方定制可能会将标准的Magento产品视图控制器替换为他们的产品视图控制器您可以检查当前的请求对象-它保存有关当前正在使用的模块、控制器、操作和参数

写入一组新的.phtml&block时:
建议用什么方法来知道该块当前是否在产品页面上?
如果它位于产品页面上,那么如何获取当前正在查看的产品的数据

谢谢,
Eyal

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


但是您应该知道,第三方定制可能会将标准的Magento产品视图控制器替换为他们的产品视图控制器

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


但是您应该知道第三方定制可能会用他们的产品视图控制器取代标准的Magento产品视图控制器

这将让您知道正在查看的产品

Mage::registry('current_product')

如果有
当前\u产品
,则您可能在产品页面上,尽管这并不保证该页面由目录控制器处理

这将让您知道正在查看的产品

Mage::registry('current_product')
如果有
当前\u产品
,则您可能在产品页面上,尽管这并不保证该页面由目录控制器处理

第一个问题)如何知道您在产品视图页面上

您的问题不清楚,因为您没有说明此类功能的用途。我将您的问题解释为“我的区块如何知道它嵌入了产品视图页面而不是其他页面?”

最常见的方法是获取页面布局,并在其中搜索用于查看产品的标准块。因此,在您的区块中,您可以提出以下请求:

$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
}
然而,这是一种更具体的方法,它只在查看产品页面时返回肯定的结果,而不在使用产品视图块查看具有类似设计的页面时返回肯定的结果。例如,ProductReview页面将向您显示相同的产品页面,但有一些细微的差异,但它使用自己的(而不是“catalog\u Product\u view”)句柄。既然你没有提到你的目的,我不能建议你选择第一种或第二种方法

注意:您的架构可能是错误的,因为通常
a) 您的块也不需要知道它嵌入的位置,因此它不需要检查当前查看的页面
b) 或者,您的块仅用于产品视图页面。但在本例中,只将块放在所需的页面和块中是一项布局xml任务。

第二个问题)如何在产品视图页面上获取当前产品

使用以下代码:

  $product = Mage::registry('current_product');
您将获得当前查看的产品。

第一个问题)如何知道您在产品查看页面上

您的问题不清楚,因为您没有说明此类功能的用途。我将您的问题解释为“我的区块如何知道它嵌入了产品视图页面而不是其他页面?”

最常见的方法是获取页面布局,并在其中搜索用于查看产品的标准块。因此,在您的区块中,您可以提出以下请求:

$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
}
然而,这是一种更具体的方法,它只在查看产品页面时返回肯定的结果,而不在使用产品视图块查看具有类似设计的页面时返回肯定的结果。例如,ProductReview页面将向您显示相同的产品页面,但有一些细微的差异,但它使用自己的(而不是“catalog\u Product\u view”)句柄。既然你没有提到你的目的,我不能建议你选择第一种或第二种方法

注意:您的架构可能是错误的,因为通常
a) 您的块也不需要知道它嵌入的位置,因此它不需要检查当前查看的页面
b) 或者,您的块仅用于产品视图页面。但在本例中,只将块放在所需的页面和块中是一项布局xml任务。

第二个问题)如何在产品视图页面上获取当前产品

使用以下代码:

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

您将获得当前查看的产品。

我的意思是您应该从配置中获取产品视图模块和控制器,而不仅仅是使用默认的oneo.k。你能提供更多细节吗?我想我必须在布局中查找产品视图块。因为任何人都可以添加一个新的操作,最终在其中会有一个产品视图,不是吗?还有我的问题的第二部分呢?那么,首先你应该决定哪个页面被认为是产品视图页面。产品#1的默认值为catalog/product/view/id/1。您可以放置Mage::app()->getRequest()-并检查模块和控制器。问题的第二部分-您可以通过prom请求获取产品id,参数id。查看Mage_Catalog_Block_product_View::getProduct(),我的意思是您应该从配置中获取产品视图模块和控制器,而不仅仅是使用默认的oneo.k。你能提供更多细节吗?我想我必须在布局中查找产品视图块。因为任何人都可以添加一个新的操作,最终在其中会有一个产品视图,不是吗?还有我的问题的第二部分呢?那么,首先你应该决定哪个页面被认为是产品视图页面。产品#1的默认值为catalog/product/view/id/1。您可以放置Mage::app()->getRequest()-并检查模块和控制器。问题的第二部分-您可以通过prom请求获取产品id,参数id。查看Mage_Catalog_Block_product_View::getProduct()作为新的magento,我不确定我是否完全理解句柄的概念,但第一个选项听起来像