कैटलॉग उत्पाद सूची के अंत में स्टॉक उत्पादों से हटो [बंद]


14

मुझे कैटलॉग सूची के अंत में स्टॉक उत्पादों से बाहर धकेलने की आवश्यकता है

कृपया मुझे गाइड करें कि इस समस्या को कैसे हल किया जाए, या उस फ़ाइल को खोदने के लिए

अब तक मैंने पाया Toolbar.php, और इसके आसपास काम कर रहा था



1
यह बाहर की जाँच ajit-techhub.blogspot.in/2012/01/...
पवन कुमार

1
मैं Magento के लिए नया हूं, इसलिए noob सवाल, /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php - यह फ़ाइल खाली है, ठीक है?
एलेक्जेंड्रा सोकोव

मैं हाथ फ़ाइल पता नहीं है, लेकिन मुझे लगता है कि आप को खोजने के लिए जहां Magento उत्पाद संग्रह बनाता है और फिर जैसे एक तरह से फ़िल्टर जोड़ने चाहता हूँ stackoverflow.com/questions/4803495/...
kevando

3
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि एक स्वीकृत उत्तर के बिना बहुत पुराना है
SR_Magento

जवाबों:


11

समाधान 1

यह पृष्ठ पर सूची के अंत तक स्टॉक उत्पादों से बाहर निकलता है, पृष्ठ पर अंक लगाना नहीं:

1. घटना पर्यवेक्षक:

<frontend>
    <events>
        <catalog_block_product_list_collection>
            <observers>
                <ssd_test>
                    <type>model</type>
                    <class>ssd_test/observer</class>
                    <method>catalogBlockProductCollectionBeforeToHtml</method>
                </ssd_test>
            </observers>
        </catalog_block_product_list_collection>
    </events>
</frontend>

2. व्यापक तर्क:

public function catalogBlockProductCollectionBeforeToHtml($observer)
{
    /**
     * @var $products Varien_Data_Collection
     */
    $products         = $observer->getEvent()->getCollection();
    $soldOuts         = array();
    if ($products instanceof Varien_Data_Collection) {
        foreach ($products as $product) {
            if (!$product->isSaleable()) {
                $products->removeItemByKey($product->getId());
                $soldOuts[] = $product;
            }
        }
        foreach ($soldOuts as $product) {
            $products->addItem($product);
        }
    }
    return $this;
}

3. सेट " Display Out of Stock Products" से " Yes" पर System->Configuration->Inventory

समाधान २

यह स्टॉक उत्पादों से हटकर सूची के अंत में सभी पेजिंग पर जाता है:

config.xml:

    <frontend>
        <events>
            <catalog_product_collection_load_before>
                <observers>
                    <review>
                        <type>model</type>
                        <class>ssd_test/observer</class>
                        <method>catalogProductCollectionLoadBefore</method>
                    </review>
                </observers>
            </catalog_product_collection_load_before>
        </events>
    </frontend>

Observer.php:

    public function catalogProductCollectionLoadBefore($observer)
    {
        $toolbar = Mage::getBlockSingleton('catalog/product_list_toolbar');
        if ($toolbar) {
            $products = $observer->getEvent()->getCollection();

            $stockId = Mage_CatalogInventory_Model_Stock::DEFAULT_STOCK_ID;
            $websiteId = Mage::app()->getStore($products->getStoreId())->getWebsiteId();

            $products->getSelect()->joinLeft(
                array('_inv' => $products->getResource()->getTable('cataloginventory/stock_status')),
                "_inv.product_id = e.entity_id and _inv.website_id=$websiteId and _inv.stock_id=$stockId",
                array('stock_status')
            );
            $products->addExpressionAttributeToSelect('in_stock', 'IFNULL(_inv.stock_status,0)', array());

            $products->getSelect()->reset('order');
            $products->getSelect()->order('in_stock DESC');

            if ($toolbar->getCurrentOrder()) {
                $products->addAttributeToSort($toolbar->getCurrentOrder(), $toolbar->getCurrentDirection());
            }
        }

        return $this;
    }

" Display Out of Stock Products" से " Yes" पर सेट करें System->Configuration->Inventory

उपर्युक्त लॉजिक्स आपके कैटलॉग सॉर्ट / पेजिनेशन कार्यक्षमता को प्रभावित नहीं करता है, केवल बिक्री योग्य उत्पादों को अंत तक नहीं ले जाता है।


क्या आपको यकीन है कि यह काम करेगा? यह सीम को प्रभावित नहीं करेगा, लेकिन यह नीचे स्थित स्टॉक उत्पादों से बाहर चला जाएगा। इसलिए यदि आप अगले पृष्ठ पर जाते हैं तो आप स्टॉक उत्पादों में देख सकते हैं जब आपने पिछले पृष्ठ पर स्टॉक आउट में से कुछ को देखा था।
मेरियस

हाँ, यह स्टॉक उत्पादों के बाहर
पेजिंग के

मुझे लगता है कि यहां कार्य सूची के अंत में स्टॉक उत्पादों से बाहर जाना था, न कि पृष्ठ पर। तो आपको स्टॉक उत्पादों में पहले एन पेज देखना चाहिए और एक बार स्टॉक आउट देखने के बाद, उसके बाद आने वाले अन्य सभी स्टॉक से बाहर हो जाते हैं।
मेरियस

हां, मैं एक और समाधान देने की कोशिश करूंगा :)
mageUz

1
समाधान 2 एक आकर्षण की तरह काम करता है! इसके लिए आपको बहुत धन्यवाद!
डेरिक नेल

0

मैंने अपनी वेबसाइट पर इस कार्यक्षमता को लागू किया है।

  • कॉपी संग्रह।

  • संग्रह संपादित करें। एफपीपी , पंक्ति 1570 के आसपास पाठ $ स्टोर खोजें = $ यह-> getStoreId ();

  • निम्नलिखित पंक्तियों को सीधे जोड़ें:

        $this->getSelect()->joinLeft(
        array('_inventory_table'=>$this->getTable('cataloginventory/stock_item')),
        "_inventory_table.product_id = e.entity_id",
        array('is_in_stock', 'manage_stock')
    );
    $this->addExpressionAttributeToSelect('on_top',
    '(CASE WHEN (((_inventory_table.use_config_manage_stock = 1) AND (_inventory_table.is_in_stock = 1)) OR  ((_inventory_table.use_config_manage_stock = 0) AND (1 - _inventory_table.manage_stock + _inventory_table.is_in_stock >= 1))) THEN 1 ELSE 0 END)',
     array());
    $this->getSelect()->order('on_top DESC');

अपने कैश और अपने उत्पादों को फ्लश करें अब पहले स्टॉक उत्पादों में स्वचालित रूप से सॉर्ट करें और पिछले स्टॉक उत्पादों से बाहर रहें।


3
कृपया स्थानीय कोर ओवरराइड की सिफारिश करने से बचना चाहिए। Mage_Catalog_Model_Resource_Product_Collection वर्ग को ठीक से विस्तारित करने के लिए बेहतर होगा।
ब्लोमक्विस्ट

1
शायद आप अपना खुद का जवाब जोड़ सकते हैं और हमें दिखा सकते हैं कि कैसे करना है?
SR_Magento
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.