Получение Product или ProductID в magento - PullRequest
1 голос
/ 10 января 2011

при написании нового набора .phtml & block:
Каков рекомендуемый способ узнать, находится ли блок в данный момент на странице продукта?
Если он находится на странице продукта, то как мне получить данные о просматриваемом в данный момент продукте?

Спасибо, Эяль

Ответы [ 3 ]

6 голосов
/ 10 января 2011

1-й вопрос) Как узнать, что вы находитесь на странице просмотра продукта.

Ваша проблема не ясна, потому что вы не называете цель такой функциональности.Я интерпретирую ваш вопрос как «Как мой блок знает, что он встроен в страницу просмотра продукта, а не на какую-то другую страницу?».

Самый распространенный способ - это получить макет страницы и выполнить поиск по стандартному блоку, предназначенному дляпосмотреть товар.Таким образом, в вашем блоке вы можете сделать следующий запрос:

$block = $this->getLayout()
    ->getBlock('product.info');

if ($block) {
    // Block exists - you're viewing product page
}


Другой метод заключается в проверке маркеров макета, используемых для формирования текущего макета страницы:

$handles = $this->->getLayout()
    ->getUpdate()
    ->getHandles();
if (in_array('catalog_product_view', $handles)) {
    // Handle exists - you're viewing product page
}

Однако это более конкретный метод, он дает положительный результат только при просмотре страницы продукта, а не страниц с аналогичным дизайном, использующих блоки просмотра продукта.Например, страница обзора продукта покажет вам ту же страницу продукта с небольшими отличиями, но для нее будет использован собственный (не «catalog_product_view») дескриптор.Поскольку вы ничего не сказали о своей цели, я не могу рекомендовать вам выбрать первый или второй метод.

Обратите внимание: ваша архитектура может быть неправильной, потому что обычно
a) ваш блок либо не должен знатьгде он встроен, так что нет необходимости проверять текущую страницу
b) или ваш блок используется только для просмотра страницы продукта.Но в этом случае это задача макета XML, чтобы поместить ваш блок только в нужные страницы и блоки.

2-й вопрос) Как получить текущий товар на странице просмотра товара.

Используйте следующий код:

  $product = Mage::registry('current_product');

И вы получитеТовар в настоящее время просматривается.

1 голос
/ 10 января 2011

Вы можете проверить текущий объект запроса - он содержит все данные о модуле, контроллере, действии и параметрах, которые используются в данный момент.После этого вы можете сравнить его со страницами продукта: совпадают ли модуль, контроллер и действие и совпадает ли идентификатор продукта

Но вы должны знать о сторонних настройках, которые могут заменить стандартные контроллеры представления продуктов Magento ихте

0 голосов
/ 10 января 2011

Это позволит вам узнать, какой продукт просматривается.

Mage::registry('current_product')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...