Using below demo we can get multiselect option using system.xml.
For Example, We will get all Customer group of a system and display all the customer group by system.xml in System -> Configuration Section of admin.
Create system.xml file,
Path, app/code/<Vendorname>/<Modulename>/etc/adminhtml/system.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <section id="catalog"> <group id="customer_group" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"> <field id="list" translate="label" type="multiselect" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="0"> <label>Customer Groups</label> <source_model>Vendorname\Modulename\Model\Adminhtml\System\Config\Source\Customer\Group</source_model> <can_be_empty>1</can_be_empty> </field> </group> </section> </system> </config>
You need to get the collection of all customer group using a Model file. Create Model file in your module. You can define your model php file using source_model tag in system.xml file.
Create Group.php file,
Path, app/code/<Vendorname>/<Modulename>/Model/Adminhtml/System/Config/Source/Customer/Group.php
<?php namespace Vendorname\Modulename\Model\Adminhtml\System\Config\Source\Customer; class Group implements \Magento\Framework\Option\ArrayInterface { public function __construct(\Magento\Customer\Model\ResourceModel\Group\CollectionFactory $groupCollectionFactory) { $this->_groupCollectionFactory = $groupCollectionFactory; } /** * @return array */ public function toOptionArray() { if (!$this->_options) { $this->_options = $this->_groupCollectionFactory->create()->loadData()->toOptionArray(); } return $this->_options; } }
Clear Cache using php bin/magento cache:flush
Now You can get the list of customer group in your section with multi-select option.
If you want to get the list of all selected option in PHP file,
<?php namespace Vendorname\Modulename\Helper; class Data extends \Magento\Framework\App\Helper\AbstractHelper { public function __construct( \Magento\Framework\App\Helper\Context $context ) { $this->scopeConfig = $context->getScopeConfig(); parent::__construct($context); } /** * Get Customer group selected list */ public function getCustomerGroupList() { $list = $this->scopeConfig->getValue("catalog/customer_group/list", \Magento\Store\Model\ScopeInterface::SCOPE_STORE); return $list !== null ? explode(',', $list) : []; }
Using the above way you can list of all customer group selected in a Configuration section. The result will be a value of all selected customer group with comma separated.