Keluar dari stok produk ke akhir daftar produk katalog [ditutup]

14

Saya harus mendorong produk stok ke akhir daftar katalog

Tolong bimbing saya cara mengatasi masalah ini, atau file itu untuk menggali

sejauh ini saya temukan Toolbar.php, dan mengatasinya

Alexandr Sopkov
sumber
1
Saya baru mengenal magento, jadi pertanyaan noob, /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php - file ini kosong, ok?
Alexandr Sopkov
Saya tidak tahu file itu begitu saja, tetapi saya pikir Anda akan ingin menemukan di mana Magento membangun koleksi produk dan kemudian menambahkan filter semacam seperti stackoverflow.com/questions/4803495/…
kevando
3
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena terlalu tua tanpa jawaban yang diterima
SR_Magento

Jawaban:

11

Solusi 1

Ini beralih dari stok produk ke akhir daftar di halaman, tidak di seluruh pagination:

1.Tambahkan pengamat acara:

<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.Observer logic:

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. Setel " Display Out of Stock Products" menjadi " Yes" pada System->Configuration->Inventory.

Solusi 2

Ini keluar dari stok produk hingga akhir daftar di seluruh pagination:

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;
    }

Setel " Display Out of Stock Products" ke " Yes" pada System->Configuration->Inventory.

Logika di atas tidak mempengaruhi fungsi sortir / pagination katalog Anda, hanya memindahkan produk yang tidak terjual sampai akhir.

mageUz
sumber
Apakah Anda yakin ini akan berhasil? Kelihatannya itu tidak akan mempengaruhi pagination, tetapi itu akan memindahkan produk yang kehabisan stok DARI HALAMAN SAAT INI di bagian bawah. Jadi, jika Anda pergi ke halaman berikutnya, Anda mungkin melihat dalam stok produk setelah Anda melihat pada halaman sebelumnya beberapa yang kehabisan stok.
Marius
Ya Ini akan keluar dari stok produk ke akhir daftar pada setiap halaman pagination
mageUz
Saya pikir tugas di sini adalah untuk memindahkan produk yang habis dari persediaan di akhir daftar, bukan halaman. Jadi Anda harus melihat halaman N pertama dengan stok produk dan sekali Anda melihat stok habis, semua yang lain setelah itu kehabisan stok.
Marius
Ya, saya akan mencoba memberikan solusi lain :)
mageUz
1
Solusi 2 berfungsi seperti pesona! Terima kasih banyak untuk ini!
Derik Nel
0

Saya telah menerapkan fungsi ini di situs web saya.

  • Salin Collection.php dari /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php ke / app / code / local / Mage / Katalog / Model / Sumber Daya / Produk /

  • Edit Collection.php, sekitar baris 1570 temukan teks $ storeId = $ this-> getStoreId ();

  • Tambahkan baris berikut langsung di bawah:

        $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');

Siram cache Anda dan produk Anda sekarang akan secara otomatis mengurutkan produk yang ada dalam stok terlebih dahulu dan produk yang habis dari persediaan terakhir.

SR_Magento
sumber
3
Tolong jangan merekomendasikan core override lokal. Akan jauh lebih baik untuk memperluas kelas Mage_Catalog_Model_Resource_Product_Collection.
Reid Blomquist
1
Mungkin Anda dapat menambahkan jawaban Anda sendiri dan menunjukkan kepada kami bagaimana melakukannya?
SR_Magento