Stoktaki ürünleri katalog listesinin sonuna itmem gerekiyor
Lütfen bu sorunu veya bu dosyayı nasıl çözeceğimi bana yönlendirin
şimdiye kadar buldum Toolbar.php
ve üzerinde çalışıyorum
Stoktaki ürünleri katalog listesinin sonuna itmem gerekiyor
Lütfen bu sorunu veya bu dosyayı nasıl çözeceğimi bana yönlendirin
şimdiye kadar buldum Toolbar.php
ve üzerinde çalışıyorum
Yanıtlar:
Bu, stok ürünlerinden sayfa numarasının tamamında değil, sayfa listesinin sonuna taşınır:
1. olay gözlemci ekleyin:<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. gözlemci mantığı:
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.Set " Display Out of Stock Products
" den " Yes
" konulu System->Configuration->Inventory
.
Bu, stok ürünlerinden tüm sayfalandırma içinde listenin sonuna taşınır:
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;
}
Set " Display Out of Stock Products
" den " Yes
" konulu System->Configuration->Inventory
.
Yukarıdaki mantıklar katalog sıralama / sayfalama işlevselliğinizi etkilemez, sadece satılmayan ürünleri sonuna kadar taşır.
Bu işlevselliği web siteme uyguladım.
Collection.php dosyasını /app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php dizininden / app / code / local / Mage / Catalog / Model / Resource / Product / dizinine kopyalayın.
Collection.php'yi düzenleyin , satır 1570 civarında metni bulun $ storeId = $ this-> getStoreId ();
Aşağıdaki satırları doğrudan ekleyin:
$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');
Önbelleğinizi yıkayın ve ürünleriniz artık stoktaki ürünleri otomatik olarak önce ve stokta kalan ürünler otomatik olarak sıralayacaktır.