2012-01-27 15 views
48

मैं अपने Magento विषय के (व्यक्तिगत) उत्पाद पृष्ठ पर स्टॉक उपलब्धता के प्रदर्शन पर काम कर रहा हूं, और ऐसा कुछ है जिसे मैं पूरी तरह से समझ नहीं पा रहा हूं।isaleable() और isAvailable() के बीच क्या अंतर है?

मैं देख रहा हूँ दो विधियों है कि क्या एक उत्पाद की बिक्री के लिए उपलब्ध है की जाँच करने के टेम्पलेट्स में इस्तेमाल किया जा रहा:

Mage_Catalog_Model_Product::isAvailable() 
Mage_Catalog_Model_Product::isSaleable() 

मेरा अपना निष्कर्ष:
मुझे लगता है कि isSalable() (जो बारी में isSaleable() द्वारा कहा जाता है) isAvailable() पर कॉल करता है लेकिन दो घटनाओं को भी प्रेषित करता है (catalog_product_is_salable_before और catalog_product_is_salable_after)।

सामने वाले मैंने देखा है कि Magento के बेस टेम्पलेट में isAvailable() का उपयोग यह तय करने के लिए किया जाता है कि उत्पाद को "स्टॉक में" या "स्टॉक से बाहर" के रूप में प्रदर्शित करना है या नहीं; isSaleable() का उपयोग कुछ "कार्ट में जोड़ें" बटन दिखाने के लिए किया जाता है।

बैकएंड पर मैंने देखा है कि जब स्टॉक मात्रा शून्य हो जाती है और बैकॉर्डर की अनुमति नहीं है, तो उत्पाद की स्टॉक उपलब्धता "स्टॉक से बाहर" हो जाती है। जब स्टॉक मात्रा शून्य हो जाती है और बैकॉर्डर की अनुमति है, तो उत्पाद की स्टॉक उपलब्धता में अपरिवर्तित रहता है।

प्रश्न:
गुण "स्टॉक उपलब्धता" और "शेयर मात्रा" स्पष्ट रूप से एक दूसरे को और उल्लेख किया पीएचपी तरीकों के साथ जुड़े हुए हैं। मैं जानना चाहूंगा:

  • क्या अर्थ पीएचपी तरीकों isAvailable() और isSaleable() है और क्यों मैं एक दूसरे के ऊपर का प्रयोग करेंगे के बीच का अंतर;

  • मुझे इन गुणों और Magento के व्यवहार के साथ अपने संबंधों के बारे में अभी तक क्या पता नहीं है।

धन्यवाद।

संपादित करें:
मैं (/ बंद) एक उत्पाद के लिए, और इस शेयर मात्रा (-1,0,1), शेयर उपलब्धता (में/में से) और backorders के हर प्रासंगिक संयोजन की कोशिश की है

 
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 
बस पूर्णता के लिए के लिए

:

 
St.Av 0 = out of stock 
St.Av 1 = in stock 
BckOrd 0 = no backorders allowed 
BckOrd 1 = backorders are allowed 

यह Magento में स्टॉक उपलब्धता स्विच है कि PHP तरीकों में से सब से वापसी मान को नियंत्रित करता है, लेकिन जब backorders एक परिणाम है फिर से बंद करें और स्टॉक मात्रा 1 से नीचे गिरती है, स्टॉक उपलब्धता स्वचालित रूप से 'स्टॉक से बाहर' पर रीसेट हो जाएगी (इसलिए N/A पंक्तियां)।

उत्तर

-1

मुझे लगता है कि वे अर्थपूर्ण मतभेद हैं। एक वस्तु जो स्टॉक में नहीं है तब भी बिक्री योग्य हो सकती है यदि कहा गया आइटम बैकॉर्डर्स को अनुमति देने के लिए सेट है।

जहां तक ​​मेरा बता सकते हैं, यह isAvailable चेकों एक उत्पाद का प्रकार उदाहरण की तरह दिखता है देखने के लिए अगर उत्पाद के प्रकार बिक्री के लिए हो सकता है अगर यह वास्तव में उपलब्ध है।

आप किसी एक उत्पाद की जाँच कर रहे हैं, तो कहा उत्पाद वास्तव में बिक्री के लिए तैयार है देखने के लिए, आप का उपयोग करना चाहिए isSalable(), के रूप में यह होगा:

तो, आप एक दूसरे के ऊपर चुन सकते हैं जब में एक अनुमान उद्यम के लिए isAvailable() पर कॉल करें।

यह जांचने के लिए कि कोई उत्पाद (जिसका प्रकार आप हाथ से नहीं जानते हैं) बेचा जा सकता है, और मुझे लगता है कि उत्पाद के प्रकार की जांच करने के चरण को छोड़ना, आप उत्पाद पर isAvailable() पर कॉल कर सकते हैं।

isAvailable() जांचता है कि उत्पाद का प्रकार बिक्री योग्य है या नहीं।

isSalable() चेक करता है कि कोई उत्पाद बिक्री योग्य है या नहीं।

isSaleable()isSalable() का उपनाम है।

+1

मैं स्टॉक में कुछ रखने और कुछ बेचने में सक्षम होने के बीच अर्थपूर्ण अंतर को समझता हूं, लेकिन मुझे अभी भी पता नहीं है कि सैलेबल()/isSalable() और isAailable() के बीच अर्थपूर्ण अंतर क्या है। एक दूसरे का उपयोग क्यों करें, जब हर स्थिति में मैं सोच सकता हूं कि वे एक ही काम करते हैं (संपादित प्रश्न देखें)? मैं कहता हूं "कि मैं सोच सकता हूं" क्योंकि मैं जानना चाहता हूं कि ऐसी परिस्थितियां हैं जिनके बारे में मैंने नहीं सोचा है कि इन तरीकों के बीच भेद पैदा हो सकता है, क्योंकि अब मुझे लगता है कि उनमें से एक बेकार है, जो मुझे लगता है न्याय करने के लिए थोड़ा जल्दी। – pancake

+0

आपके संपादित प्रश्न में, आपने लिखा है जब बैकऑर्डर बंद हैं और स्टॉक मात्रा 1 से नीचे गिरती है, स्टॉक उपलब्धता स्वचालित रूप से 'स्टॉक से बाहर' रीसेट हो जाएगी एक 'stock_is_changed_automatically' ध्वज भी है, जिसे मैं दिखाने के लिए उपयोग करता हूं वे आइटम जो (तकनीकी रूप से) आविष्कार नहीं किए जाते हैं, और स्पष्ट रूप से इन-स्टॉक, बैकऑर्डर ऑफ, और qty = 0 – elcash

+0

यह उपयोगी जानकारी है, इसके लिए धन्यवाद। मैं असभ्य प्रतीत नहीं करना चाहता हूं, लेकिन मुझे अभी भी पता नहीं है कि कब उपयोग करना है और कहां उपयोग करना है उपलब्ध है, जब वे * एक ही काम करने लगते हैं। मैं वर्तमान में एक थीम बना रहा हूं, इसलिए मैं इसे सही करना चाहता हूं। – pancake

-4

isAvailable() को दिखाना है या एक गाड़ी बटन में जोड़े जबकि isSaleable() तय करने के लिए प्रयोग किया जाता है, शेयर में या शेयर से बाहर के रूप में उत्पाद प्रदर्शित करने के लिए तय करने के लिए प्रयोग किया जाता है या नहीं।

-3

जहां तक ​​मेरी चिंता है, isSaleable() का अर्थ है कि आप बिक्री के लिए तैयार होने वाले शीर्ष उत्पाद की जांच कर रहे हैं। जबकि, isAvailable() का अर्थ है कि आप उपलब्ध सूचियों से उत्पाद की जांच कर रहे हैं।

2

isSaleable() Magento के साथ काम करते हुए टेम्पलेट्स आप निश्चित रूप से isSalable पर ठोकर खाई() विधि उत्पाद वस्तु के लिए आवेदन किया। विधि शारीरिक रूप से मौजूद है लेकिन यह केवल तभी जांचती है जब उत्पाद की स्थिति सक्षम हो और बिक्री योग्य चेक को छोड़ा नहीं जाना चाहिए। फिर उत्पाद ऑब्जेक्ट की is_salable संपत्ति लौटा दी जाती है।

स्पष्ट सवाल यह है कि यह संपत्ति सेट है। उत्पाद लोड होने के बाद यह पहले से ही मॉडल पर सेट है लेकिन यह एक विशेषता नहीं है और उत्पाद फ्लैट तालिका में कॉलम नहीं है।

सामान्य रूप से, Magento में सभी विचित्र सामान पर्यवेक्षकों द्वारा किया जाता है। Mage_Cataloginventory catalog_product_load_after घटना को देख रहा है और यह Mage_CatalogInventory_Model_Resource_Stock_Status :: getProductStatus और निम्न क्वेरी करने के लिए नीचे आता है:

SELECT `cataloginventory_stock_status`.`product_id`, `cataloginventory_stock_status`.`stock_status` FROM `cataloginventory_stock_status` WHERE (product_id IN('241319')) AND (stock_id=1) AND (website_id=3); 

यह स्पष्ट रूप से दिखाई दे रहा है कि निर्णय करता है, तो उत्पाद बिक्री योग्य है या नहीं reindexing दौरान किया जाता है। और stock_id की उपेक्षा करें जो अधूरा कार्यक्षमता की तरह है जो बाद में भी पॉप आउट हो जाएगी।

तो हम किसी स्थान पर समाप्त हो रहे हैं कोई भी मैनेन्टो डेवलपर स्वेच्छा से नहीं जाएगा .. सूचकांक। हमारे मामले में सूची सूची सूचकांक। Mage_CatalogInventory_Model_Indexer_Stock :: _ processEvent, Mage_Index_Model_Indexer_Abstract :: reindexAll और Mage_CatalogInventory_Model_Resource_Indexer_Stock :: reindex हम सभी को पता चलता है कि प्रत्येक उत्पाद प्रकार का अपना स्टॉक इंडेक्सर है जो ऐप/कोड/कोर/मैज/कैटलॉग इन्वेंटरी/मॉडल/रिसोर्स/इंडेक्सर में रहता है /भण्डार।

प्रत्येक प्रकार में _getStockStatus चयन विधि है जहां एक SQL क्वेरी अंततः निर्णय लेती है कि उत्पाद बिक्री योग्य है या नहीं। भले ही क्वेरी बड़े पैमाने पर तर्क प्रतीत हो सकती है जटिल नहीं है।

यहां कोड का बड़ा हिस्सा इस प्राथमिक सामग्री है। ऐसा लगता है कि कोर डेवलपर्स ने विभिन्न वेबसाइटों के लिए अलग-अलग स्टॉक स्तर रखने की अनुमति देने का एक अच्छा प्रयास किया लेकिन कुछ कारणों से यह कार्यक्षमता कभी समाप्त नहीं हुई।

तो उदाहरण के लिए सरल उत्पादों की स्टॉक उपलब्धता की जांच में केवल यह सत्यापित करने की आवश्यकता है कि उत्पाद सक्षम है और मात्रा प्रबंधन प्रबंधन झंडे के साथ सकारात्मक मसाला है। कॉन्फ़िगर करने योग्य और समूहीकृत उत्पादों के लिए क्वेरी उत्पाद प्रकार विनिर्देशों के कारण थोड़ा भिन्न होती है।