Créer un bloc pour afficher les promos
This is an old revision of the document!
EDIT Gabriiiel@Fragento.org 28/04/2009 : ne PAS suivre la méthode de ce tutorial, la méthodologie n’est pas correcte, notamment au niveau de app/etc/local.xml car il convient de référencer le module proprement
Ce petit tuto qu’on peut probablement améliorer permet de créer un bloc qui affichera les articles en promo (prix spécial de telle date à telle date).
Etape 1 : Créer la nouvelle class de block permettant d'instancier les produits en promo |
Créer un fichier : app/code/local/MaBoite/Catalog/Block/Product/Promotions.php
<?php
class MaBoite_Catalog_Block_Product_Promotions extends Mage_Catalog_Block_Product_Abstract
{
private $_page_size = 10;
public function __construct()
{
parent::__construct();
$storeId = Mage::app()->getStore()->getId();
$product = Mage::getModel('catalog/product');
$todayDate = $product->getResource()->formatDate(time());
$products = $product->setStoreId($storeId)->getCollection()
->addAttributeToFilter('special_price', array('gt' => 0), 'left')
->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate), 'left')
->addAttributeToFilter(array(
array('attribute' => 'special_to_date', 'date' => true, 'from' => $todayDate),
array('attribute' => 'special_to_date', 'is' => new Zend_Db_Expr('null'))
), '', 'left')
->addAttributeToSelect(array('name', 'price', 'small_image', 'thumbnail'), 'inner')
->addAttributeToSelect(array('special_price', 'special_from_date', 'special_to_date'), 'left');
if ($category = Mage::registry('current_category')) {
$products = $products->addCategoryFilter($category, false, true);
}
$products->getSelect()->order('rand()');
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
$products->setPageSize($this->_page_size)->setCurPage(1);
$this->setProductCollection($products);
}
}
Etape 2 : Etendre Mage_Page_Block_Html |
Créer un fichier : app/code/local/MaBoite/Page/Block/Html.php
<?php
class MaBoite_Mage_Page_Block_Html extends Mage_Page_Block_Html
{
public function getPromotionsProductHtml()
{
return $this->getBlockHtml('product_promotions');
}
}
Etape 3 : Ajouter un nouveau bloc |
dans : app/etc/local.xml
<blocks>
<catalog>
<rewrite>
<product_promotions>MaBoite_Catalog_Block_Product_Promotions</product_promotions>
</rewrite>
</catalog>
</blocks>
Etape 4 : Créer le template affichant les promos |
Créer un fichier : app/design/frontend/default/votredesign/template/catalog/product/promotions.phtml
<?php $promotions_products = $this->getPromotionsProducts(); ?>
<?php shuffle($promotions_products); ?>
<?php $_collectionSize = count($promotions_products); ?>
<?php $i=0; foreach ($promotions_products as $_res): ?>
<?php $_product = Mage::getModel('catalog/product')->load($_res['product_id']); ?>
<p class="home-callout">
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>">
<img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(195, 195); ?>" width="195" height="195" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" />
</a>
<h5><a class="product-name" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></h5>
<span class="regular-price"><span class="price"><?php echo Mage::helper('core')->currency($_product->getPrice(),true,true) ?></span></span>
<?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
</p>
<?php endforeach ?>
Etape 5 : Ajouter le bloc dans une page |
A insérer par exemple dans une page du CMS comme la page d’acceuil.
{{block type="catalog/product_promotions" name="product_promotions" as="product_promotions" template="catalog/product/promotions.phtml"}}
N’hésitez pas à faire part d’améliorations.


