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.php
und umgangen habe
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.php
und umgangen habe
Antworten:
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
.
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.
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.