Tôi cần phải đẩy ra khỏi sản phẩm chứng khoán đến cuối danh sách
Vui lòng hướng dẫn tôi cách giải quyết vấn đề này hoặc tập tin đó để đào
cho đến nay tôi đã tìm thấy Toolbar.php
và làm việc xung quanh nó
Tôi cần phải đẩy ra khỏi sản phẩm chứng khoán đến cuối danh sách
Vui lòng hướng dẫn tôi cách giải quyết vấn đề này hoặc tập tin đó để đào
cho đến nay tôi đã tìm thấy Toolbar.php
và làm việc xung quanh nó
Câu trả lời:
Điều này di chuyển ra khỏi sản phẩm chứng khoán đến cuối danh sách trên trang, không phải tất cả trên phân trang:
1.Thêm quan sát sự kiện:<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. Đặt " Display Out of Stock Products
" thành " Yes
" trên System->Configuration->Inventory
.
Điều này chuyển ra khỏi các sản phẩm chứng khoán đến cuối danh sách trong tất cả các phân trang:
cấu hình: <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>
Quan sát viên.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;
}
Đặt " Display Out of Stock Products
" thành " Yes
" trên System->Configuration->Inventory
.
Các logic trên không ảnh hưởng đến chức năng sắp xếp / phân trang danh mục của bạn, chỉ di chuyển các sản phẩm không thể bán được đến cuối.
Tôi đã thực hiện chức năng này trên trang web của mình.
Sao chép Collection.php từ /app/code/core/Mage/Catalog/Model/Resource/Sub/Collection.php sang / app / code / local / Mage / Catalog / Model / Resource / Product /
Chỉnh sửa Collection.php, khoảng dòng 1570 tìm văn bản $ storeId = $ this-> getStoreId ();
Thêm các dòng sau đây trực tiếp dưới đây:
$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');
Xóa bộ nhớ cache của bạn và các sản phẩm của bạn bây giờ sẽ tự động sắp xếp các sản phẩm trong kho trước và hết các sản phẩm chứng khoán cuối cùng.