Créer un bloc pour afficher les promos

Last modified by e-thos on Tue, August 17, 2010 11:10
Source|Old Revisions  

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 0 : Faites une sauvegarde de votre site

L’application de ce tutoriel peut endommager complètement votre site internet. Une sauvegarde récente sera donc bien utile.

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 ?>

test

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