मुझे कैटलॉग सूची के अंत में स्टॉक उत्पादों से बाहर धकेलने की आवश्यकता है
कृपया मुझे गाइड करें कि इस समस्या को कैसे हल किया जाए, या उस फ़ाइल को खोदने के लिए
अब तक मैंने पाया Toolbar.php
, और इसके आसपास काम कर रहा था
मुझे कैटलॉग सूची के अंत में स्टॉक उत्पादों से बाहर धकेलने की आवश्यकता है
कृपया मुझे गाइड करें कि इस समस्या को कैसे हल किया जाए, या उस फ़ाइल को खोदने के लिए
अब तक मैंने पाया Toolbar.php
, और इसके आसपास काम कर रहा था
जवाबों:
यह पृष्ठ पर सूची के अंत तक स्टॉक उत्पादों से बाहर निकलता है, पृष्ठ पर अंक लगाना नहीं:
1. घटना पर्यवेक्षक:<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. व्यापक तर्क:
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. सेट " Display Out of Stock Products
" से " Yes
" पर System->Configuration->Inventory
।
यह स्टॉक उत्पादों से हटकर सूची के अंत में सभी पेजिंग पर जाता है:
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;
}
" Display Out of Stock Products
" से " Yes
" पर सेट करें System->Configuration->Inventory
।
उपर्युक्त लॉजिक्स आपके कैटलॉग सॉर्ट / पेजिनेशन कार्यक्षमता को प्रभावित नहीं करता है, केवल बिक्री योग्य उत्पादों को अंत तक नहीं ले जाता है।
मैंने अपनी वेबसाइट पर इस कार्यक्षमता को लागू किया है।
कॉपी संग्रह।
संग्रह संपादित करें। एफपीपी , पंक्ति 1570 के आसपास पाठ $ स्टोर खोजें = $ यह-> getStoreId ();
निम्नलिखित पंक्तियों को सीधे जोड़ें:
$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');
अपने कैश और अपने उत्पादों को फ्लश करें अब पहले स्टॉक उत्पादों में स्वचालित रूप से सॉर्ट करें और पिछले स्टॉक उत्पादों से बाहर रहें।