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');
И вы получитеТовар в настоящее время просматривается.