How to Get All Stores of All Websites in Magento 2
Steps to Get All Stores of All Websites in Magento 2:
Step 1: Go to the below file path
app\code\Vendor\Extension\etc\di.xml
Then add the code as follows
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Store\Block\Switcher" type="Vendor\Extension\Block\Switcher"/>
</config>
Step 2: Now move to the following file path
app\code\Vendor\Extension\Block\Switcher.php
After that add the following code snippet
<?php
namespace Vendor\Extension\Block;
use Magento\Directory\Helper\Data;
use Magento\Store\Model\Group;
use Magento\Store\Model\Store;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Url\Helper\Data as UrlHelper;
/**
* Switcher block
*
* @api
* @since 100.0.2
*/
class Switcher extends \Magento\Store\Block\Switcher
{
/**
* @var bool
*/
protected $_storeInUrl;
/**
* @var \Magento\Framework\Data\Helper\PostHelper
*/
protected $_postDataHelper;
/**
* @var UrlHelper
*/
private $urlHelper;
/**
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper
* @param array $data
* @param UrlHelper $urlHelper
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
array $data = [],
\Magento\Framework\Url\Helper\Data $urlHelper = null
)
{
$this->_postDataHelper = $postDataHelper;
parent::__construct($context, $postDataHelper, $data);
$this->urlHelper = $urlHelper ?: ObjectManager::getInstance()->get(\Magento\Framework\Url\Helper\Data::class);
}
/**
* @return array
*/
public function getRawAllStores()
{
$websites = $this->_storeManager->getWebsites();
$stores = [];
foreach ($websites as $website)
{
$websiteStores = $website->getStores();
foreach ($websiteStores as $store)
{
/* @var $store \Magento\Store\Model\Store */
if (!$store->isActive())
{
// continue;
}
$localeCode = $this->_scopeConfig->getValue(
Data::XML_PATH_DEFAULT_LOCALE,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$store
);
$store->setLocaleCode($localeCode);
$params = ['_query' => []];
if (!$this->isStoreInUrl())
{
$params['_query']['___store'] = $store->getCode();
}
$baseUrl = $store->getUrl('', $params);
$store->setHomeUrl($baseUrl);
$stores[$store->getGroupId()][$store->getId()] = $store;
}
}
return $stores;
}
}
Step 3: Finally, run the below commands
php bin/magento setup:di:compile
php bin/magento cache:flush
Comments
Post a Comment