19

我的布局中有一个侧边栏块,它显示在不同的页面上。

在这个块中,我有一个产品列表,我想在产品页面上选择当前产品。

我在用着 :

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

获取当前产品,但这仅适用于我第一次加载产品页面。当我选择不同的产品时,上面的代码返回相同的值(第一个产品)。

我假设发生这种情况是因为我正在使用 Magento 缓存。我该怎么做才能获得正确的价值?

当我使用时也会发生同样的事情:

$currentCategory = Mage::registry('current_category');

侧边栏块是我在此处添加的导航模板:..\app\design\frontend\default\mytheme\template\catalog\navigation\page_left.phtml。

我用这个 XML 将它添加到布局中:

<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"/>
4

4 回答 4

23

如何获取当前产品ID

尝试以下代码以获取当前加载的产品 ID:

$product_id = $this->getProduct()->getId();

当您无权访问 $this 时,您可以使用 Magento 注册表:

$product_id = Mage::registry('current_product')->getId();
于 2012-08-20T10:41:51.850 回答
5

如果您不愿意使用自己的继承自 的块类Mage_Catalog_Block_Navigation,您可以在其中设置自己的缓存信息(例如,根据当前产品进行设置),您可以通过在它的布局定义:

<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml">
    <action method="unsetData"><key>cache_lifetime</key></action>
</block>
于 2012-07-17T14:53:39.930 回答
2
$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);

这确实有效。它在上面被否决了,但它对我有用。我了解该产品在您使用时确实会加载getProduct(),但是,我只获得了该产品的部分信息。获取 ID 并重新加载产品会带回所有信息。

它可能特定于 Magento 的某个版本,但它确实有效,尽管它看起来很愚蠢。

于 2016-08-30T06:44:42.607 回答
-3

您可以从以下代码中获取当前的产品 ID 和产品详细信息。

$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);
于 2012-07-16T14:47:43.413 回答