Ich muss die Produkte einer Kategorie in zwei Listen anzeigen - eine für vorrätige Artikel, die andere für nicht vorrätige Artikel.
Ich benutze
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection()
Um meine Produktkollektion nach vorrätigen Artikeln zu filtern, scheint es jedoch keine äquivalente Methode zum Filtern nach nicht vorrätigen Artikeln zu geben. Ich habe mir das Mage_CatalogInventory_Model_Stock
Modell angesehen, in dem die oben genannte Methode definiert ist.
Ich habe das folgende Beispiel zum Abrufen von nicht vorrätigen Produkten gesehen:
$collection->joinField(
'is_in_stock',
'cataloginventory/stock_item',
'is_in_stock',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
)
->addAttributeToFilter('is_in_stock', array('eq' => 0));
... aber das ist doch nicht nur der beste Weg, dies zu erreichen?
In Ihrem Beispiel wird der Wert für "use config" nicht berücksichtigt.
Schauen wir uns an, wie es
addInStockFilterToCollection
funktioniert:OK, es wird an eine andere Methode delegiert:
Dies verbindet die Inventartabelle mit den folgenden Bedingungen:
Das Produkt verwendet keine globale Konfiguration UND hat "Lager verwalten" auf "Ja" gesetzt UND ist auf Lager
ODER
Das Produkt verwendet keine globale Konfiguration UND hat "Lagerverwaltung" auf "Nein" gesetzt.
ODER
Sie müssen die Bedingungen wie folgt umkehren:
Das Produkt verwendet keine globale Konfiguration UND hat "Lager verwalten" auf "Ja" gesetzt UND ist nicht auf Lager
ODER
Das Produkt verwendet die globale Konfiguration UND die globale Konfiguration lautet "Lager verwalten = Ja" UND ist nicht auf Lager
Erläuterung: Sie nehmen nur die Bedingungen, unter denen der Lagerbestand tatsächlich geprüft wird, und ändern den Vergleich auf 0. Die Bedingungen, unter denen der Lagerbestand nicht geprüft wird ("Lager verwalten" = "nein"), bedeuten, dass das Produkt unabhängig vom Lagerstatus immer auf Lager ist Daher nehmen wir sie nicht in unsere Abfrage "Nicht vorrätig" auf.
Dann ist dies Ihr Code:
quelle
Mage_CatalogInventory_Model_Stock
Modell zu erweitern ?$this
. Es könnte genauso gut eine einfache Funktion sein. Ich würde ein separates Modul erstellen und es zu einer Hilfsmethode machen (oder wenn Sie dies für ein anderes Modul benötigen, fügen Sie es dem Helfer dieses Moduls hinzu)Das folgende Codefragment gibt Ihnen die Produkte einer Kategorie zurück, die den Status "Aktivieren", "Sichtbarkeit", "Suche" und "Lagerverfügbarkeit" "Nicht vorrätig" haben.
quelle
Sie können dies versuchen.
Oder Sie können dies versuchen
Nicht 100% sicher.
quelle