所述的system.xml是一个配置文件,其用于创建配置字段的Magento 2系统配置。如果您的模块具有管理员需要设置的一些设置,则需要此项。你可以去Store -> Setting -> Configuration
查看它的样子。
创建system.xml
- 第1步:创建System.xml
- 第2步:设置默认值
- 第3步:刷新Magento缓存
- 第4步:从配置中获取价值
第1步:创建System.xml
magento 2系统配置页面按逻辑划分为几个部分:选项卡,部分,组,字段。请检查此图片以了解这一点:
因此,让我们开始为简单的模块Hello World创建一个简单的配置。system.xml位于模块的文件夹中,我们将为我们的供应商“Mageplaza”创建一个新选项卡,这是我们的模块Hello World的一个新部分,一个包含一些简单字段的组:启用模块和文本。etc/adminhtml
文件: app/code/Mageplaza/HelloWorld/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>
<tab id="mageplaza" translate="label" sortOrder="10">
<label>Mageplaza</label>
</tab>
<section id="helloworld" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
<class>separator-top</class>
<label>Hello World</label>
<tab>mageplaza</tab>
<resource>Mageplaza_HelloWorld::helloworld_config</resource>
<group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
<label>General Configuration</label>
<field id="enable" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
<label>Module Enable</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
</field>
<field id="display_text" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
<label>Display Text</label>
<comment>This text will display on the frontend.</comment>
</field>
</group>
</section>
</system>
</config>
检查此代码,您将看到如何创建选项卡,部分,组和字段。我们将找到有关每个元素的更多细节:
- Tab元素可能包含许多部分和一些主要属性和子元素:
- Id属性是此选项卡的标识
- sortOrder属性将定义此选项卡的位置。
- 翻译属性让Magento知道需要翻译的标题
- 标签元素子项是将显示为标签标题的文本。
- Section元素将具有id,sortOrder,translate属性,如Tab元素。其他一些属性(showInDefault,showInWebsite,showInStore)将决定是否在每个范围上显示此元素。您可以在此处更改范围
该部分可能有许多组和一些其他子元素:
Class
:此值将作为此元素的类添加。如果你想要化妆这个元素,你应该这样做。Label
:此元素的文本标题Tab
:这是一个标签ID。此选项卡元素将让Magento知道此部分所属的选项卡。此部分将放在该选项卡下Resource
:定义了admin用户必须具有的ACL规则才能访问此配置。Group
:此元素可能包含许多字段和一些与Sections相同的属性。Fields
:是此页面的主要路径。它将保存我们想要设置的数据。在这个元素中,我们关注type属性。它将定义元素在显示时的方式。它可以是:text,select,file ...在这个例子中,我们创建了两个类型为select和text的字段。对于每种类型,我们将为字段定义子元素,使其按照我们的意愿工作。
例如,对于类型,select/multiselect
您必须定义子元素source_model
。
第2步:设置默认值
create.xml之后的system.xml中的每个字段都没有任何值。当你打电话给他们时,你会收到'null'的结果。因此,对于模块,我们需要设置字段的默认值,您将调用该值而不进行配置,设置值并保存。此默认值将保存在config.xml中,该文件位于etc文件夹中。让我们为这个简单的配置创建它:
文件: app/code/Mageplaza/HelloWorld/etc/config.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<helloworld>
<general>
<enable>1</enable>
<display_text>Hello World</display_text>
</general>
</helloworld>
</default>
</config>
您可以将路径放在<default>
元素中的字段中,为其设置默认值。格式为:
<default>
<section>
<group>
<field>{value}</field>
</group>
</section>
</default>
第3步:刷新Magento缓存
现在,请刷新缓存并查看结果:
请注意,如果您第一次收到错误404页面未找到,只需注销并再次登录即可解决此问题。
第4步:从配置中获取价值
首先,让我们保存值并刷新缓存,然后您可以从数据库中获取保存的值。
在system.xml
,我们添加了2个字段:enable
和display_text
。所以路径应该是:
- 的HelloWorld /普通/启用
- 的HelloWorld /一般/ DISPLAY_TEXT
4.1简单的通话:
$this->scopeConfig->getValue('helloworld/general/enable', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
$this->scopeConfig->getValue('helloworld/general/display_text', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
4.2创建帮助文件(标准)
创建文件:app / code / Mageplaza / HelloWorld / Helper / Data.php
<?php
namespace Mageplaza\HelloWorld\Helper;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Store\Model\ScopeInterface;
class Data extends AbstractHelper
{
const XML_PATH_HELLOWORLD = 'helloworld/';
public function getConfigValue($field, $storeId = null)
{
return $this->scopeConfig->getValue(
$field, ScopeInterface::SCOPE_STORE, $storeId
);
}
public function getGeneralConfig($code, $storeId = null)
{
return $this->getConfigValue(self::XML_PATH_HELLOWORLD .'general/'. $code, $storeId);
}
}
现在,我们尝试在控制器中获取它。
文件:app / code / Mageplaza / HelloWorld / Controller / Index / Config.php
<?php
namespace Mageplaza\HelloWorld\Controller\Index;
class Config extends \Magento\Framework\App\Action\Action
{
protected $helperData;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Mageplaza\HelloWorld\Helper\Data $helperData
)
{
$this->helperData = $helperData;
return parent::__construct($context);
}
public function execute()
{
// TODO: Implement execute() method.
echo $this->helperData->getGeneralConfig('enable');
echo $this->helperData->getGeneralConfig('display_text');
exit();
}
}
请运行php bin/magento cache:clean
以清除缓存并检查结果。