Pregunta

Estoy experimentando un problema extraño: digamos que la categoría A tiene un diseño personalizado. Cuando abro el producto a través de domain.com/category-a/product.html El diseño personalizado se aplica correctamente.

Pero cuando abro el producto a través de la URL Canonical/Google Sitemap de Magento domain.com/product.html El diseño personalizado no se aplicará.

¿Cómo puedo evitar ese comportamiento? Supongo que se debe a que Magento no sabe qué diseño personalizado de categoría aplicar como producto puede tener más de una categoría.

La estructura de diseño es:

  • diseño personalizado
  • -> predeterminado
  • -> Category_Custom
¿Fue útil?

Solución

La página del producto se representa desde Mage_Catalog_Helper_Product_View::prepareAndRender(). Este método tiene en cuenta la categoría actual llamando Mage_Catalog_Helper_Product_View::initProduct() En este código:

$categoryId = $params->getCategoryId(); 
//...
if ($categoryId) {
    $category = Mage::getModel('catalog/category')->load($categoryId);
    $product->setCategory($category);
    Mage::register('current_category', $category);
} 

Entonces el flujo es algo como esto:

  1. Init el producto con sus opciones (incluida la ID de categoría)
  2. Renderizar el producto en función del resultado de Init.

Puede intentar agregar algo de lógica en la fase de inicio para especificar la categoría.
Al final si el initProduct Método, este evento se envía.

Mage::dispatchEvent('catalog_controller_product_init', array('product' => $product)); 

Puede crear un observador en esto y establecer la categoría de producto (algo similar al código anterior) y la parte de representación debe tener en cuenta su categoría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top