我的布局中有一个侧边栏,正在显示在不同的页面上。
在这个区块中,我有一个产品列表,我想在产品页面上选择当前产品。
我正在使用:
$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"/>
答案 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);