Перемістіть продукцію на складі до кінця списку товарів у каталозі [закрито]


14

Мені потрібно витіснити продукцію на складі до кінця списку каталогу

Підкажіть, будь ласка, як вирішити цю проблему чи цей файл викопати

поки що я знайшов Toolbar.php, і працюючи навколо цього



1
перевірити це ajit-techhub.blogspot.in/2012/01/…
Pavan Kumar

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.

Рішення 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.

Наведена вище логіка не впливає на функціональність сортування / пагінації каталогу, лише переміщує не продаються продукти до кінця.


Ви впевнені, що це спрацює? Це здається, що це не вплине на пагинацію, але воно перемістить продукцію, що не є на складі, ІЗ СУЧАСНОЇ СТОРІНКИ внизу. Тож якщо ви переходите на наступну сторінку, ви можете побачити товари на складі після того, як ви побачили на попередній сторінці кілька товарів, які не є на складі.
Маріус

Так, вона буде переміщена з
товарних

Я думаю, що завдання тут полягало в тому, щоб перемістити товари, що не продаються, в кінці списку, а не на сторінку. Таким чином, ви повинні побачити перші N сторінок із товарними запасами, і коли ви переглянете товар, який не є на складі, всі інші, що надходять після цього, відсутні у наявності.
Маріус

Так, я спробую дати ще одне рішення :)
mageUz

1
Рішення 2 працює як шарм! Дуже дякую за це!
Дерик Нел

0

Я реалізував цю функціональність на своєму веб-сайті.

  • Скопіюйте Collection.php з /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php в / app / code / local / 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.
Рейд Бломкіст

1
Можливо, ви можете додати власну відповідь і показати нам, як це зробити?
SR_Magento
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.