Nicht mehr lieferbare Produkte an das Ende der Katalogproduktliste verschieben [geschlossen]

14

Ich muss nicht mehr lieferbare Produkte an das Ende der Katalogliste verschieben

Bitte führen Sie mich, wie Sie dieses Problem lösen oder die Datei zu graben

Soweit ich es gefunden Toolbar.phpund umgangen habe

Alexandr Sopkov
quelle
1
check it out ajit-techhub.blogspot.in/2012/01/…
Pavan Kumar
1
Ich bin neu in Magento, also keine Frage, /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php - diese Datei ist leer, ist es in Ordnung?
Alexandr Sopkov
Ich kenne die Datei nicht genau, aber ich denke, Sie möchten herausfinden, wo Magento die Produktkollektion erstellt, und dann einen Sortierfilter
kevando
3
Ich
stimme dafür,

Antworten:

11

Lösung 1

Dies verschiebt nicht mehr vorrätige Produkte an das Ende der Liste auf der Seite, nicht in der gesamten Paginierung:

1.Ereignisbeobachter hinzufügen:

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

Logik 2.Observer:

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.Stellen Sie " Display Out of Stock Products" auf " Yes" ein System->Configuration->Inventory.

Lösung 2

Dies verschiebt nicht mehr auf Lager befindliche Produkte innerhalb der gesamten Paginierung an das Ende der Liste:

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

Stellen Sie " Display Out of Stock Products" auf " Yes" ein System->Configuration->Inventory.

Die obigen Logiken wirken sich nicht auf die Sortier- / Paginierungsfunktionalität Ihres Katalogs aus, sondern verschieben nur nicht verkaufsfähige Produkte zum Ende.

mageUz
quelle
Sind Sie sicher, dass dies funktionieren wird? Es scheint, dass es die Paginierung nicht beeinflusst, aber es verschiebt die nicht vorrätigen Produkte von der aktuellen Seite unten. Wenn Sie also zur nächsten Seite gehen, sehen Sie möglicherweise Produkte auf Lager, nachdem Sie auf der vorherigen Seite einige nicht auf Lager gesehen haben.
Marius
Ja, es werden nicht mehr auf Lager befindliche Produkte auf jeder Seite der Paginierung an das Ende der Liste
verschoben
Ich denke, die Aufgabe hier war es, die nicht mehr vorrätigen Produkte am Ende der Liste zu verschieben, nicht die Seite. Sie sollten also die ersten N Seiten mit vorrätigen Produkten sehen und sobald Sie eine nicht vorrätige Seite ansehen, sind alle anderen, die danach kommen, nicht vorrätig.
Marius
Ja, ich werde versuchen, eine andere Lösung zu geben :)
mageUz
1
Lösung 2 wirkt wie ein Zauber! Vielen Dank dafür!
Derik Nel
0

Ich habe diese Funktionalität auf meiner Website implementiert.

  • Kopiere Collection.php von /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php nach / app / code / local / Mage / Catalog / Model / Resource / Product /

  • Editiere Collection.php, um Zeile 1570 finde Text $ storeId = $ this-> getStoreId ();

  • Fügen Sie die folgenden Zeilen direkt unten hinzu:

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

Leeren Sie Ihren Cache und Ihre Produkte sortieren nun automatisch zuerst die auf Lager befindlichen Produkte und zuletzt die nicht auf Lager befindlichen Produkte.

SR_Magento
quelle
3
Bitte empfehlen Sie keine lokalen Core-Overrides. Besser wäre es, die Klasse Mage_Catalog_Model_Resource_Product_Collection ordnungsgemäß zu erweitern.
Reid Blomquist
1
Vielleicht können Sie Ihre eigene Antwort hinzufügen und uns zeigen, wie das geht?
SR_Magento