Magento 2: valori predefiniti per la configurazione di `system.xml`


24

In Magento 1, era possibile

  1. Configurare un'interfaccia utente per la sezione Configurazione del sistema in etc/system.xmlfile

  2. Impostare i valori predefiniti per quei campi nei etc/config.xmlfile

Dietro le quinte da cui Magento caricava i dati core_config_data, e se non fosse stato impostato nulla, i valori impostati a livello globale erano predefiniti etc/config.xml. (versione semplificata - è un po 'più complicato di così )

La stessa cosa può essere fatta in Magento 2? So che è possibile configurare elementi dell'interfaccia utente tramite system.xml- ma è possibile impostare valori predefiniti per queste impostazioni? In tal caso, dove o come devono essere configurati questi valori?


Sto sviluppando un'estensione in cui nel negozio ADMIN >> configura la mia impostazione di estensione voglio mettere un elenco trascinabile e ordinabile per attributo e quindi ho bisogno di impostare un modello personalizzato per questo particolare campo, quindi c'è un modo in cui posso mettere un file phtml di modello personalizzato all'interno di system.xml?
Yogesh Trivedi,

Risposte:


42

sì, Magento 2 ti consente ancora di definire i valori predefiniti all'interno di un file di configurazione. namespace \ modulename \ 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>

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

1
Nota che nome sezione, nome gruppo e fieldid sono tutti correlati all'ID tag di ciascuna sezione.
Eirik,

come possiamo ottenere questo valore predefinito nel file .php
Anand Ontigeri,

1
@AnandOntigeri use $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );Where $this->scopeConfigdeve essere istanziato nel metodo classe __construct (). \Magento\Framework\Cache\ConfigInterface $scopeConfig
Vasilii Burlacu il

È possibile ottenere i valori predefiniti anziché i valori configurati? Il commento di Vasilii fornisce il valore corrente, ma voglio confrontare la configurazione corrente di un sito con i valori predefiniti (e, se possibile, ripristinarlo). Può essere fatto senza caricare e leggere config.xmlmanualmente?
Jacques,

@JaccoAmersfoort I valori predefiniti sono accessibili solo fino a quando non vengono sovrascritti. Magento 2 memorizza i valori di sistema nella tabella core_config_data e non memorizza i valori predefiniti separati dal valore corrente.
Eirik,

7

Magento2consentono di impostare il valore predefinito come Magento1. Quando guardi il modulo di contatto da Magento2,

system.xml per modulo di contatto

<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.xmlper il modulo di contatto

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

Se vogliamo impostare il valore predefinito, allora dobbiamo abbinare il suo ID come

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

allora diventa

 <default>
     <contact>
         <enabled>1</enabled>
     </contact>
 </default>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.