Определить, если на странице продукта программно в Magento - PullRequest
15 голосов
/ 15 июня 2010

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

Я начал с:

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

Я вижу, что

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

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

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

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

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

Ответы [ 4 ]

32 голосов
/ 18 января 2011

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

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

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

25 голосов
/ 15 июня 2010

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

<?php

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

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

Спасибо, Джо

16 голосов
/ 22 августа 2012

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

Mage::registry('current_product')

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

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

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

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

4 голосов
/ 31 августа 2011

В блоке может использоваться параметр, указывающий, какой тип кода отслеживания необходим. Тогда вы просто используете макет 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...