উত্তর:
এটি করার সবচেয়ে সহজ উপায় হ'ল কেবল Mage_Catalog_Block_Navigation
ব্লকটি পুনর্লিখন করা :
=> পদ্ধতিতে _renderCategoryMenuItemHtml()
আপনি লুপটি প্রতিস্থাপন করতে চান
foreach ($children as $child) {
if ($child->getIsActive()) {
$activeChildren[] = $child;
}
}
=> এর সাথে:
foreach ($children as $child) {
if ($child->getIsActive() && $this->_hasProducts($child->entity_id)) {
$activeChildren[] = $child;
}
}
=> এবং অনুরূপ পদ্ধতিতে renderCategoriesMenuHtml()
কোডটি প্রতিস্থাপন করুন
foreach ($this->getStoreCategories() as $child) {
if ($child->getIsActive()) {
$activeCategories[] = $child;
}
}
=> এর সাথে:
foreach ($this->getStoreCategories() as $child) {
if ($child->getIsActive() && $this->_hasProducts($child->entity_id)) {
$activeCategories[] = $child;
}
}
=> পরিশেষে আমরা আমাদের কোডটিতে যে পদ্ধতিটি ব্যবহার করছিলাম তা যুক্ত করুন:
protected function _hasProducts($category_id) {
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('entity_id')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4);
return ( $products->count() > 0 ) ? true : false;
}
মনে রাখবেন যে পদ্ধতিটি ক্যাটালগ / বিভাগের মডেলটি ব্যবহার করে প্রতিটি বিভাগ পৃথকভাবে পরীক্ষা করে। সুতরাং, আপনার যদি অনেকগুলি বিভাগ থাকে তবে আপনি সম্পাদনা সংক্রান্ত সমস্যাগুলির মধ্যে না চলে কোডটি পুনরায় লিখতে চাইতে পারেন। একটি ছোট স্টোরে আমরা চলছি, এটি দুর্দান্ত কাজ করে।
খালি বিভাগগুলি গোপন করার জন্য কোনও অন্তর্নির্মিত বৈশিষ্ট্য নেই (তবে আপনি ম্যানুয়ালি ইড সক্রিয় = অ্যাডমিন অঞ্চলে প্রতিটি বিভাগের জন্য নং-> ক্যাটালগ-> বিভাগগুলি পরিচালনা করতে পারেন) নির্বাচন করতে পারেন)
জোশ প্রটস্কির ব্লগের একটি দুর্দান্ত পোস্টের একটি লিঙ্ক এখানে দেওয়া হয়েছে , যেখানে তিনি কীভাবে এই উদ্দেশ্যে একটি এক্সটেনশন তৈরি করবেন সে সম্পর্কে ধাপে ধাপে ওয়াকথ্রু লিখেছেন।
শীর্ষ মেনু থেকে খালি বিভাগটি গোপন করতে, নিম্নলিখিতটি করুন:
যান
app/code/core/Mage/Catalog/Block
ফোল্ডার এবং কপিNavigation.php
।
Navigation.php
আপনার স্থানীয় প্যাকেজটিতে ওভাররাইড করুন ।Navigation.php
আপনার প্যাকেজটি খুলুন এবং এই ফাইলটিতে নিম্নলিখিত কোডটি আটকে দিন:
if ($category->getIsActive()) {
$cat = Mage::getModel('catalog/category')->load($category->getId());
$products = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($cat);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($products);
if (count($products) == 0) {
return;
}
}
আমার জন্য যা কাজ করেছে তা হ'ল একটি টেম্পলেট বিভাগের গাছ তৈরি করা এবং একটি শর্ত ফাংশন প্রয়োগ করা যা বিভাগের গাছটিকে রেন্ডার করে:
foreach ($children as $child)
{
if ($child->getIsActive() && $this->_hasProducts($child->entity_id))
{
$activeChildren[] = $child;
}
}
function _hasProducts:
protected function _hasProducts($category_id) {
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('entity_id')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4);
return ( $products->count() > 0 ) ? true : false;
}
আপনি পণ্য ছাড়াই সমস্ত বিভাগ অক্ষম করতে নিম্নলিখিত এসকিএল সম্পাদন করতে পারেন।
UPDATE `catalog_category_entity_int` AS `status`
INNER JOIN `eav_attribute` AS `attr` ON `attr`.`attribute_code` = 'is_active'
AND `attr`.`entity_type_id` = 3
AND `status`.`attribute_id` = `attr`.`attribute_id`
SET `status`.`value` = IF((SELECT COUNT(`index`.`product_id`)
FROM `catalog_category_product_index` AS `index`
WHERE `index`.`category_id` = `status`.`entity_id` GROUP BY `index`.`category_id`) > 0, 1, 0)
WHERE `status`.`store_id` = 0
আরও বিশদ আপনি এখানে জানতে পারেন http://quicktips.ru/all/hide-all-categories-without- প্রোডাক্টগুলি- এবং- শো- বিভাগসমূহ-with-pr/
খালি বিভাগগুলি লুকানোর জন্য আমি যা করেছি তা হ'ল Mage_Catalog_Model_Resource_Category_Tree
load()
ফাংশনটি পুনরায় লেখা । আমি নীচের মত বিভাগের সংগ্রহের সাথে পণ্য সংযোগে যোগদান করতে চাই।
$collection = Mage::getResourceModel('catalog/product_collection');
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
$collection->getSelect()->join(
array('product_category' => Mage::getSingleton('core/resource')->getTableName('catalog/category_product_index')),
'product_category.product_id = e.entity_id',
array('')
);
$collection->getSelect()->where('product_category.category_id = '.$this->_table.'.entity_id');
$select->columns(array('product_count' => $collection->getSelectCountSql()));
$arrNodes = $this->_conn->fetchAll($select);
এই লাইনের আগে এই কোডটি যুক্ত করুন ।
এবং এই শর্তটি সহ এই কোডটি মোড়ানো, এই শ্রেণিটি ফ্রন্টএন্ড এবং ব্যাকএন্ড মডেল থেকেও ডেকে আনা হয়েছে
if(!Mage::getSingleton('admin/session')->isLoggedIn())
আমি অতিরিক্ত ক্ষেত্রের product_count যুক্ত করেছি যাতে প্রকৃত সক্রিয় পণ্য গণনা রয়েছে।
আমি শীর্ষ মেনুতে বিভাগ প্রদর্শন করতে একটি তৃতীয় পক্ষের মডিউল ব্যবহার করছি এবং মেনুটি রেন্ডার হওয়ার পরে আমি পণ্যের গণনার উপর ভিত্তি করে শর্ত রেখেছি।