কোনও সক্রিয় পণ্য ছাড়াই বিভাগগুলি লুকান


22

সক্রিয় পণ্য নেই এমন বিভাগগুলিকে আড়াল করার কোনও উপায় আছে? বা, আরও ভাল, কেবল সক্রিয় পণ্য এবং স্টক রয়েছে এমন বিভাগগুলি দেখান ।


প্রশ্ন এটি একটি ভাল ধারণা কিনা। ব্যবহারকারীরা মেনু পরিবর্তন করলে বিভ্রান্ত হয়।
মিমো

উত্তর:


11

এটি করার সবচেয়ে সহজ উপায় হ'ল কেবল 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;
}

মনে রাখবেন যে পদ্ধতিটি ক্যাটালগ / বিভাগের মডেলটি ব্যবহার করে প্রতিটি বিভাগ পৃথকভাবে পরীক্ষা করে। সুতরাং, আপনার যদি অনেকগুলি বিভাগ থাকে তবে আপনি সম্পাদনা সংক্রান্ত সমস্যাগুলির মধ্যে না চলে কোডটি পুনরায় লিখতে চাইতে পারেন। একটি ছোট স্টোরে আমরা চলছি, এটি দুর্দান্ত কাজ করে।


স্থানীয় ফোল্ডারে বাদ দেওয়া যায় এমন কোনও এক্সটেনশনে এটি কি বাক্স আপ করা সম্ভব? ভবিষ্যতে ম্যাজেন্টো আপডেটগুলিতে কোডটি ওভাররাইট করা হচ্ছে তা নিয়ে চিন্তিত।
MagentoMac

10

খালি বিভাগগুলি গোপন করার জন্য কোনও অন্তর্নির্মিত বৈশিষ্ট্য নেই (তবে আপনি ম্যানুয়ালি ইড সক্রিয় = অ্যাডমিন অঞ্চলে প্রতিটি বিভাগের জন্য নং-> ক্যাটালগ-> বিভাগগুলি পরিচালনা করতে পারেন) নির্বাচন করতে পারেন)

জোশ প্রটস্কির ব্লগের একটি দুর্দান্ত পোস্টের একটি লিঙ্ক এখানে দেওয়া হয়েছে , যেখানে তিনি কীভাবে এই উদ্দেশ্যে একটি এক্সটেনশন তৈরি করবেন সে সম্পর্কে ধাপে ধাপে ওয়াকথ্রু লিখেছেন।


এটি দেখতে দুর্দান্ত লাগছে, তবে যে কোনও কারণেই আমাদের দোকানে কাজ করছে না ... কোনও ধারণা কীভাবে ডিবাগ করবেন? কোনও ত্রুটির বার্তা পাচ্ছে না। একটি টির নির্দেশাবলী অনুসরণ করে, তবে সম্মুখভাগে কোনও পরিবর্তন হয়নি। ইতিমধ্যে অক্ষম করেছেন, তারপরে পুনরায়
সক্ষমযোগ্য

4

আপনি যদি কেবল ক্যাটালগ নেভিগেশন এগুলি আড়াল করতে চান তবে আপনি এই বিভাগে পণ্যগুলির পরিমাণ পরীক্ষা করতে টেমপ্লেটে একটি শর্ত যুক্ত করতে পারেন।


4

হতে পারে এটিও সাহায্য করবে।

আপনার ওয়েবশপের ব্যাকএন্ডে যান।

তারপরে Catalog > Category > Manage Category, আপনার বিভাগটি চয়ন করুন এবং Display settingsট্যাবটি নির্বাচন করুন ।

লেবেলে Display Modeসেট করা যেতে পারে

Show static block only


4

শীর্ষ মেনু থেকে খালি বিভাগটি গোপন করতে, নিম্নলিখিতটি করুন:

যান 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;
    }
}

সেই ফাইলটিতে কোথায়?
Marke

3

আমার জন্য যা কাজ করেছে তা হ'ল একটি টেম্পলেট বিভাগের গাছ তৈরি করা এবং একটি শর্ত ফাংশন প্রয়োগ করা যা বিভাগের গাছটিকে রেন্ডার করে:

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;
}

2

আপনি পণ্য ছাড়াই সমস্ত বিভাগ অক্ষম করতে নিম্নলিখিত এসকিএল সম্পাদন করতে পারেন।

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/


2

খালি বিভাগগুলি লুকানোর জন্য আমি যা করেছি তা হ'ল 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 যুক্ত করেছি যাতে প্রকৃত সক্রিয় পণ্য গণনা রয়েছে।

আমি শীর্ষ মেনুতে বিভাগ প্রদর্শন করতে একটি তৃতীয় পক্ষের মডিউল ব্যবহার করছি এবং মেনুটি রেন্ডার হওয়ার পরে আমি পণ্যের গণনার উপর ভিত্তি করে শর্ত রেখেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.