Postoji nekoliko CMS blokova koji su univerzalni jer omogućavaju da se sadržaj proizvoda koristi u različitim templejt fajlovima (.phtml files). Blokovi koji slede rade iz List.phtml (app\design\frontend\default\default\template\catalog\product\list.phtml).
Ovo su primeri blokova koji se najčešće koriste u okviru Catalog/Product polja. Obratite pažnju da primeri dole napisani sadrže kod za specifične atribute koji su korišćeni na pravom projektu. Oni verovatno neće odgovarati vama i vašem projetku, ali to neće uticati na glavne blokove koji su vama potrebni.
Bestseller.php
[php]
//bestseller module – Prikazuje najptodavanije proizvode.
class Mage_Catalog_Block_Product_Bestseller extends Mage_Catalog_Block_Product_Abstract
{
<a href="http://www.exploremagento.com/magento/some-custom-blocks-to-help-you-show-products.php" target="undefined">public function</a> __construct()
{
parent::__construct();
$storeId = Mage::app()->getStore()->getId();
$products = Mage::getResourceModel(’reports/product_collection’)
->addOrderedQty()
->addAttributeToSelect(array(’name’, ‘price’, ’small_image’, ’short_description’, ‘description’, ‘author’))
->setStoreId($storeId)
->addStoreFilter($storeId)
->setOrder(’ordered_qty’, ‘desc’);
Mage::getSingleton(’catalog/product_status’)->addVisibleFilterToCollection($products);
Mage::getSingleton(’catalog/product_visibility’)->addVisibleInCatalogFilterToCollection($products);
//$products->setPageSize(6)->setCurPage(1);
$this->setProductCollection($products);
}
}
[/php]
SpecificCategory.php
[php]
//prikuplja proizvode iz odredjene kategorije, u ovom slučaju kategorije 13.
class Mage_Catalog_Block_Product_Bookclub extends Mage_Catalog_Block_Product_Abstract
{
public $_collection;
protected function _getProductCollection()
{
$storeId = Mage::app()->getStore()->getId();
$product = Mage::getModel(‘catalog/product’);
$category = Mage::getModel(‘catalog/category’)->load(13); //category whos ID is 13
$visibility = array(
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
);
$products = $product->setStoreId($storeId)
->getCollection()
->addAttributeToFilter(‘visibility’, $visibility)
->addCategoryFilter($category)
->addAttributeToSelect(array(‘name’, ‘price’, ‘small_image’, ‘short_description’, ‘description’, ‘author’), ‘inner’)
//example custom attributes
->setOrder(‘created_at’, ‘desc’)
->addAttributeToSelect(array(‘special_price’, ‘special_from_date’, ‘special_to_date’), ‘left’)
;
$this->_collection = $products;
return $this->_collection;
}
public function getCurrentCategory() {
return Mage::getModel(‘catalog/category’)->load(13);
}
public function getProductCollection() {
return $this->_getProductCollection();
}
}
[/php]
SpecificCategoryLayer.php
[php]
/*Ovo je isto kao i gore, samo što prikuplja kolekciju proizvoda iz ‘catalog/layer’ dela.
Ovo je moralo da se koristi u prethodnim -1.1. x Magento verzijama, zato što je gore navedena verzija
koda stvarala neke neobične greške kada su korisnici editovali proizvode u svom admin delu (pa je vreme
front end servera isticalo). Ova greška je verovatno lokalna za tu specifičnu Magento verziju. Možete da postavite
kategoriju lejera samo jednom po zahtevu stranice, tako da ne možete da koristite ovaj blok koda više puta na jednoj strani,
sem ukoliko ne želite da ponovite proizvode iz iste kategorije više puta na jednoj strani.
*/
class Mage_Catalog_Block_Product_Bookclub extends Mage_Catalog_Block_Product_Abstract
{
public $_collection;
protected function _getProductCollection()
{
$storeId = Mage::app()->getStore()->getId();
$product = Mage::getModel(‘catalog/product’);
$layer = Mage::getSingleton(‘catalog/layer’);
$category = Mage::getModel(‘catalog/category’)->load(13); //category by ID
$layer->setCurrentCategory($category);
$visibility = array(
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
);
$products = $layer->getProductCollection()
->addAttributeToSelect(‘author’, ‘inner’) //example custom attributes
->addAttributeToSelect(‘shelf_talker’, ‘inner’)
->setOrder(‘created_at’, ‘desc’);
$this->_collection = $products;
return $this->_collection;
}
public function getCurrentCategory() {
return Mage::getModel(‘catalog/category’)->load(13);
}
public function getProductCollection() {
return $this->_getProductCollection();
}
}
[/php]
Ovi primeri ne predstavljaju sve što može da se učini sa ovim blokovima. Kao što je spomenuto, oni bi trebalo da rade sa “List.phtml” u kataloškom modulu fajlova za dizajn, ali možda želite da kreirate svoj templejt.
Najjednostavniji način da implementirate ove blokove i da imate koristi od njih jeste da ih dodate Mage folderu u okviru lokalnog foldera sa kodovima (local code folder) app/code/local/Mage/Catalog/Block/Product/Bestseller.php
Na ovaj način nećete morati da kreirate specijalne module kako biste koristili jednostavne blokove, čija je jedina svrha da omogući listu proizvoda iz kategorije ili u ovom konkretnom slučaju listu najbolje prodavanih proizvoda.