Di chuyển ra khỏi sản phẩm chứng khoán đến cuối danh sách sản phẩm danh mục [đã đóng]


14

Tôi cần phải đẩy ra khỏi sản phẩm chứng khoán đến cuối danh sách

Vui lòng hướng dẫn tôi cách giải quyết vấn đề này hoặc tập tin đó để đào

cho đến nay tôi đã tìm thấy Toolbar.phpvà làm việc xung quanh nó




1
Tôi chưa quen với magento, vì vậy, câu hỏi của noob, /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Subt/Collection.php - tệp này trống, có ổn không?
Alexandr Sopkov

Tôi không biết rõ về tập tin, nhưng tôi nghĩ bạn sẽ muốn tìm nơi Magento xây dựng bộ sưu tập sản phẩm và sau đó thêm bộ lọc sắp xếp như stackoverflow.com/questions/4804495/
Lỗi

3
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì quá cũ mà không có câu trả lời được chấp nhận
SR_Magento

Câu trả lời:


11

Giải pháp 1

Điều này di chuyển ra khỏi sản phẩm chứng khoán đến cuối danh sách trên trang, không phải tất cả trên phân trang:

1.Thêm quan sát sự kiện:

<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. Đặt " Display Out of Stock Products" thành " Yes" trên System->Configuration->Inventory.

Giải pháp 2

Điều này chuyển ra khỏi các sản phẩm chứng khoán đến cuối danh sách trong tất cả các phân trang:

cấu hình:

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

Quan sát viên.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;
    }

Đặt " Display Out of Stock Products" thành " Yes" trên System->Configuration->Inventory.

Các logic trên không ảnh hưởng đến chức năng sắp xếp / phân trang danh mục của bạn, chỉ di chuyển các sản phẩm không thể bán được đến cuối.


Bạn có chắc chắn điều này sẽ làm việc? Nó không ảnh hưởng đến việc phân trang, nhưng nó sẽ loại bỏ các sản phẩm chứng khoán TỪ TRANG HIỆN TẠI ở phía dưới. Vì vậy, nếu bạn đi đến trang tiếp theo, bạn có thể thấy các sản phẩm chứng khoán sau khi bạn thấy trên trang trước một số sản phẩm hết hàng.
Marius

Có Nó sẽ chuyển ra khỏi các sản phẩm chứng khoán đến cuối danh sách trên mỗi trang phân trang
mageUz

Tôi nghĩ rằng nhiệm vụ ở đây là chuyển ra khỏi các sản phẩm chứng khoán ở cuối danh sách, không phải trang. Vì vậy, bạn sẽ thấy N trang đầu tiên có sản phẩm trong kho và một khi bạn xem hết hàng, tất cả những trang khác xuất hiện sau đó đều hết hàng.
Marius

Có, tôi sẽ cố gắng đưa ra một giải pháp khác :)
mageUz

1
Giải pháp 2 hoạt động như một cơ duyên! Cảm ơn bạn rất nhiều cho việc này!
Derik Nel

0

Tôi đã thực hiện chức năng này trên trang web của mình.

  • Sao chép Collection.php từ /app/code/core/Mage/Catalog/Model/Resource/Sub/Collection.php sang / app / code / local / Mage / Catalog / Model / Resource / Product /

  • Chỉnh sửa Collection.php, khoảng dòng 1570 tìm văn bản $ storeId = $ this-> getStoreId ();

  • Thêm các dòng sau đây trực tiếp dưới đây:

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

Xóa bộ nhớ cache của bạn và các sản phẩm của bạn bây giờ sẽ tự động sắp xếp các sản phẩm trong kho trước và hết các sản phẩm chứng khoán cuối cùng.


3
Xin vui lòng không giới thiệu ghi đè lõi địa phương. Sẽ tốt hơn nhiều nếu mở rộng chính xác lớp Mage_Catalog_Model_Resource_ Productt_Collection.
Reid Blomquist

1
Có lẽ bạn có thể thêm câu trả lời của riêng bạn và chỉ cho chúng tôi làm thế nào để làm điều đó?
SR_Magento
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.