Magento - 获取当前产品

时间:2012-07-16 14:30:59

标签: php magento caching

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

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

我正在使用:

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

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

我假设发生了这种情况,因为我正在使用Magento缓存。我能做些什么来获得正确的价值?

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

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

侧边栏块是我在这里添加的导航模板: .. \程序\设计\前台\ DEFAULT \ mytheme的\模板\目录\导航\ page_left.phtml。

我正在使用此XML将其添加到布局中:

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

4 个答案:

答案 0 :(得分:23)

如何获取当前产品ID

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

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

如果您无法访问$ this,则可以使用Magento注册表:

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

答案 1 :(得分: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 :(得分:2)

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

这确实有效。它一直在上面投票,但它对我有用。我知道当您使用getProduct()时,产品确实会加载,但是,我只获得了产品的部分信息。获取ID并重新加载产品会带回所有信息。

它可能是特定于Magento的一个版本,但它确实有效,虽然它看起来很愚蠢。

答案 3 :(得分:-3)

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

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