2012-07-16 25 views
19

Mam blok boczny w moim układzie, który jest wyświetlany na różnych stronach.Magento - pobierz aktualny produkt

W tym bloku mam listę produktów i chcę wybrać aktualny produkt, gdy jestem na stronie produktu.

Używam:

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

aby uzyskać aktualny produkt, ale to działa tylko po raz pierwszy mam ładowania strony produktowej. Po wybraniu innego produktu powyższy kod zwraca tę samą wartość (pierwszy produkt).

Zakładam, że tak się dzieje, ponieważ używam pamięci podręcznej Magento. Co mogę zrobić, aby uzyskać odpowiednią wartość?

To samo dzieje się, gdy używam:

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

Blok sidebar jest szablon nawigacyjny Dodałem tutaj: .. \ Katalog aplikacji \ projekt \ frontend \ default \ Mytheme \ template \ \ navigation \ page_left.phtml.

Dodaję go do układu z tego XML:

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

Jaka jest klasa twojego bloku? Z którego klasy bloków Magento dziedziczy? – blmage

+0

Proszę zobaczyć dodatkowe informacje, które dodałem do mojego pytania – Shani1351

Odpowiedz

5

Jeśli nie jesteś gotów użyć własnej klasy bloku dziedziczenie z Mage_Catalog_Block_Navigation, w którym można ustawić własne informacje cache (aby na przykład w zależności od aktualnego produktu), można pozbyć się cache dla bloku stosując ten w swej definicji układ:

<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

można uzyskać bieżący identyfikator produktu i produktów szczegóły z poniższym kodzie.

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

$ this-> getProduct() nie zwraca nic, gdy jestem w szablonie paska bocznego – Shani1351

+0

A także obiekt produktu jest już załadowany podczas wywoływania $ this-> getProduct(), więc nie ma sensu ponownie wywoływać ładowania produktu. – Bery

+0

to nie jest konieczne, aby załadować produkt tutaj – drsndodiya

23

Jak uzyskać prąd ID produktu

spróbować poniższy kod aby otrzymać aktualnie załadowanego ID produktu:

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

Jeśli nie masz dostępu do $ to można użyć rejestru Magento:

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

To rzeczywiście działa. Zostało ono przegłosowane powyżej, jednak sprawdziło się dla mnie. Rozumiem, że produkt rzeczywiście ładuje się podczas korzystania z getProduct(), jednak otrzymywałem tylko częściowe informacje o produkcie. Uzyskanie identyfikatora i ponowne załadowanie produktu spowodowało odzyskanie wszystkich informacji.

Może to być specyficzne dla wersji Magento, jednak działa, chociaż wygląda głupio.

Powiązane problemy