Last active
June 19, 2024 17:20
-
-
Save 0-Sony/1297fd13e11e9b901fa403a618b6cee5 to your computer and use it in GitHub Desktop.
Magento 2 : Create Programmatically Website/Store/StoreGroup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* This file is part of Namespace for Magento. | |
* | |
* @license All rights reserved | |
* @author Phuong LE <[email protected]> <@> | |
* @category Namespace | |
* @package Namespace_Core | |
* @copyright Copyright (c) 2016 Agence Soon (http://www.agence-soon.fr) | |
*/ | |
namespace Namespace\Core\Setup; | |
use Magento\Framework\Event\ManagerInterface; | |
use Magento\Framework\Setup\InstallDataInterface; | |
use Magento\Framework\Setup\ModuleContextInterface; | |
use Magento\Framework\Setup\ModuleDataSetupInterface; | |
use Magento\Store\Model\GroupFactory; | |
use Magento\Store\Model\ResourceModel\Group; | |
use Magento\Store\Model\ResourceModel\Store; | |
use Magento\Store\Model\ResourceModel\Website; | |
use Magento\Store\Model\StoreFactory; | |
use Magento\Store\Model\WebsiteFactory; | |
class InstallData implements InstallDataInterface | |
{ | |
/** | |
* @var WebsiteFactory | |
*/ | |
private $websiteFactory; | |
/** | |
* @var Website | |
*/ | |
private $websiteResourceModel; | |
/** | |
* @var StoreFactory | |
*/ | |
private $storeFactory; | |
/** | |
* @var GroupFactory | |
*/ | |
private $groupFactory; | |
/** | |
* @var Group | |
*/ | |
private $groupResourceModel; | |
/** | |
* @var Store | |
*/ | |
private $storeResourceModel; | |
/** | |
* @var ManagerInterface | |
*/ | |
private $eventManager; | |
/** | |
* InstallData constructor. | |
* @param WebsiteFactory $websiteFactory | |
* @param Website $websiteResourceModel | |
* @param Store $storeResourceModel | |
* @param Group $groupResourceModel | |
* @param StoreFactory $storeFactory | |
* @param GroupFactory $groupFactory | |
* @param ManagerInterface $eventManager | |
*/ | |
public function __construct( | |
WebsiteFactory $websiteFactory, | |
Website $websiteResourceModel, | |
Store $storeResourceModel, | |
Group $groupResourceModel, | |
StoreFactory $storeFactory, | |
GroupFactory $groupFactory, | |
ManagerInterface $eventManager | |
) { | |
$this->websiteFactory = $websiteFactory; | |
$this->websiteResourceModel = $websiteResourceModel; | |
$this->storeFactory = $storeFactory; | |
$this->groupFactory = $groupFactory; | |
$this->groupResourceModel = $groupResourceModel; | |
$this->storeResourceModel = $storeResourceModel; | |
$this->eventManager = $eventManager; | |
} | |
/** | |
* Installs data for a module | |
* | |
* @param ModuleDataSetupInterface $setup | |
* @param ModuleContextInterface $context | |
* @return void | |
*/ | |
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) | |
{ | |
/** @var \Magento\Store\Model\Website $website */ | |
$website = $this->websiteFactory->create(); | |
$website->load('my_custom_code'); | |
if(!$website->getId()){ | |
$website->setCode('my_custom_code'); | |
$website->setName('My Custom Name'); | |
$website->setDefaultGroupId(3); | |
$this->websiteResourceModel->save($website); | |
} | |
if($website->getId()){ | |
/** @var \Magento\Store\Model\Group $group */ | |
$group = $this->groupFactory->create(); | |
$group->setWebsiteId($website->getWebsiteId()); | |
$group->setName('My Custom Group Name'); | |
$group->setRootCategoryId(2); | |
$group->setDefaultStoreId(3); | |
$this->groupResourceModel->save($group); | |
} | |
/** @var \Magento\Store\Model\Store $store */ | |
$store = $this->storeFactory->create(); | |
$store->load('my_custom_store_code'); | |
if(!$store->getId()){ | |
$group = $this->groupFactory->create(); | |
$group->load('My Custom Group Name', 'name'); | |
$store->setCode('my_custom_store_code'); | |
$store->setName('Mu Custom Store Code'); | |
$store->setWebsite($website); | |
$store->setGroupId($group->getId()); | |
$store->setData('is_active','1'); | |
$this->storeResourceModel->save($store); | |
// Trigger event to insert some data to the sales_sequence_meta table (fix bug place order in checkout) | |
$this->eventManager->dispatch('store_add', ['store' => $store]); | |
} | |
} | |
} |
@ngtuan96lc thanks, I tried and it's working even without event manager.
This piece of code has been created when I worked on Magento 2.0 back in the days :) . Fortunately, you do not need it anymore on the latest versions
Correctly!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This piece of code has been created when I worked on Magento 2.0 back in the days :) . Fortunately, you do not need it anymore on the latest versions