Magento - получить текущий продукт
У меня есть блок боковой панели в моем макете, который отображается на разных страницах.
В этом блоке у меня есть список продуктов, и я хочу выбрать текущий продукт, когда я нахожусь на странице продукта.
Я использую:
$current_product = Mage::registry('current_product');
чтобы получить текущий продукт, но это работает только в первый раз, когда я загружаю страницу продукта. Когда я выбираю другой продукт, код выше возвращает одно и то же значение (первый продукт).
Я предполагаю, что это происходит, потому что я использую кэш Magento. Что я могу сделать, чтобы получить правильное значение?
То же самое происходит, когда я использую:
$currentCategory = Mage::registry('current_category');
Блок боковой панели - это шаблон навигации, который я добавил здесь:
..\приложение\дизайн\внешний интерфейс\умолчанию\MyTheme\шаблон\каталог\навигации\page_left.phtml.
Я добавляю его в макет с этим XML:
<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"/>
Ответы
Ответ 1
Если вы не хотите использовать собственный класс блоков, наследующий от 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
Как получить текущий идентификатор продукта
Попробуйте ввести код для загрузки загруженного идентификатора продукта:
$product_id = $this->getProduct()->getId();
Если у вас нет доступа к $this, вы можете использовать реестр Magento:
$product_id = Mage::registry('current_product')->getId();
Ответ 3
$_proId = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);
Это действительно работает. Он был проголосован выше, однако это сработало для меня. Я понимаю, что продукт действительно загружается, когда вы используете getProduct()
, однако я получаю только частичную информацию о продукте. Получение идентификатора и перезагрузка продукта привезли всю информацию.
Это может быть характерно для версии Magento, однако она работает, хотя выглядит глупо.
Ответ 4
Вы можете получить текущий идентификатор продукта и информацию о продукте из приведенного ниже кода.
$_proId = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);