Magento – получить текущий продукт

У меня есть блок боковой панели в моем макете, который отображается на разных страницах.

В этом блоке у меня есть список продуктов, и я хочу выбрать текущий продукт, когда я на странице продукта.

Я использую :

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

Если вы не хотите использовать свой собственный класс блоков, наследующий от 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> 

Как получить текущий идентификатор продукта

Попробуйте ввести код, чтобы загрузить загруженный идентификатор продукта:

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

Если у вас нет доступа к $ this, вы можете использовать реестр Magento:

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

Это действительно работает. Он был проголосован выше, однако это сработало для меня. Я понимаю, что продукт действительно загружается, когда вы используете getProduct() , однако я получаю только частичную информацию о продукте. Получение идентификатора и перезагрузка продукта привезли всю информацию.

Это может быть характерно для версии Magento, однако она работает, хотя выглядит глупо.

Вы можете получить текущий идентификатор продукта и информацию о продукте из приведенного ниже кода.

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