-
-
Save SpencerRohan/839933a564bbecfc6949af71dd1b1dfe to your computer and use it in GitHub Desktop.
Magento 2 : Create Programmatically Website/Store/StoreGroup
This file contains 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 | |
namespace XX\StoreBuilder\Setup; | |
/** | |
* Class InstallData | |
* @package XX\StoreBuilder\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 ManagerInterface | |
*/ | |
private $eventManager; | |
/** | |
* @var GroupFactory | |
*/ | |
private $groupFactory; | |
/** | |
* @var Group | |
*/ | |
private $groupResourceModel; | |
/** | |
* @var StoreFactory | |
*/ | |
private $storeFactory; | |
/** | |
* @var Store | |
*/ | |
private $storeResourceModel; | |
/** | |
* @var WebsiteFactory | |
*/ | |
private $websiteFactory; | |
/** | |
* @var Website | |
*/ | |
private $websiteResourceModel; | |
/** | |
* 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( | |
Group $groupResourceModel, | |
GroupFactory $groupFactory, | |
ManagerInterface $eventManager, | |
Store $storeResourceModel, | |
StoreFactory $storeFactory, | |
Website $websiteResourceModel, | |
WebsiteFactory $websiteFactory | |
) { | |
$this->eventManager = $eventManager; | |
$this->groupFactory = $groupFactory; | |
$this->groupResourceModel = $groupResourceModel; | |
$this->storeFactory = $storeFactory; | |
$this->storeResourceModel = $storeResourceModel; | |
$this->websiteFactory = $websiteFactory; | |
$this->websiteResourceModel = $websiteResourceModel; | |
} | |
/** | |
* @param ModuleDataSetupInterface $setup | |
* @param ModuleContextInterface $context | |
* @return void | |
*/ | |
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) | |
{ | |
$setup->startSetup(); | |
$default_attributes = [ | |
[ | |
'website_code' => 'sitea', | |
'website_name' => 'Site A', | |
'group_name' => 'Site A Online Store', | |
'store_code' => 'site_a_online_store_view', | |
'store_name' => 'Site A Store View', | |
'is_active' => '1' | |
], | |
[ | |
'website_code' => 'siteb', | |
'website_name' => 'Site B', | |
'group_name' => 'Site B Online Store', | |
'store_code' => 'site_b_online_store_view', | |
'store_name' => 'Site B Store View', | |
'is_active' => '1' | |
], | |
]; | |
foreach ($default_attributes as $attribute) | |
{ | |
/** @var \Magento\Store\Model\Store $store */ | |
$store = $this->storeFactory->create(); | |
$store->load($attribute['store_code']); | |
if(!$store->getId()){ | |
/** @var \Magento\Store\Model\Website $website */ | |
$website = $this->websiteFactory->create(); | |
$website->load($attribute['website_code']); | |
$website = $this->setWebID($website, $attribute); | |
/** @var \Magento\Store\Model\Group $group */ | |
$group = $this->groupFactory->create(); | |
$group->setWebsiteId($website->getWebsiteId()); | |
$group->setName($attribute['group_name']); | |
$this->groupResourceModel->save($group); | |
$group = $this->groupFactory->create(); | |
$group->load($attribute['group_name'], 'name'); | |
$store->setCode($attribute['store_code']); | |
$store->setName($attribute['store_name']); | |
$store->setWebsite($website); | |
$store->setGroupId($group->getId()); | |
$store->setData('is_active', $attribute['is_active']); | |
$this->storeResourceModel->save($store); | |
$this->eventManager->dispatch('store_add', ['store' => $store]); | |
$store = $this->storeFactory->create(); | |
} | |
} | |
$setup->endSetup(); | |
} | |
/** | |
* @param \Magento\Store\Model\Website $website | |
* @param array $attribute | |
* @return \Magento\Store\Model\Website | |
*/ | |
public function setWebID($website, $attribute) | |
{ | |
if(!$website->getId()){ | |
$website->setCode($attribute['website_code']); | |
$website->setName($attribute['website_name']); | |
$this->websiteResourceModel->save($website); | |
} | |
return $website; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I don't know with which Magento version you are working, but from 2.2.6 i notice that $entity->getResource()->save($entity) is deprecated. When i want to save a entity, I use resourceModel and save method with my entity as param.