2010-06-14 22 views
15

Quiero insertar códigos de seguimiento en todas las páginas de un sitio Magento, y necesito usar una sintaxis diferente si la página es una página CMS, una página de búsqueda de categoría o un producto ver pagina. Tengo un módulo personalizado configurado con un bloque que inserta un código de seguimiento genérico en cada página por ahora. Desde dentro del bloque, ¿cómo puedo distinguir entre páginas de CMS, páginas de categorías y páginas de productos?Determine si en la página del producto programáticamente en Magento

Empecé con:

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

puedo ver que

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

devuelve el identificador de producto o categoría de productos y en las páginas de categoría, pero no distingue entre los tipos de página.

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

retorno "CMS" para las páginas de CMS, pero vuelve "catálogo" de las dos páginas de navegación por categorías y ver su producto, por lo que no puede usar eso para decirle a la categoría de productos y páginas aparte.

¿Hay algún indicador en la solicitud que pueda usarse de forma segura? ¿O hay una mejor manera de lograr mi objetivo de diferentes códigos de seguimiento para diferentes tipos de página?

Respuesta

25

Puede haber una mejor manera de hacer esto utilizando routers, pero de una manera rápida es comprobar el registro para ver si tenemos un solo producto que estamos buscando en:

<?php 

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

Espero que ayude !

Gracias, Joe

+0

Es posible que tenga esa clave de registro en páginas personalizadas o en funciones personalizadas. Es por eso que no recomiendo determinarlo con la clave de registro. La forma con el nombre del controlador es mejor. –

+0

controlador junto con la forma de registro es el mejor. si está utilizando el controlador, y este bloque está presente en su head.phtml, puede tener problemas en las páginas de etiquetas (este problema acaba de resolverse): las páginas de etiquetas utilizan el controlador del producto, pero no pueden extraer datos del producto. Entonces uso ambas condiciones. –

30

La respuesta easest es la siguiente:

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

esto es 100% la forma correcta de hacerlo de acuerdo con el modelo MVC, por favor mirar en el código del núcleo de verdad lo entienden , y no proporcione el método con la carga o depende del método de registro. Apoye mytraining.net aunque no esté allí.

+1

En algunos contextos, getRequest o getControllerName pueden no estar disponibles. Puede llamar a la función subyacente directamente. 'Mage :: app() -> getFrontController() -> getRequest() -> getControllerName()' – Goose

4

Puede tener un parámetro para el bloque que se utiliza para indicar qué tipo de código de seguimiento se necesita. Luego solo usa el diseño XML para resolver el problema. Puede utilizar la siguiente distribución se encarga de tener su bloque actualizado con el parámetro adecuado: Páginas CMS = 'cms_page' Categoría de navegación = 'catalog_category_view' visualización Producto = 'catalog_product_view'

Algo como esto:

<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> 
+0

¿Cómo puedo usarlos por favor? –

16

pensé que valdría la pena mencionar que hay un defecto de comprobar

Mage::registry('current_product') 

Esto en efecto comprobar si existe un producto, pero cuando en una página de revisión f o ejemplo, el producto también está configurado, por lo tanto, es posible que deba ser más específico para determinar la ubicación de la página.

La siguiente comprobación asegura que estamos en una página de producto, marcando que está utilizando el módulo "catálogo", y el controlador es una solicitud de "producto". Al ver una lista de productos de revisiones, sus valores serían "revisión" (módulo) y "lista" (controlador).

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

Espero que esto ayude.

+0

Usted no está equivocado, señor. –

Cuestiones relacionadas