Magento 2: valores predeterminados para la configuración `system.xml`

24

En Magento 1, fue posible

  1. Configuración de una interfaz de usuario para la sección Configuración del sistema en etc/system.xmlarchivos

  2. Establecer valores predeterminados para esos campos en los etc/config.xmlarchivos

Detrás de escena, Magento cargaría datos core_config_datay, si no se configuraba nada, los valores predeterminados se establecerían de forma global etc/config.xml. (versión simplificada, es un poco más complicado que eso )

¿Se puede hacer lo mismo en Magento 2? Sé que es posible configurar elementos de la interfaz de usuario a través de system.xml, pero ¿es posible establecer valores predeterminados para esta configuración? Si es así, ¿dónde o cómo se deben configurar estos valores?

Alan Storm
fuente
Estoy desarrollando una extensión donde en la configuración de la tienda ADMIN >> mi configuración de extensión quiero poner la lista de atributos arrastrable y ordenable y, por lo tanto, necesito establecer una plantilla personalizada para este campo en particular, entonces, ¿hay alguna manera de que pueda colocar el archivo phtml de plantilla personalizada? dentro de system.xml?
Yogesh Trivedi

Respuestas:

42

Sí, Magento 2 todavía le permite definir los valores predeterminados dentro de un archivo de configuración. espacio de nombres \ nombre de 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>

Configuración del 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
fuente
1
Tenga en cuenta que sectionname, groupname y fieldid se correlacionan con el ID de etiqueta de cada sección.
Eirik
¿Cómo podemos obtener este valor predeterminado en el archivo .php?
Anand Ontigeri
1
@AnandOntigeri usa $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );Where $this->scopeConfigdebe ser instanciado en la clase __construct () método. \Magento\Framework\Cache\ConfigInterface $scopeConfig
Vasilii Burlacu
¿Es posible obtener los valores predeterminados en lugar de los valores configurados? El comentario de Vasilii proporciona el valor actual, pero quiero comparar la configuración actual de un sitio con los valores predeterminados (y, si es posible, restablecerlo). ¿Se puede hacer sin cargar y leer el config.xmlmanual?
Jacques
@JaccoAmersfoort Los valores predeterminados solo son accesibles hasta que se sobrescriben. Magento 2 almacena los valores del sistema en la tabla core_config_data y no almacena los valores predeterminados separados del valor actual.
Eirik
7

Magento2le permite establecer el valor predeterminado igual que Magento1. Cuando miras el módulo de contacto desde Magento2,

system.xml para módulo de contacto

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

y config.xmlpara el módulo de contacto

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

Si queremos establecer el valor predeterminado, entonces tenemos que hacer coincidir su id como

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

entonces se convierte

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