Actuellement, si je veux obtenir une certaine collection de produits, par exemple best-seller, j'utiliser ce qui suit, directement dans mon fichier de modèle:Magento - faire une nouvelle fonction getProductCollection()
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('name')
->addAttributeToFilter('visibility', $visibility)
->addOrderedQty()
->setOrder('ordered_qty', 'desc')
$_productCollection->load();
. ..et ensuite sortir les produits avec une déclaration foreach.
Quelqu'un peut-il expliquer comment faire un nouveau bloc pour ce faire, qui peut être réutilisé? J'ai trouvé quelques exemples mais ils appellent toujours la liste de produits à partir d'une page de CMS, alors que je veux avoir l'appel à la fonction intégrée directement dans un fichier de modèle, que je peux appeler n'importe où.
Donc, supposons que mon module est configuré, et mon fichier Bestseller.php dans mon dossier Bloquer. Dans ce document, je suppose que je mets ma fonction pour la collecte, quelque chose comme
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();
}
Et si oui, comment puis-je appeler cela de mon modèle? Quelque chose comme?
$_productCollection = $this->getLoadedBestsellingCollection()
Toute aide, ou des pointeurs vers des tutoriels décents, très appréciés!
MISE À JOUR:
Je reçois de plus près, mais je ne parviens pas à l'extension du Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection classe. Si j'ajoute mon code à la fin du fichier Collection.php, comme
public function addBestSelling()
{
$this->addAttributeToSelect('*')->addOrderedQty()->setOrder('ordered_qty', 'desc');
return $this;
}
puis utilisez
$_productCollection = Mage::getResourceModel('reports/product_collection')->addBestSelling();
dans mon fichier modèle phtml, il fonctionne très bien. Mais si je sépare ce code dans mon Bestseller.php, dans mon dossier Modèles de mon module, comme si
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;
}
}
puis essayer de l'utiliser avec ce qui suit, je reçois une erreur lorsque la page n » t terminer le chargement (pas de message d'erreur)
$_productCollection = Mage::getResourceModel('featuredproducts/bestseller')
->addMostViewed();
Que manque-t-je?
+1 pour une question bien formulée avec beaucoup d'exemples. –