ย้ายออกจากสต็อกผลิตภัณฑ์ไปยังจุดสิ้นสุดของรายการผลิตภัณฑ์แคตตาล็อก [ปิด]


14

ฉันต้องผลักสินค้าออกจากรายการสินค้าจนหมดรายการ

โปรดแนะนำฉันเกี่ยวกับวิธีการแก้ปัญหานี้หรือไฟล์ที่จะขุด

จนถึงตอนนี้ฉันได้พบToolbar.phpและทำงานรอบ ๆ มัน



1
ตรวจสอบออกajit-techhub.blogspot.in/2012/01/…
Pavan Kumar

1
ฉันใหม่กับวีโอไอพีดังนั้นคำถาม noob /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php - ไฟล์นี้ว่างเปล่าใช่ไหม?
Alexandr Sopkov

ฉันไม่ทราบว่าไฟล์อยู่ในมือ แต่ฉันคิดว่าคุณจะต้องการหาที่ 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.Set " Display Out of Stock Products" กับ " Yes" System->Configuration->Inventoryบน

โซลูชันที่ 2

สิ่งนี้จะย้ายออกจากผลิตภัณฑ์สต็อกไปยังจุดสิ้นสุดของรายการภายในทั่วหน้า:

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บน

การเข้าสู่ระบบข้างต้นจะไม่ส่งผลกระทบต่อฟังก์ชั่นการเรียงลำดับ / การแบ่งหน้าแคตตาล็อกของคุณจะไม่สามารถเคลื่อนย้ายผลิตภัณฑ์ที่ขายได้ไปยังจุดสิ้นสุดเท่านั้น


คุณแน่ใจว่าจะใช้งานได้หรือไม่ มันตะเข็บมันจะไม่ส่งผลกระทบต่อการแบ่งหน้า แต่มันจะย้ายออกจากสต็อกสินค้าจากหน้าปัจจุบันที่ด้านล่าง ดังนั้นหากคุณไปที่หน้าถัดไปคุณอาจเห็นในสต็อกสินค้าหลังจากที่คุณเห็นในหน้าก่อนหน้าบางรายการหมด
Marius

ใช่มันจะย้ายออกจากสต็อกสินค้าไปยังจุดสิ้นสุดของรายการในทุกหน้าของการแบ่งหน้า
mageUz

ฉันคิดว่างานที่นี่คือการย้ายผลิตภัณฑ์หมดในตอนท้ายของรายการไม่ใช่หน้าเว็บ ดังนั้นคุณควรเห็นหน้าแรก N ที่มีในสต็อกสินค้าและเมื่อคุณดูหนึ่งในสต็อกอื่น ๆ ทั้งหมดที่มาหลังจากที่หมด
Marius

ใช่ฉันจะพยายามแก้ปัญหาอื่น :)
mageUz

1
โซลูชันที่ 2 ทำงานได้อย่างมีเสน่ห์! ขอบคุณมากสำหรับสิ่งนี้!
Derik Nel

0

ฉันใช้ฟังก์ชันนี้ในเว็บไซต์ของฉัน

  • คัดลอก Collection.php จาก /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php ไปที่ / แอพ / รหัส / ท้องถิ่น / Mage / แคตตาล็อก / รุ่น / ทรัพยากร / สินค้า /

  • แก้ไข Collection.php ประมาณบรรทัด 1570 ค้นหาข้อความ$ storeId = $ this-> 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
Reid Blomquist

1
บางทีคุณสามารถเพิ่มคำตอบของคุณเองและแสดงให้เราเห็นว่าทำอย่างไร?
SR_Magento
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.