Créer un bloc pour afficher les promos

Last modified by Gabriiiel on Tue, April 28, 2009 13:40
Source|Old Revisions  

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.




 

Magento 2 GitHub Repository

Magento Job Board - Some sort of tag line goes here

Latest Posts| View all Jobs