Определите, есть ли на странице продукта программно в Magento

Я хочу вставить коды отслеживания на всех страницах сайта Magento и использовать другой синтаксис, если страница является страницей CMS, страницей просмотра категорий или страницей просмотра продукта. У меня есть настраиваемый модуль, настроенный с блоком, который в настоящее время добавляет общий код отслеживания на каждую страницу. Изнутри блока, как я могу различать страницы CMS, страницы категорий и страницы продукта?

Я начал с:

Mage::app()->getRequest(); 

Я это вижу

 Mage::app()->getRequest()->getParam('id'); 

возвращает идентификатор продукта или категории на страницах продукта и категории, но не различает эти типы страниц.

 Mage::app()->getRequest()->getRouteName(); 

вернуть «cms» для страниц CMS, но возвращает «каталог» для страниц просмотра категорий и просмотра продукта, поэтому я не могу использовать это, чтобы разделить категории и страницы продукта.

Есть ли какой-нибудь индикатор в запросе, который я могу использовать безопасно? Или есть лучший способ достичь моей цели разных кодов отслеживания для разных типов страниц?

Возможно, еще лучший способ сделать это с помощью маршрутизаторов, но один быстрый способ – проверить реестр, чтобы узнать, есть ли у нас один продукт, на который мы смотрим:

 <?php $onCatalog = false; if(Mage::registry('current_product')) { $onCatalog = true; } 

Надеюсь, это поможет!

Спасибо, Джо

Самый легкий ответ заключается в следующем:

 <?php echo $this->getRequest()->getControllerName(); if($this->getRequest()->getControllerName()=='product') //do something if($this->getRequest()->getControllerName()=='category') //do others ?> 

это 100% правильный способ сделать в соответствии с моделью MVC, пожалуйста, ознакомьтесь с основным кодом, действительно понимающим его, и не давайте метод с загрузкой или зависит от метода реестра. Поддержите mytraining.net, хотя меня там нет.

Я думал, что стоит отметить, что есть недостаток в проверке

 Mage::registry('current_product') 

Это действительно проверяет, существует ли продукт, но, например, на странице обзора продукт также установлен, поэтому вам может потребоваться более конкретное определение местоположения страницы.

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

 if($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='product'){ Mage::registry('current_product'); } 

Надеюсь, это поможет.

У вас может быть параметр для блока, который будет использоваться для указания того, какой тип кода отслеживания необходим. Затем вы просто используете XML-макет для решения проблемы. Вы можете использовать следующие макеты компоновки, чтобы обновить ваш блок с помощью соответствующего параметра: CMS Pages = 'cms_page' Просмотр категорий = 'catalog_category_view' Просмотр продукта = 'catalog_product_view'

Что-то вроде этого:

 <layout> <default> <reference name="before_body_end"> <block type="mymodule/myblock" name="myblock" /> </reference> </default> <cms_page> <reference name="myblock"> <action method="setTrackingType"> <type>cms</type> </action> </reference> </cms_page> <catalog_category_view> <reference name="myblock"> <action method="setTrackingType"> <type>category</type> </action> </reference> </catalog_category_view> <catalog_product_view> <reference name="myblock"> <action method="setTrackingType"> <type>product</type> </action> </reference> </catalog_product_view> </layout> по <layout> <default> <reference name="before_body_end"> <block type="mymodule/myblock" name="myblock" /> </reference> </default> <cms_page> <reference name="myblock"> <action method="setTrackingType"> <type>cms</type> </action> </reference> </cms_page> <catalog_category_view> <reference name="myblock"> <action method="setTrackingType"> <type>category</type> </action> </reference> </catalog_category_view> <catalog_product_view> <reference name="myblock"> <action method="setTrackingType"> <type>product</type> </action> </reference> </catalog_product_view> </layout> по <layout> <default> <reference name="before_body_end"> <block type="mymodule/myblock" name="myblock" /> </reference> </default> <cms_page> <reference name="myblock"> <action method="setTrackingType"> <type>cms</type> </action> </reference> </cms_page> <catalog_category_view> <reference name="myblock"> <action method="setTrackingType"> <type>category</type> </action> </reference> </catalog_category_view> <catalog_product_view> <reference name="myblock"> <action method="setTrackingType"> <type>product</type> </action> </reference> </catalog_product_view> </layout>