В настоящее время, если я хочу получить определенную коллекцию продуктов, например, бестселлеров, я использую следующее, прямо в файле шаблона:
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('name')
->addAttributeToFilter('visibility', $visibility)
->addOrderedQty()
->setOrder('ordered_qty', 'desc')
$_productCollection->load();
... и затем вытаскиваюпродукты с оператором foreach.
Может кто-нибудь объяснить, как создать для этого новый блок, который можно использовать повторно?Я нашел несколько примеров, но они всегда вызывают список продуктов со страницы CMS, тогда как я хочу, чтобы вызов функции был встроен непосредственно в файл шаблона, который я могу вызвать из любого места.
Итак, предположим, что у меня настроен модуль и файл Bestseller.php находится в папке «Блок».В нем, я полагаю, я поместил свою функцию для коллекции, что-то вроде
protected function _getBestsellingCollection()
{
$_BestsellingCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('name')
->addAttributeToFilter('visibility', $visibility)
->addOrderedQty()
->setOrder('ordered_qty', 'desc');
$_BestsellingCollection->load();
}
public function getLoadedBestsellingCollection()
{
return $this->_getBestsellingCollection();
}
И если так, то как я могу вызвать это из моего шаблона?Что-то вроде?
$_productCollection = $this->getLoadedBestsellingCollection()
Любая помощь или указатели на достойные учебники, высоко ценится!
ОБНОВЛЕНИЕ:
Я все ближе,но у меня проблемы с расширением класса Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection .Если я добавлю свой код в конец файла Collection.php , например
public function addBestSelling()
{
$this->addAttributeToSelect('*')->addOrderedQty()->setOrder('ordered_qty', 'desc');
return $this;
}
, а затем использую
$_productCollection = Mage::getResourceModel('reports/product_collection')->addBestSelling();
в моем файле шаблона phtml, онработает отлично.Но если я разделю этот код в моем Bestseller.php , в моей папке Models моего модуля, например
class Samsmodule_FeaturedProducts_Model_Bestseller extends Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
{
public function addBestSelling()
{
$this->addAttributeToSelect('*')->addOrderedQty()->setOrder('ordered_qty', 'desc');
return $this;
}
}
, а затем попробую использовать его со следующим, я получуошибка, при которой страница не загружается (сообщение об ошибке отсутствует)
$_productCollection = Mage::getResourceModel('featuredproducts/bestseller')
->addMostViewed();
Чего мне не хватает?