system.xml是一个配置文件,用于在Magento 2系统配置中创建配置字段。
如果你的模块有一些管理员需要的设置,你就需要配置这个。你可以去 Store → Setting → Configuration来检查它的样子。
##创建system.xml步骤
- Step 1: 创建 System.xml
- Step 2: 设置默认值
- Step 3: 刷新 Magento 缓存
- Step 4: 获取系统配置的值
Step 1: 创建 System.xml
magento 2系统配置页面在逻辑上分为几个部分: 选项卡(Tab)、部分(Sections)、组(Groups)、字段(Fields)。请查看这些图片,以了解这个:
因此,让我们开始为简单的Hello World模块创建一个简单的配置。这个 system.xml 位于模块的 etc/adminhtml文件夹中,我们将为我们的模块 “Magentochina” 创建一个新选项卡,这是我们Hello World模块的一个新部分,它包含一些简单的字段:激活模块和文本。
文件:
app/code/Magento/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="magentochina" translate="label" sortOrder="10">
<label>Magentochina</label>
</tab>
<section id="helloworld" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
<class>separator-top</class>
<label>Hello World</label>
<tab>magentochina</tab>
<resource>Magentochina_HelloWorld::hello_configuration</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>这个值会在前台显示.</comment>
</field>
</group>
</section>
</system>
</config>
检查这段代码,您将看到如何创建一个选项卡、节、组和字段。我们会发现更多关于每个元素的细节:
- 选项卡元素可能有很多部分和一些主要属性和子元素:
- Id属性是该选项卡的标识符
- sortOrder属性将定义该选项卡的位置。
- 翻译(Translate)属性让Magento知道哪个标题需要翻译
- 标签元素child是将显示为选项卡标题的文本。
- Section元素将有id、sortOrder、转换属性,如Tab元素。其他一些属性(showInDefault,showInWebsite,showInStore)将决定这个元素将在每个范围内显示。您可以在这里更改范围
该部分(section )可能有许多组和其他子元素:
- Class: 这个值将被添加到这个元素的类中。如果你想构造这个元素,你就应该这样做。
- Label: 该元素的文本标题
- Tab: 标签的id。这个标签元素会让Magento知道这个部分属于哪个选项卡。这部分将被放在那个标签下
- Resource: 定义管理用户必须拥有的ACL规则,以访问该配置。
- Group: 这个元素可能有多个字段和一些与节相同的属性。
- Fields: 是这一页的主要路径。它将保存我们想要设置的数据。在这个元素中,我们关注type属性。它将定义元素是如何显示的。它可以是:文本、选择文件…在这个例子中,我们创建2字段类型选择和文本。对于每一种类型,我们将定义子元素,使其能够按照我们的需要进行工作。
###Step 2: 设置默认值
每个system.xml文件中的字段。在创建后没有任何值。当你调用它们时,你将得到“null”的结果。因此,对于模块,我们需要为字段设置默认值,您将调用该字段的值,而无需配置、设置值并保存它。这个默认值将被保存在config.xml中,该文件位于模块etc文件夹中。让我们为这个简单的配置创建它:
文件:
app/code/Magentochina/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>
<hello>
<general>
<enable>1</enable>
<display_text>Hello World</display_text>
</general>
</hello>
</default>
</config>
您可以将路径放到 元素的字段中,以设置它的值默认值。格式是:
<default>
<section>
<group>
<field>{value}</field>
</group>
</section>
</default>
###Step 3: 刷新 Magento 缓存
当刷新缓存之后,您将看到:
####请注意,如果您可能第一次刷新页面会看到404页面,只需注销并重新登录,就可以解决这个问题。
Step 4: 获取系统配置的值
首先,让我们保存值和刷新缓存,然后可以从数据库中获得保存的值。
在system.xml文件中,我们添加了两个字段: enable 和 display_text. 所以路径应该是:
- helloworld/general/enable
- helloworld/general/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 标准调用(Helper):
创建Helper文件:
Magentochina/HelloWorld/Helper/Data.php
内容:
<?php
namespace Magentochina\HelloWorld\Helper;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\App\Helper\Context;
use Magento\Store\Model\ScopeInterface;
class Data extends AbstractHelper
{
protected $storeManager;
protected $objectManager;
const XML_PATH_HELLOWORLD = 'helloworld/';
public function __construct(Context $context,
ObjectManagerInterface $objectManager,
StoreManagerInterface $storeManager
) {
$this->objectManager = $objectManager;
$this->storeManager = $storeManager;
parent::__construct($context);
}
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 . $code, $storeId);
}
}
现在我们这样调用:
$helper = $this->objectManager->create('Magentochina\HelloWorld\Helper\Data');
echo $helper->getGeneralConfig('enable');
echo $helper->getGeneralConfig('display_text');
####本教程翻译自mageplaza,如果你想查看完整的教程,请点击这里.译者:西帅
####如果觉得本站翻译得内容对您有帮助,又没有时间帮助翻译回馈社区.请打赏我们,您的支持是我们的动力: