Magento - 获取当前产品

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"/>

你的块属于哪个类?它继承自哪个Magento块类? - blmage
请查看我在问题中添加的附加信息。 - Shani1351
4个回答

24

如何获取当前产品ID

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

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

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

$product_id = Mage::registry('current_product')->getId();

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>

2
$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);

这个方法实际上是有效的。虽然它已被下投票,但是对我来说它确实起作用了。我知道当你使用getProduct()时,产品确实会加载,但是我只得到了部分产品信息。通过获取ID并重新加载产品,可以恢复所有信息。

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


-3
你可以从下面的代码中获取当前产品ID和产品详细信息。
$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);

当我在侧边栏模板中时,$this->getProduct() 不返回任何内容。 - Shani1351
而且当调用 $this->getProduct() 时,产品对象已经被加载,因此再次调用产品加载是没有意义的。 - Bery
不需要在这里加载产品 - drsndodiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接