Problème de collecte de produits - données de tarification incorrectes ou absence de rupture de stock

9

Je récupère une collection de produits basée sur la catégorie actuelle. J'ai besoin que cette collection contienne des produits en stock et en rupture de stock, et j'ai également besoin que les données de prix soient affichées correctement.

Mon magasin est configuré pour stocker les prix des produits TTC, et pour afficher les prix à la fois inclus et exclusifs sur la devanture du magasin.

Le code d'obtention de la collection est le suivant:

$category = Mage::registry('current_category'); 
$_productCollection = Mage::getModel('catalog/product')->getCollection()
                ->addCategoryFilter($category)
                ->addAttributeToSelect(['sku', 'name', 'price'])
                ->addAttributeToFilter('status', 1)
                ->addAttributeToSort('jump_number', Varien_Data_Collection::SORT_ORDER_ASC); 

Le problème avec ce qui précède est que lors du chargement du bloc de prix à l'aide de la getPriceHtml()méthode, les prix inclusifs et exclusifs sont affichés en tant que prix inclusif.

Après quelques recherches, j'ai constaté que l'ajout d'une addFinalPrice()méthode à ma collection me donne le prix attendu - un prix exclusif et correct correct inclusif.

Cependant, si j'inclus la addFinalPrice()méthode, ma collection ne contient plus de produits en rupture de stock.

Existe-t-il un moyen de renvoyer les données de prix correctes et de faire en sorte que la collection contienne des produits vendables et en rupture de stock?

BrynJ
la source

Réponses:

3

addFinalPrice()appelle également applyProductLimitationFilters. Cette méthode applique plusieurs filtres en fonction de la configuration de la collection, comme le filtre de magasin qui affiche uniquement les produits visibles dans le magasin actuel.

Si vous souhaitez charger tous les produits, visibles ou non, comme sans le filtre de prix, vous pouvez supprimer le filtre de magasin comme ceci, avant d' appeler addFinalPrice():

$collection->setStoreId(null);
Fabian Schmengler
la source
@fschmengler - merci, cela semble être une meilleure option.
BrynJ
1

J'ai résolu ce problème maintenant, et c'est en fait assez simple et logique - je devais juste aller sur Configuration -> Catalog -> Inventoryet régler 'Afficher les produits en rupture de stock' sur Yes.

Avec la valeur ci-dessus définie Yeset la addFinalPrice()méthode ajoutée à la collection, j'obtiens maintenant tous mes produits et les données de prix correctes.

BrynJ
la source
C'est très bien si vous voulez montrer des produits en rupture de stock partout . Si c'est juste pour cette collection, voir ma réponse ci
Fabian Schmengler