Magento 2: Значения по умолчанию для конфигурации `system.xml`

24

В Magento 1 было возможно

  1. Конфигурирование пользовательского интерфейса для раздела «Конфигурация системы» в etc/system.xmlфайлах

  2. Установите значения по умолчанию для этих полей в etc/config.xmlфайлах

За кулисами Magento будет загружать данные core_config_data, и если ничего не будет установлено, по умолчанию будут значения, установленные глобально в etc/config.xml. (упрощенная версия - это немного сложнее, чем это )

Можно ли сделать то же самое в Magento 2? Я знаю, что можно настроить элементы пользовательского интерфейса с помощью system.xml- но можно ли установить значения по умолчанию для этих параметров? Если да, где или как эти значения должны быть настроены?

Алан Сторм
источник
Я разрабатываю расширение, в котором в хранилище ADMIN >> Конфигурация настройки моего расширения я хочу поместить перетаскиваемый и сортируемый список атрибутов и, следовательно, мне нужно установить пользовательский шаблон для этого конкретного поля, поэтому есть ли способ, которым я могу поместить собственный шаблонный файл phtml внутри system.xml?
Йогеш Триведи

Ответы:

42

да, Magento 2 по-прежнему позволяет вам определять значения по умолчанию в файле конфигурации. Пространство имен \ имя_модуля \ и т.д. \ 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>
            <sectionname>
                <groupname>
                    <fieldid>1</fieldid>
                </groupname>
            </sectionname>
        </default>
    </config>

Конфигурация системы 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="namespace_tab" translate="label" sortOrder="1">
                <label>COnfig Title</label>
            </tab>
            <section id="sectionname" translate="label" sortOrder="1" showInDefault="1" 
    showInWebsite="1" showInStore="1">
                <label>Some Title</label>
                <tab>namespace_tab</tab>
                <resource>Namespace_Modulename::system_config</resource>
                <group id="groupname" translate="label" type="text" sortOrder="1" showInDefault="1" 
    showInWebsite="1" showInStore="1">
                    <label>Some Configuration</label>
                    <field id="fieldid" translate="label" type="select" sortOrder="1" 
    showInDefault="1" showInWebsite="1" showInStore="1">
                        <label>Enable in frontend</label>
                        <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                    </field>
                 </group>   
            </section>
        </system>
    </config>
Эйрик
источник
1
Обратите внимание, что sectionname, groupname и fieldid все соотносятся с идентификатором тега каждого раздела.
Эйрик
как мы можем получить это значение по умолчанию в .php файле
Anand Ontigeri
1
@AnandOntigeri use $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );Где $this->scopeConfigдолжен быть создан экземпляр в методе класса __construct (). \Magento\Framework\Cache\ConfigInterface $scopeConfig
Василий Бурлаку
Можно ли получить значения по умолчанию вместо настроенных значений? Комментарий Василия дает текущее значение, но я хочу сравнить текущую конфигурацию сайта со значениями по умолчанию (и, если возможно, сбросить его). Можно ли это сделать без загрузки и чтения config.xmlвручную?
Жак
@JaccoAmersfoort Значения по умолчанию доступны только до тех пор, пока они не будут перезаписаны. Magento 2 хранит системные значения в таблице core_config_data и не сохраняет значения по умолчанию отдельно от текущего значения.
Эйрик
7

Magento2Позволяет вам установить значение по умолчанию так же, как Magento1. Когда вы смотрите на контактный модуль от Magento2,

system.xml для контактного модуля

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="contact" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
            <label>Contacts</label>
            <tab>general</tab>
            <resource>Magento_Contact::contact</resource>
            <group id="contact" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>Contact Us</label>
                <field id="enabled" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Enable Contact Us</label>
                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                    <backend_model>Magento\Contact\Model\System\Config\Backend\Links</backend_model>
                </field>
            </group>
            <group id="email" translate="label" type="text" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>Email Options</label>
                <field id="recipient_email" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Send Emails To</label>
                    <validate>validate-email</validate>
                </field>
                <field id="sender_email_identity" translate="label" type="select" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Email Sender</label>
                    <source_model>Magento\Config\Model\Config\Source\Email\Identity</source_model>
                </field>
                <field id="email_template" translate="label comment" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Email Template</label>
                    <comment>Email template chosen based on theme fallback when "Default" option is selected.</comment>
                    <source_model>Magento\Config\Model\Config\Source\Email\Template</source_model>
                </field>
            </group>
        </section>
    </system>
</config>

и config.xmlдля контактного модуля

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
            <contact>
                <enabled>1</enabled>
            </contact>
            <email>
                <recipient_email>
                    <![CDATA[hello@example.com]]>
                </recipient_email>
                <sender_email_identity>custom2</sender_email_identity>
                <email_template>contact_email_email_template</email_template>
            </email>
    </default>
</config>

Если мы хотим установить значение по умолчанию, то мы должны соответствовать его идентификатору, как

<section id="contact"> <group id="contact"> <field id="enabled">

тогда это становится

 <default>
     <contact>
         <enabled>1</enabled>
     </contact>
 </default>
Кейур Шах
источник