2011-01-10 12 views
16

Ho una scroller che mostra una collezione di prodotti attualmente in commercio, che io chiamo utilizzando la seguente:

$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(); 

Ho quindi eseguito un foreach per ottenere il i singoli prodotti:

foreach ($_productCollection as $_product) 

tutto funziona bene, tranne che per il prezzo, che io di solito chiamata utilizzando

$this->getPriceHtml($_product, true) 

Tuttavia questo mi sta dando un vuoto. Se faccio un var_dump posso vedere che sia il prezzo originale sia il prezzo speciale sono entrambi disponibili, quindi perché non funziona? Io uso esattamente lo stesso codice sul mio modello di homepage, che chiamo tramite il CMS della homepage, e il prezzo è mostrato bene (con il prezzo normale barrato e il prezzo speciale mostrato).

Utilizzo di $ _product-> getFinalPrice() funziona correttamente, ma solo mi dà il prezzo finale "speciale" e non mostra il prezzo originale.

Mi manca forse qualcosa nel mio layout xml che è necessario per mostrare i prezzi usando getPriceHtml?

+0

A quale blocco si riferisce $? – clockworkgeek

risposta

21

Il problema è che la funzione getPriceHtml() è definita nel blocco Mage_Catalog_Block_Product anziché nello standard Mage_Core_Block_Template. È necessario assicurarsi che il blocco si estende il blocco del prodotto, oppure si può raggiungere questo nel layout da qualcosa come:

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

Non ho ancora testato, ma dovrebbe funzionare.

+1

Bingo. Stavo usando core/template, quindi cambiato in catalog/product_list e ora funziona. Nuovo sarebbe stato qualcosa di semplice come quello. Saluti! –

6

Si potrebbe anche provare questo:

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

Dove $_product riguarda l'oggetto prodotto.

+0

L'utilizzo di questo genera un errore (almeno in 1.5.01) – MrGlass

+0

Ti stai riferendo a un oggetto prodotto con $ _product? –

+0

Sì.A Magento non piace che io acceda direttamente a Mage_Catalog_Block_Product (ho dimenticato l'errore esatto, ma è quello che intendeva) – MrGlass

3

per ottenere il lavoro funzione getPriceHtml() correttamente nel blocco personalizzato è necessario 2 cose

1) Fai il tuo catalogo tipo di blocco/prodotto

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

2) passare l'oggetto prodotto da getPriceHtml() funzione

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

mio collega consiglia di utilizzare questo metodo amichevole Magento per ottenere il codice HTML prezzo ovunque:

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

Se si sta già lavorando con un prodotto caricato, non è necessario la prima riga, tuttavia il mio prodotto proveniva da una raccolta, quindi era necessario.

+0

ha funzionato per me! – Jimmery

+2

questo ha funzionato anche meglio della risposta accettata per me. – jeruki

Problemi correlati