如何创建系统配置文件system.xml

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文件中,我们添加了两个字段: enabledisplay_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,如果你想查看完整的教程,请点击这里.译者:西帅
####如果觉得本站翻译得内容对您有帮助,又没有时间帮助翻译回馈社区.请打赏我们,您的支持是我们的动力:

####转载说明:非常欢迎转载,但是必须保证文章的完整性并附上原文地址和翻译原文的地址,保证阅读者不会产生歧义.