ক্যাটালগ তালিকার শেষে আমার স্টক পণ্যগুলি ধাক্কা দেওয়া দরকার
দয়া করে এই সমস্যাটি কীভাবে সমাধান করবেন, বা ফাইলটি খনন করতে আমাকে গাইড করুন
এখনও অবধি খুঁজে পেয়েছি 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 লাইনের পাঠ্য $ storeId = $ এটি-> 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');
আপনার ক্যাশে ফ্লাশ করুন এবং আপনার পণ্যগুলি প্রথমে স্টক পণ্যগুলিকে স্বয়ংক্রিয়ভাবে প্রথমে এবং শেষের স্টক পণ্যগুলির আউট সারণ করবে।