Magento 2: valeurs par défaut pour la configuration `system.xml`

24

Dans Magento 1, il était possible de

  1. Configuration d'une interface utilisateur pour la section Configuration système dans des etc/system.xmlfichiers

  2. Définissez les valeurs par défaut pour ces champs dans les etc/config.xmlfichiers

Dans les coulisses, Magento chargerait les données core_config_dataet, si rien n'était défini, reviendrait par défaut aux valeurs définies globalement dans etc/config.xml. (version simplifiée - c'est un peu plus compliqué que ça )

Peut-on faire la même chose dans Magento 2? Je sais qu'il est possible de configurer des éléments d'interface utilisateur via system.xml- mais est-il possible de définir des valeurs par défaut pour ces paramètres? Si oui, où ou comment ces valeurs doivent-elles être configurées?

Alan Storm
la source
Je développe une extension où dans le magasin ADMIN >> configuration mon paramètre d'extension je veux mettre une liste glissable et triable d'attribut et donc j'ai besoin de définir un modèle personnalisé pour ce champ particulier, donc y a-t-il un moyen de mettre un fichier phtml de modèle personnalisé dans system.xml?
Yogesh Trivedi,

Réponses:

42

oui, Magento 2 vous permet toujours de définir les valeurs par défaut dans un fichier de configuration. espace de noms \ nom de module \ 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>

Configuration système 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
la source
1
Notez que nom de section, nom de groupe et id de champ sont tous en corrélation avec l'ID de balise de chaque section.
Eirik
comment pouvons-nous obtenir cette valeur par défaut dans le fichier .php
Anand Ontigeri
1
@AnandOntigeri use $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );$this->scopeConfigdoit être instancié dans la méthode class __construct (). \Magento\Framework\Cache\ConfigInterface $scopeConfig
Vasilii Burlacu
Est-il possible d'obtenir les valeurs par défaut au lieu des valeurs configurées? Le commentaire de Vasilii donne la valeur actuelle, mais je veux comparer la configuration actuelle d'un site aux valeurs par défaut (et si possible, la réinitialiser). Peut-on le faire sans charger et lire le config.xmlmanuellement?
Jacques
@JaccoAmersfoort Les valeurs par défaut sont uniquement accessibles jusqu'à ce qu'elles soient écrasées. Magento 2 stocke les valeurs système dans la table core_config_data et ne stocke pas les valeurs par défaut distinctes de la valeur actuelle.
Eirik
7

Magento2vous permet de définir la valeur par défaut de la même manière Magento1. Lorsque vous regardez le module de contact de Magento2,

system.xml pour module de contact

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

et config.xmlpour le module de contact

<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 nous voulons définir la valeur par défaut, nous devons faire correspondre son id comme

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

alors ça devient

 <default>
     <contact>
         <enabled>1</enabled>
     </contact>
 </default>
Keyur Shah
la source