Magento 2如何创建System.xml配置

所述的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个字段:enabledisplay_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以清除缓存并检查结果。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论