Saya harus mendorong produk stok ke akhir daftar katalog
Tolong bimbing saya cara mengatasi masalah ini, atau file itu untuk menggali
sejauh ini saya temukan Toolbar.php, dan mengatasinya
Saya harus mendorong produk stok ke akhir daftar katalog
Tolong bimbing saya cara mengatasi masalah ini, atau file itu untuk menggali
sejauh ini saya temukan Toolbar.php, dan mengatasinya
Jawaban:
Ini beralih dari stok produk ke akhir daftar di halaman, tidak di seluruh pagination:
1.Tambahkan pengamat acara:<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. Setel " Display Out of Stock Products" menjadi " Yes" pada System->Configuration->Inventory.
Ini keluar dari stok produk hingga akhir daftar di seluruh pagination:
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;
}
Setel " Display Out of Stock Products" ke " Yes" pada System->Configuration->Inventory.
Logika di atas tidak mempengaruhi fungsi sortir / pagination katalog Anda, hanya memindahkan produk yang tidak terjual sampai akhir.
Saya telah menerapkan fungsi ini di situs web saya.
Salin Collection.php dari /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php ke / app / code / local / Mage / Katalog / Model / Sumber Daya / Produk /
Edit Collection.php, sekitar baris 1570 temukan teks $ storeId = $ this-> getStoreId ();
Tambahkan baris berikut langsung di bawah:
$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');Siram cache Anda dan produk Anda sekarang akan secara otomatis mengurutkan produk yang ada dalam stok terlebih dahulu dan produk yang habis dari persediaan terakhir.