CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

18 May, 2022

How to Import Categories in Magento 2 Programmatically

 Programing Coderfunda     May 18, 2022     Magento 2     No comments   

 

Magento 2: Import a category with its subcategories programmatically


Categories are essential for creating an efficient catalog and customer navigation so that users can easily find the products they want on your website.

Each product should be assigned to at least one category. Categories are a helpful way to sort and arrange your products. The diagram below represents the structure of the category.

Magento 2 categories with subcategories

The Magento 2 Import/Export function is one of the best resolutions for all stores to simplify numerous tasks in the manual back-end. These features become more essential and useful for Magento merchants.

New call-to-action

Does Default Magento 2 Open Source Support Import Categories?

The answer is definitely, no. In default Magento 2, the admin creates categories one by one, complete with the related data in each category. In the case of migrating to Magento 2, or when updating or moving to a new website, manually creating categories would be such a time-consuming work that not every business would tolerate it.

The below script helps you to import each category with its subcategories simultaneously without the compulsory need of the parent category ID. Instead of that, we can use the parent category name.

Create a custom module as shown in the file structure below.

Note: Please take a backup of your data and check with your technical developer before running the code.

Magento 2 categories with subcategories

Step 1: Create 

app/code/DCKAP/CategoryImport/view/frontend/layout/categoryimport_index_index.xml

	
		
		
			
		
	

Step 2: Create a form to import a CSV.

app/code/DCKAP/CategoryImport/view/frontend/templates/categoryimport.phtml

CSV File:

 

Step 3: Create a controller to read and import the CSV.

app/code/DCKAP/CategoryImport/Controller/Index/Index.php

_pageFactory=$pageFactory;
		$this->_categoryFactory=$categoryFactory;
		$this->_category=$category;
		$this->_repository=$repository;
		$this->csv=$csv;
		return parent: :__construct($context);
	}
	public function execute() {
		$post=$this->getRequest()->getFiles();
		if($post) {
			if(isset($post['file_upload']['tmp_name'])) {
				$arrResult=$this->csv->getData($post['file_upload']['tmp_name']);
				foreach ($arrResult as $key=> $value) {
					if ($key > 0) {
						// to skip the 1st row i.e title
						$parentid=2;
						if(is_string($value[1])) {
							$categoryTitle=$value[1]; // Category Name
							$collection=$this->_categoryFactory->create()->getCollection()->addFieldToFilter('name', ['in'=> $categoryTitle]);
							if ($collection->getSize()) {
								$parentid=$collection->getFirstItem()->getId();
							}
						}
						else if(is_int(($value[1]))) $parentid=$value[1];
						//echo $parentid."
";//For reference
						$data=[ 'data'=>[ "parent_id"=>$parentid,
						'name'=>$value[2],
						"is_active"=>true,
						"position"=>10,
						"include_in_menu"=>true,
						]];
						$checkCategory=$this->_categoryFactory->create()->getCollection()->addFieldToFilter('name', ['in'=> $value[2]])->addFieldToFilter('parent_id', ['in'=> $parentid]);
						if( !$checkCategory->getData()) {
							$category=$this->_categoryFactory->create($data);
							$result=$this->_repository->save($category);
						}
					}
					$this->messageManager->addSuccessMessage('Category Imported Successfully');
				}
			}
		}
		$this->_view->loadLayout();
		$this->_view->renderLayout();
	}
}

Run this module:

http://localhost/magento/categoryimport/

Magento 2 categories with subcategories

The CSV format must be as shown below.

Click here to get a sample CSV.

In this CSV, your header will be what you want and the first column should be a serial number. The second column must be either a parent/root category ID or name, and the third column must be the name of the category.

************************ Import CSV File ************************

Sample CSV Format

S.NoParent Category ID/NameCategory
12Mobile
2MobileSamsung
3MobileOppo
4MobileVivo
5SamsungSamsung J Pro
6SamsungSamsung a 10
7OppoOppo Youth
8OppoOppo k1
9VivoVivo v5 plus
10VivoVivo v9

And finally, you can now simultaneously import each category with its subcategories. If you found this blog helpful, then please do let us know if you have any queries.

  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Generate Migrations from an Existing Database With the Migration Generator Package
    Laravel Migration Generator Migration Generator for Laravel is a package by Bennett Treptow to generate migrations from existing database ...
  • 'Ramayana' to have 'Baahubali'-style cliffhanger ending
    image/jpeg https://timesofindia.indiatimes.com/entertainment/hindi/bollywood/news/ramayana-to-end-on-baahubali-style-cliffhanger-director-ni...
  • How to get value of selected option in vue js
      In Vue JS, we will learn how to get text of selected option vue js on change event. i will give you simple example of get the text of the ...
  • Rule::array() and whereJsonOverlaps() for MySQL in Laravel 11.7
    --- This week, the Laravel team released v11.7, with a Rule::array() validation method, a whereJsonOverlaps() method for MySQL, a Slack...
  • Laravel Razorpay Integration | Payment gateway integration Laravel in 30 mins | Laravel Razorpay
    1 Integration of Razorpay with Laravel. In this tutorial, I have taught how to integrate payment gateway with laravel with mini-project. If...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • ►  2026 (109)
    • ►  07/26 - 08/02 (108)
    • ►  06/28 - 07/05 (1)
  • ►  2025 (4)
    • ►  07/06 - 07/13 (2)
    • ►  06/29 - 07/06 (2)
  • ►  2024 (486)
    • ►  09/15 - 09/22 (30)
    • ►  09/08 - 09/15 (35)
    • ►  09/01 - 09/08 (35)
    • ►  08/11 - 08/18 (2)
    • ►  08/04 - 08/11 (33)
    • ►  07/28 - 08/04 (30)
    • ►  07/07 - 07/14 (11)
    • ►  06/30 - 07/07 (35)
    • ►  06/23 - 06/30 (5)
    • ►  06/02 - 06/09 (31)
    • ►  05/26 - 06/02 (20)
    • ►  05/05 - 05/12 (29)
    • ►  04/28 - 05/05 (26)
    • ►  04/07 - 04/14 (10)
    • ►  03/31 - 04/07 (34)
    • ►  03/24 - 03/31 (10)
    • ►  03/03 - 03/10 (35)
    • ►  02/25 - 03/03 (15)
    • ►  02/04 - 02/11 (22)
    • ►  01/28 - 02/04 (30)
    • ►  01/07 - 01/14 (8)
  • ►  2023 (484)
    • ►  12/31 - 01/07 (35)
    • ►  12/24 - 12/31 (10)
    • ►  12/03 - 12/10 (33)
    • ►  11/26 - 12/03 (20)
    • ►  11/05 - 11/12 (35)
    • ►  10/29 - 11/05 (20)
    • ►  10/22 - 10/29 (9)
    • ►  10/15 - 10/22 (7)
    • ►  10/08 - 10/15 (9)
    • ►  10/01 - 10/08 (10)
    • ►  09/24 - 10/01 (9)
    • ►  09/17 - 09/24 (9)
    • ►  09/10 - 09/17 (7)
    • ►  09/03 - 09/10 (9)
    • ►  08/27 - 09/03 (9)
    • ►  08/20 - 08/27 (8)
    • ►  08/13 - 08/20 (8)
    • ►  08/06 - 08/13 (8)
    • ►  07/30 - 08/06 (8)
    • ►  07/23 - 07/30 (7)
    • ►  07/16 - 07/23 (8)
    • ►  07/09 - 07/16 (7)
    • ►  07/02 - 07/09 (8)
    • ►  06/25 - 07/02 (7)
    • ►  06/18 - 06/25 (7)
    • ►  06/11 - 06/18 (7)
    • ►  06/04 - 06/11 (11)
    • ►  05/28 - 06/04 (7)
    • ►  05/21 - 05/28 (8)
    • ►  05/14 - 05/21 (11)
    • ►  05/07 - 05/14 (7)
    • ►  04/30 - 05/07 (7)
    • ►  04/23 - 04/30 (8)
    • ►  04/16 - 04/23 (9)
    • ►  04/09 - 04/16 (7)
    • ►  04/02 - 04/09 (4)
    • ►  03/26 - 04/02 (21)
    • ►  03/19 - 03/26 (2)
    • ►  03/12 - 03/19 (9)
    • ►  03/05 - 03/12 (26)
    • ►  02/26 - 03/05 (25)
    • ►  01/15 - 01/22 (7)
    • ►  01/08 - 01/15 (1)
  • ▼  2022 (1037)
    • ►  12/11 - 12/18 (13)
    • ►  12/04 - 12/11 (1)
    • ►  11/27 - 12/04 (40)
    • ►  11/06 - 11/13 (1)
    • ►  10/16 - 10/23 (13)
    • ►  09/04 - 09/11 (5)
    • ►  08/21 - 08/28 (24)
    • ►  08/14 - 08/21 (24)
    • ►  07/03 - 07/10 (9)
    • ►  06/19 - 06/26 (3)
    • ►  05/29 - 06/05 (3)
    • ►  05/22 - 05/29 (3)
    • ▼  05/15 - 05/22 (109)
      • Signed Route In Larave 9
      • Laravel Backpack - File upload is not triggering m...
      • 404 Not found in Laravel when I try to make edit a...
      • Laravel 9 Localization got error Missing parameter...
      • Making ViewMenuComposer
      • SQLSTATE[42S22]: Column not found: 1054 Unknown co...
      • SQLSTATE[42S02]: Base table or view not found: 114...
      • Get current logged in user's user role from a lara...
      • Laravel time Validation
      • Laravel Nova 4 conditionally show field on preview
      • Compare two columns from two related tables using ...
      • Method Illuminate\Auth\SessionGuard::users does no...
      • Custom rule for validation laravel
      • select multiselect values from ajax resonse after ...
      • Compile Error: Cannot use positional argument afte...
      • Laravel 9 - CORS is not working (Access to XMLHttp...
      • Assigning a id+index value to a form field for man...
      • Make a file visible at view but not downloadable [...
      • Laravel- json_decode returns array but cannot echo...
      • Subdomain for Laravel Rest API not working correct...
      • Vuejs Laravel always returns validation messages i...
      • Pass dynamic controller in route in laravel
      • Laravel returns request content with response
      • Php artisan make:auth not defined in Laravel 9
      • Laravel 9 Getting error Upload Form Submit to Data...
      • Laravel Breeze API login controller errors
      • Storing attributes of a multiple models, to single...
      • Assign a default value for NULL variables properly...
      • Laravel 9 - ERROR: The body of "Symfony\Component\...
      • Laravel Desktop Notifier
      • Magento 2 Add Products To Category Programmatically
      • How to import products in category by programmatic...
      • How to Import Categories in Magento 2 Programmatic...
      • Create a function that can be used by other functions
      • File encryption in Laravel and sudo users
      • Laravel Custom Facade New Instance
      • cannot upload mp4 file manager in laravel 8 error ...
      • vlaue of checkbox to database in vue laravel
      • Resizing images of related model laravel-admin
      • Laravel excel combining multiple value into 1 cell
      • the search button is not working after I deploy
      • Send variable to terminate in middleware
      • Response_type=token in auth0 custom social login
      • Why notification event is not triggered in pusher?
      • multiple orderby sorting with pagination in larave...
      • Converting Sql query to Laravel 8 Query Showing error
      • Laravel 9 Undefined class 'MainController' once un...
      • Laravel looks to insert records in a table that do...
      • Laravel 9 on PHP 8.1 slow responses - out of the box
      • No alive nodes. All the 1 nodes seem to be down
      • How to make Laravel's dependency injection work in...
      • Laravel 9 mutators colon
      • Laravel 9: Custom login
      • Laravel 9 | Mailgun saying "Password is not set"
      • how to generate short link in laravel framework an...
      • Getting an average rating of a TV show using avera...
      • how to create favourite system in laravel with rel...
      • Laravel says application is in production but APP_...
      • Laravel validation rule for one item which can be ...
      • Unable to send file using laravel http client to t...
      • Laravel maintenance mode refresh and render parameter
      • Pusher receive the data but not in the Echo callba...
      • how to connect SQL server with php web application...
      • Laravel show my Posts, Followed user posts and Sha...
      • Show page numbers as navigation in Laravel pagination
      • Laravel collection not saving added data
      • Can't reach css files laravel-9
      • Problems in Laravel when logging in
      • How To Access A Column In M-M Relationship Table I...
      • Laravel - Is it possible to validate a get wildcar...
      • Laravel Composer could not install tymon/jwt-auth
      • redirect from the controller, depending on the rol...
      • How to get query log of events run by admins
      • Carbon generated datetime not stored correctly int...
      • Enters the if statement where it shouldn't php Lar...
      • How to print route lists in Blade
      • Can't send mail with Lumen framework and no error ...
      • Would like a php version of php 8.1 for a specific...
      • Laravel 9/Passport not working in production
      • limit the view depending on the values - Laravel -...
      • Extract Untranslated Strings from Laravel Projects
      • In Laravel 9, how to insert data into a database [...
      • Can't send mail with Lumen framework and no error ...
      • Problem at startup laravel9 system after git clone
      • I can't concatenate correctly to the source of the...
      • How to create a multi language website with Laravel 9
      • Laravel 9: change table and fields for authenticat...
      • Would like a php version of php 8.1 for a specific...
      • Laravel 9 - Passport custom api for Authorization
      • After Login/Signup, Laravel returns "419 PAGE EXPI...
      • Downloading 1000s of images using php , how to byp...
      • Order payment status check failing when waiting fo...
      • What would be a proper way to handle tokens in mon...
      • Limit of log line written to Apache Errorlog from ...
      • Filter WooCommerce products with post__in and addi...
      • WooCommerce shop loop random array function not sa...
      • Adding hreflang tags automatically in WordPress su...
      • httpful POST request: get raw HTTP message
      • How does this Facade works
      • Socialite Implementation for Laravel Jetstream
      • Bandwagon is a Social Proof Package for Laravel
      • Snappy Image Wrapper for Laravel
      • Organize Laravel Applications With Actions
      • Squire: Static Eloquent Model Library
      • OpenAPI Initializer
      • Simplifying Service Providers With Laravel Package...
      • Use Basecamp’s Hotwire in Laravel
      • Laravel Console Wizard
      • CLI to Check For PHP Security Vulnerabilities
    • ►  05/01 - 05/08 (7)
    • ►  04/24 - 05/01 (7)
    • ►  04/17 - 04/24 (64)
    • ►  04/10 - 04/17 (115)
    • ►  04/03 - 04/10 (73)
    • ►  03/27 - 04/03 (77)
    • ►  03/13 - 03/20 (2)
    • ►  03/06 - 03/13 (25)
    • ►  02/27 - 03/06 (18)
    • ►  02/20 - 02/27 (153)
    • ►  02/13 - 02/20 (187)
    • ►  01/30 - 02/06 (45)
    • ►  01/23 - 01/30 (15)
    • ►  01/16 - 01/23 (1)
  • ►  2021 (412)
    • ►  10/24 - 10/31 (2)
    • ►  07/25 - 08/01 (1)
    • ►  07/11 - 07/18 (10)
    • ►  06/13 - 06/20 (29)
    • ►  05/23 - 05/30 (1)
    • ►  05/02 - 05/09 (24)
    • ►  04/25 - 05/02 (24)
    • ►  04/18 - 04/25 (112)
    • ►  04/11 - 04/18 (1)
    • ►  04/04 - 04/11 (6)
    • ►  03/28 - 04/04 (86)
    • ►  03/21 - 03/28 (19)
    • ►  03/14 - 03/21 (2)
    • ►  03/07 - 03/14 (10)
    • ►  02/28 - 03/07 (1)
    • ►  02/21 - 02/28 (29)
    • ►  02/14 - 02/21 (13)
    • ►  02/07 - 02/14 (12)
    • ►  01/31 - 02/07 (6)
    • ►  01/17 - 01/24 (2)
    • ►  01/10 - 01/17 (8)
    • ►  01/03 - 01/10 (14)
  • ►  2020 (376)
    • ►  12/27 - 01/03 (37)
    • ►  12/20 - 12/27 (92)
    • ►  12/13 - 12/20 (29)
    • ►  12/06 - 12/13 (37)
    • ►  11/29 - 12/06 (4)
    • ►  11/15 - 11/22 (14)
    • ►  11/08 - 11/15 (8)
    • ►  11/01 - 11/08 (2)
    • ►  10/18 - 10/25 (14)
    • ►  10/11 - 10/18 (16)
    • ►  10/04 - 10/11 (10)
    • ►  09/20 - 09/27 (10)
    • ►  09/06 - 09/13 (19)
    • ►  08/30 - 09/06 (26)
    • ►  08/23 - 08/30 (4)
    • ►  08/16 - 08/23 (2)
    • ►  07/12 - 07/19 (48)
    • ►  05/17 - 05/24 (2)
    • ►  01/05 - 01/12 (2)
  • ►  2019 (74)
    • ►  07/07 - 07/14 (6)
    • ►  06/16 - 06/23 (6)
    • ►  02/10 - 02/17 (17)
    • ►  01/13 - 01/20 (37)
    • ►  01/06 - 01/13 (8)
  • ►  2018 (376)
    • ►  12/30 - 01/06 (24)
    • ►  12/16 - 12/23 (8)
    • ►  12/09 - 12/16 (98)
    • ►  12/02 - 12/09 (16)
    • ►  11/18 - 11/25 (36)
    • ►  11/04 - 11/11 (18)
    • ►  10/28 - 11/04 (10)
    • ►  10/21 - 10/28 (26)
    • ►  10/14 - 10/21 (52)
    • ►  10/07 - 10/14 (4)
    • ►  09/30 - 10/07 (2)
    • ►  09/23 - 09/30 (68)
    • ►  09/16 - 09/23 (4)
    • ►  09/09 - 09/16 (4)
    • ►  08/26 - 09/02 (6)

Data Publish News

Loading...

Al Jazeera – Breaking News, World News and Video from Al Jazeera

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda