Magento 2: Valores padrão para a configuração `system.xml`

24

No Magento 1, foi possível

  1. Configuração de uma interface do usuário para a seção Configuração do sistema em etc/system.xmlarquivos

  2. Defina valores padrão para esses campos nos etc/config.xmlarquivos

Nos bastidores, o Magento carregava dados core_config_datae, se nada fosse definido, seria padronizado com os valores definidos globalmente etc/config.xml. (versão simplificada - é um pouco mais complicado que isso )

O mesmo pode ser feito no Magento 2? Sei que é possível configurar elementos da interface do usuário via system.xml- mas é possível definir valores padrão para essas configurações? Em caso afirmativo, onde ou como esses valores devem ser configurados?

Alan Storm
fonte
Estou desenvolvendo uma extensão em que, na configuração da loja ADMIN >> minha configuração de extensão, desejo colocar a lista arrastável e classificável de atributo e, portanto, preciso definir um modelo personalizado para esse campo em particular, então existe alguma maneira de colocar um arquivo phtml de modelo personalizado dentro do system.xml?
Yogesh Trivedi

Respostas:

42

Sim, o Magento 2 ainda permite definir os valores padrão dentro de um arquivo de configuração. namespace \ nome do módulo \ 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>
            <sectionname>
                <groupname>
                    <fieldid>1</fieldid>
                </groupname>
            </sectionname>
        </default>
    </config>

Configuração do sistema 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>
Eirik
fonte
11
Observe que o nome da seção, o nome do grupo e o fieldid estão todos correlacionados ao ID da tag de cada seção.
Eirik
como podemos obter esse valor padrão no arquivo .php
Anand Ontigeri
11
@AnandOntigeri use $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );Where $this->scopeConfigdeve ser instanciado no método da classe __construct (). \Magento\Framework\Cache\ConfigInterface $scopeConfig
Vasilii Burlacu
É possível obter os valores padrão em vez dos valores configurados? O comentário de Vasilii fornece o valor atual, mas quero comparar a configuração atual de um site com os valores padrão (e, se possível, redefini-lo). Isso pode ser feito sem carregar e ler o config.xmlmanual?
Jacques
@JaccoAmersfoort Os valores padrão são acessíveis apenas até serem substituídos. O Magento 2 armazena os valores do sistema na tabela core_config_data e não armazena os valores padrão separados do valor atual.
Eirik
7

Magento2permitem que você defina o valor padrão da mesma forma Magento1. Quando você olha para o módulo de contato de Magento2,

system.xml para módulo de contato

<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>

e config.xmlpara o módulo de contato

<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[[email protected]]]>
                </recipient_email>
                <sender_email_identity>custom2</sender_email_identity>
                <email_template>contact_email_email_template</email_template>
            </email>
    </default>
</config>

Se queremos definir o valor padrão, temos que corresponder ao seu ID como

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

então torna-se

 <default>
     <contact>
         <enabled>1</enabled>
     </contact>
 </default>
Keyur Shah
fonte