Подтвердить что ты не робот

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"/>
4b9b3361

Ответ 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);