2012-07-16 11 views
19

Ho un blocco barra laterale nel mio layout che viene visualizzato su pagine diverse.Magento - get current product

In questo blocco ho un elenco di prodotti e desidero selezionare il prodotto corrente quando sono su una pagina prodotto.

sto usando:

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

per ottenere il prodotto corrente, ma questo funziona solo per la prima volta sto caricando la pagina del prodotto. Quando seleziono un prodotto diverso, il codice sopra riportato restituisce lo stesso valore (il primo prodotto).

Suppongo che ciò accada perché sto utilizzando la cache Magento. Cosa posso fare per ottenere il giusto valore?

La stessa cosa accade quando uso:

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

Il blocco barra laterale è un modello di navigazione ho aggiunto qui: .. \ app \ progettazione \ frontend \ default \ MyTheme \ template \ catalogo \ navigazione \ page_left.phtml.

sto aggiungendo che al layout con questo XML:

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

Qual è la classe del blocco? Da quale classe di blocchi Magento eredita? – blmage

+0

Vedere le informazioni aggiuntive che ho aggiunto alla mia domanda – Shani1351

risposta

5

Se non siete disposti a usare la propria classe che eredita da blocco Mage_Catalog_Block_Navigation, in cui è possibile impostare le proprie informazioni di cache (per renderlo ad esempio a seconda del prodotto in corso), è possibile liberarsi della cache per il tuo blocco utilizzando questo nella sua definizione di layout:

<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

È possibile ottenere gli attuali ID del prodotto e dettagli del prodotto dal codice qui sotto.

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

$ this-> getProduct() non restituisce nulla quando sono nel modello barra laterale – Shani1351

+0

E anche l'oggetto prodotto è già caricato quando chiama $ this-> getProduct(), quindi non ha senso chiamare di nuovo il caricamento del prodotto. – Bery

+0

non è necessario caricare il prodotto qui – drsndodiya

23

Come arrivare corrente ID prodotto

Prova sotto codice per ottenere attualmente caricato prodotto ID:

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

Quando non si ha accesso a $ questo, è possibile utilizzare Registro di Magento:

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

Questo in realtà funziona. È stato rifiutato, ma per me ha funzionato. Comprendo che il prodotto viene effettivamente caricato quando si utilizza getProduct(), tuttavia, ricevevo solo informazioni parziali sul prodotto. Ottenere l'ID e ricaricare il prodotto ha riportato tutte le informazioni.

Potrebbe essere specifico per una versione di Magento, tuttavia funziona anche se sembra stupido.