У меня есть блок боковой панели в моем макете, который отображается на разных страницах.
В этом блоке у меня есть список продуктов, и я хочу выбрать текущий продукт, когда я на странице продукта.
Я использую :
$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);