2012-07-16 23 views
19

ich einen Sidebar-Block in meinem Layout habe, die auf verschiedenen Seiten angezeigt wird.Magento - erhalten aktuelles Produkt

In diesem Block habe ich eine Liste von Produkten, und ich möchte das aktuelle Produkt wählen, wenn ich auf einer Produktseite bin.

Ich verwende:

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

das aktuelle Produkt zu bekommen, aber das funktioniert nur für das erste Mal, dass ich auf die Produktseite bin Laden. Wenn ich ein anderes Produkt auswähle, gibt der obige Code denselben Wert zurück (das erste Produkt).

ich dies unter der Annahme geschieht, weil ich Magento Cache bin mit. Was kann ich tun, um den richtigen Wert zu erhalten?

Das gleiche passiert, wenn ich benutze:

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

Der Sidebar-Block ist eine Navigationsschablone ich hier hinzugefügt habe: .. \ app \ Design \ Frontend \ mytheme \ template \ catalog \ default \ navigation \ page_left.phtml.

Ich füge es in das Layout mit dieser XML:

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

Was ist die Klasse des Blocks? Aus welcher Magento-Blockklasse erbt er? – blmage

+0

Bitte beachten Sie die zusätzlichen Informationen, die ich habe zu meiner Frage hinzugefügt – Shani1351

Antwort

5

Wenn Sie nicht bereit sind, Ihre eigene Block Klasse von Mage_Catalog_Block_Navigation vererben zu verwenden, in dem Sie Ihre eigenen Cache-Informationen einstellen können (um es zB zu machen auf dem aktuellen Produkt abhängig), können Sie von der loszuwerden Cache für Ihren Block durch diese Definition in ihrem Layout mit:

<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

Sie können die aktuellen Produkt-ID und Produktdetails aus dem unten stehenden Code.

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

$ this-> getProduct() gibt nichts zurück, wenn ich in der Sidebar Vorlage – Shani1351

+0

bin und auch das Produkt Objekt bereits geladen ist, wenn $ this- Aufruf> getProduct(), so hat es keinen Sinn, das Produkt erneut zu laden. – Bery

+0

ist es nicht notwendig, das Produkt hier zu laden – drsndodiya

23

Wie aktuelle Produkt-ID

Versuchen unter Code erhalten zur Zeit Produkt-ID geladen werden:

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

Wenn Sie keinen Zugriff auf $ dieser, können Sie Magento Registrierung verwenden:

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

Das tatsächlich funktioniert. Es wurde oben abgestimmt, aber es hat für mich funktioniert. Ich verstehe, dass das Produkt tatsächlich lädt, wenn Sie getProduct() verwenden, jedoch erhielt ich nur teilweise Informationen über das Produkt. Die ID erhalten und das Produkt neu laden brachte alle Informationen zurück.

Es könnte auf eine Version von Magento spezifisch sein, es ist jedoch funktioniert, obwohl es dumm aussieht.

Verwandte Themen