Was ist der Unterschied zwischen isSaleable () und isAvailable ()?
Arbeite ich an der Anzeige der Lieferbereitschaft auf den (einzelnen) Produkt-Seite von meinem Magento Thema, und es gibt etwas, was ich nicht ganz verstehen.
Sehe ich zwei Methoden benutzt, die Vorlagen zu prüfen, ob ein Produkt für den Verkauf verfügbar ist:
Mage_Catalog_Model_Product::isAvailable()
Mage_Catalog_Model_Product::isSaleable()
Meine eigenen Erkenntnisse:
Ich sehe, dass isSalable()
(die wiederum von isSaleable()
) fordert isAvailable()
aber auch löst zwei Ereignisse (catalog_product_is_salable_before
und catalog_product_is_salable_after
).
Auf der fronted habe ich bemerkt, dass in Magento Basis template isAvailable()
verwendet, um zu entscheiden, ob das Produkt als "auf Lager" oder "ausverkauft"; isSaleable()
wird verwendet, um zu entscheiden, was, wie, ob, um zu zeigen, ein "Add to Cart" - button.
Auf das backend habe ich bemerkt, dass wenn der Lagerbestand null wird und Rückstände sind nicht erlaubt, den Lagerbestand eines Produktes geht, um "out of stock".
Wenn der Lagerbestand null wird und Rückstände sind erlaubt, den Lagerbestand ein Produkt bleibt unverändert.
Frage:
Die Eigenschaften "Verfügbarkeit" und "Lagerbestand" sind offenbar miteinander verknüpft, und die genannten PHP-Methoden. Ich würde gerne wissen:
-
was die semantische Unterschied zwischen den PHP-Methoden
isAvailable()
und
isSaleable()
ist und warum ich würde einen über den anderen; -
was es ist, ich scheinen noch nicht zu wissen, über Ihre Beziehung mit diesen Eigenschaften und Magento Verhalten.
Danke.
EDIT:
Ich habe versucht, jede relevante Kombination von Quantität auf Lager (-1,0,1), Verfügbarkeit (in/out) und Rückstände (on/off) für ein Produkt, und das ist das Ergebnis:
St. Qu BckOrd St. Av isSalable() isSaleable() isAvailable() -1 0 0 0 0 0 -1 0 1 N/A N/A N/A -1 1 0 0 0 0 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 N/A N/A N/A 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1
Nur der Vollständigkeit halber:
St. Av 0 = ausverkauft St. Av 1 = auf Lager BckOrd 0 = keine Rückstände zulässig BckOrd 1 = Rückstände sind erlaubt
Ist es, die Verfügbarkeit der Ware im Lager-Schalter in Magento, der steuert, den Rückgabewert von allen die PHP-Methoden, aber wenn Sie Rückstände sind aus-und Bestandsmenge unterschreitet 1, der Lagerbestand wird automatisch zurückgesetzt werden, um 'out of stock' (daher der N/A
Zeilen).
InformationsquelleAutor der Frage pancake | 2012-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
isSaleable()
Während der Arbeit mit Magento-Vorlagen, die Sie definitiv gestolpert isSalable () - Methode angewendet, um Produkt-Objekt. Die Methode, die physisch vorhanden ist, aber es wird nur geprüft, wenn das Produkt aktiviert hat status-und absatzfähig zu überprüfen, sollte nicht übersprungen werden. Dann die is_salable Eigenschaft des Produkt-Objekt zurückgegeben.
Die offensichtliche Frage ist, wenn diese Eigenschaft gesetzt ist. Nach Produkt geladen ist, wird bereits auf dem Modell, aber es ist nicht ein Attribut und nicht eine Spalte im Produkt-flachen Tisch.
Als üblich alle bizarren Sachen in Magento erfolgt durch Beobachter. Mage_Cataloginventory, ist die Beobachtung catalog_product_load_after event-und da kommt es auf Mage_CatalogInventory_Model_Resource_stock_status::getProductStatus und die folgende Abfrage:
Es ist deutlich sichtbar, dass die Entscheidung, wenn das Produkt verkäuflich ist oder nicht, ist während Neuindizierung. Und ignorieren stock_id die eine Art unfertige Funktionen, die auch pop-out später.
So sind wir landen in einem Ort, den kein vernünftiger Magento Entwickler gerne gehen .. der indexer. Katalog Inventar indexer in unserem Fall. Nach der schnellen Reise durch das Labyrinth der Mage_CatalogInventory_Model_Indexer_stock::_processEvent, Mage_Index_Model_Indexer_Abstract::reindexAll und Mage_CatalogInventory_Model_Resource_indexer_stock::reindexAll entdecken wir, dass jedes Produkt-Typ hat seinen eigenen Lager-indexer, welche sich in app/code/core/Mage/CatalogInventory/Model/Resource/Indexer/Stock.
Jeder Typ hat eine _getStockStatusSelect-Methode, wo eine SQL-Abfrage, schließlich entscheidet, ob das Produkt im verkaufsfähigen oder nicht. Obwohl die Abfrage möglicherweise scheinen massive die Logik dahinter ist nicht kompliziert.
Den großen Teil des Codes hier ist wieder diese rudimentäre Sachen. Scheint, wie core-Entwickler machte einen feinen Versuch, um zu ermöglichen, dass unterschiedliche Lagerbestände für verschiedene websites, aber aus irgendeinem Grund wurde diese Funktionalität nie fertig.
So zum Beispiel der check der einfachen Produkte vorrätig haben, enthält nur noch verifizieren, dass das Produkt aktiviert ist und die Menge positiv ist gewürzt mit einem Bestand management-flags. Abfragen für konfigurierbare und gruppierte Produkte variiert etwas durch Produkt-Typ, Besonderheiten.
InformationsquelleAutor der Antwort krishna
ich sehe diejenigen, die semantischen Unterschiede. Ein Element, das nicht auf Lager ist, kann noch werden verkaufsfähigen wenn besagter Artikel ist eingestellt, dass Rückstände.Soweit ich das beurteilen kann, sieht es aus wie
isAvailable
prüft ein Produkt, Typ-Instanz, um zu sehen, wenn das Produkt Typ könnte zum Verkauf angeboten werden, wenn es in der Tat.Also, zu Wagen, eine Vermutung, wenn Sie wählen könnten, einen über den anderen:
Checken Sie ein einzelnes Produkt zu sehen, ob das Produkt tatsächlich zum Verkauf bereit, die Sie verwenden sollten
isSalable()
wie Sie es nennen wirdisAvailable()
.Um zu überprüfen, ob ein Produkt ein, dessen Typ Sie nicht wissen, off-hand) verkauft werden konnte, und ich nehme an, das überspringen der Schritt der überprüfung der Produkt-Typ, könnte man sagen
isAvailable()
auf das Produkt.isAvailable()
prüft, ob ein Produkt den Typ ist verkäuflich.isSalable()
prüft, ob ein Produkt ist verkäuflich.isSaleable()
ist ein alias vonisSalable()
.InformationsquelleAutor der Antwort elcash
Soweit mein Anliegen,
isSaleable()
heißt, Sie kontrollieren die meisten top-Produkt, das zum Verkauf bereit steht. WährendisAvailable()
heißt, Sie überprüfen, die das Produkt aus der Liste, die verfügbar ist.InformationsquelleAutor der Antwort Bhavna Malhi
isAvailable() verwendet, um zu entscheiden, ob das Produkt als auf Lager oder ausverkauftwährend isSaleable() verwendet, um zu entscheiden, ob eine in den Warenkorb - Taste oder nicht.
InformationsquelleAutor der Antwort Vinay Sikarwar