2012-07-16 20 views
19

Tengo un bloque de barra lateral en mi diseño que se muestra en diferentes páginas.Magento - obtener el producto actual

En este bloque tengo una lista de productos, y quiero seleccionar el producto actual cuando estoy en una página de producto.

que estoy usando:

$current_product = Mage::registry('current_product'); 

para obtener el producto actual, pero esto sólo funciona por primera vez estoy cargando la página del producto. Cuando selecciono un producto diferente, el código anterior arroja el mismo valor (el primer producto).

Supongo que esto sucede porque estoy usando la memoria caché de Magento. ¿Qué puedo hacer para obtener el valor correcto?

Lo mismo sucede cuando uso:

$currentCategory = Mage::registry('current_category'); 

El bloque de la barra lateral de navegación es una plantilla que he añadido aquí: .. \ app \ diseño \ frontend \ default \ mytheme \ template \ Catálogo \ navegación \ page_left.phtml.

estoy añadiendo a la disposición con este XML:

<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"/> 
+0

¿Cuál es la clase de su bloque? ¿De qué clase de bloque Magento hereda? – blmage

+0

Consulte la información adicional que he agregado a mi pregunta – Shani1351

Respuesta

5

Si no está dispuesto a usar su propia clase que hereda de bloque Mage_Catalog_Block_Navigation, en la que se podía establecer sus propias informaciones de caché (para que sea por ejemplo en función del producto actual), usted puede deshacerse de la caché para su bloque a través de este diseño en su definición:

<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"> 
    <action method="unsetData"><key>cache_lifetime</key></action> 
</block> 
-3

Puede obtener el identificador de producto y detalles del producto actuales desde el código de abajo.

$_proId = $this->getProduct()->getId(); 
$_product= Mage::getModel('catalog/product')->load($_proId); 
+0

$ this-> getProduct() no devuelve nada cuando estoy en la plantilla de la barra lateral – Shani1351

+0

Y también el objeto del producto ya está cargado al llamar a $ this-> getProduct(), por lo que no tiene sentido llamar de nuevo a la carga del producto. – Bery

+0

no es necesario cargar el producto aquí – drsndodiya

23

Cómo llegar Identificación del producto actual

Trate a continuación código para obtener cargado en ese momento Identificación del producto:

$product_id = $this->getProduct()->getId(); 

Cuando usted no tiene acceso a este $, puede utilizar registro de Magento:

$product_id = Mage::registry('current_product')->getId(); 
2
$_proId = $this->getProduct()->getId(); 
$_product= Mage::getModel('catalog/product')->load($_proId); 

Este trabajo realmente hace. Ha sido votado anteriormente, sin embargo, funcionó para mí. Entiendo que el producto sí se carga cuando usa getProduct(), sin embargo, solo recibí información parcial del producto. Obtener la identificación y volver a cargar el producto devolvió toda la información.

Puede ser específico de una versión de Magento, pero funciona aunque parezca estúpido.

Cuestiones relacionadas