2011-01-10 10 views
16

Mam scroller pokazano kolekcję produktów aktualnie w sprzedaży, które ja nazywam przy użyciu następujących:

$todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); 
$_productCollection = Mage::getResourceModel('reports/product_collection') 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter('visibility', $visibility) 
    ->setPageSize(4) // Only return 4 products 
    ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate)) 
    ->addAttributeToFilter('special_to_date', array('or'=> array(
      0 => array('date' => true, 'from' => $todayDate), 
      1 => array('is' => new Zend_Db_Expr('null'))) 
      ), 'left') 
    ->addAttributeToSort('special_from_date', 'desc'); 
$_productCollection->load(); 

I wtedy uruchomić foreach aby uzyskać poszczególne produkty:

foreach ($_productCollection as $_product) 

wszystko działa poprawnie, z wyjątkiem ceny, które zwykle połączenie przy użyciu

$this->getPriceHtml($_product, true) 

Jednak to daje mi puste. Jeśli robię var_dump, widzę, że zarówno pierwotna cena, jak i specjalna cena są dostępne, więc dlaczego to nie działa? Używam dokładnie tego samego kodu na moim szablonie strony głównej, który nazywam CMS na stronie głównej, a cena jest wyświetlana w porządku (przy przecenionej cenie i wyświetlonej cenie specjalnej).

Używanie $ _product-> getFinalPrice() działa dobrze, ale tylko daje mi ostateczną "specjalną" cenę i nie pokazuje pierwotnej ceny.

Czy może brakuje mi czegoś w moim układzie xml, który jest potrzebny do pokazania cen za pomocą getPriceHtml?

+0

Do jakiego bloku odnosi się "$ this"? – clockworkgeek

Odpowiedz

21

Problem polega na tym, że funkcja getPriceHtml() jest zdefiniowana w bloku Mage_Catalog_Block_Product, a nie w standardzie Mage_Core_Block_Template. Musisz upewnić się, że blok rozciąga blok produktu, czy można to osiągnąć w układzie przez coś podobnego:

<block type="catalog/product" name="blockname" template="path/to/template.phtml"> 

Nie testowane, ale powinno działać.

+1

Bingo. Używałem core/template, więc zmieniono go na katalog/product_list i teraz działa. To było coś prostszego. Twoje zdrowie! –

6

Można też spróbować:

<?php echo Mage_Catalog_Block_Product::getPriceHtml($_product, true) ?> 

Gdzie $_product dotyczy przedmiotu produktu.

+0

Używanie tego powoduje błąd (co najmniej w wersji 1.5.01) – MrGlass

+0

Czy odnosi się Pan do produktu-produktu z produktem $ _product? –

+0

Tak.Magento nie lubi dostępu do Mage_Catalog_Block_Product bezpośrednio (nie pamiętam dokładnego błędu, ale to właśnie miało znaczenie) – MrGlass

3

Aby dostać pracę getPriceHtml function() poprawnie w niestandardowym bloku trzeba 2 rzeczy

1) Nakręć Katalog typ bloku/produktu

<block type="catalog/product" name="home_page_product" after="default_home_page" template="custom/home_page_product.phtml"/> 

2) przekazać obiekt produktu do getPriceHtml() funkcja

<?php $productObject = Mage::getModel('catalog/product')->load($_product->getId());?> 
<?php echo $this->getPriceHtml($productObject, true) ?> 
28

kolega zaleca korzystania z tej Magento przyjazny sposób, aby uzyskać html cen w dowolnym miejscu:

<?php $_product = Mage::getModel('catalog/product')->load($product->getId()); 
     $productBlock = $this->getLayout()->createBlock('catalog/product_price'); 
     echo $productBlock->getPriceHtml($_product); ?> 

Jeśli już pracujesz z załadowanym produktem, nie potrzebujesz pierwszej linii, jednak mój produkt pochodzi z kolekcji, więc było to konieczne.

+0

to działało dla mnie! – Jimmery

+2

to działało nawet lepiej niż zaakceptowana odpowiedź dla mnie. – jeruki

Powiązane problemy