Magento 2: Standardwerte für die `system.xml` Konfiguration

24

In Magento 1 war es möglich,

  1. Konfiguration einer Benutzeroberfläche für den Abschnitt Systemkonfiguration in etc/system.xmlDateien

  2. Legen Sie Standardwerte für diese Felder in den etc/config.xmlDateien fest

Hinter den Kulissen lud Magento Daten von core_config_dataund wenn nichts eingestellt war, wurden standardmäßig die global eingestellten Werte verwendet etc/config.xml. (vereinfachte Version - etwas komplizierter )

Kann das gleiche in Magento 2 gemacht werden? Ich weiß, dass es möglich ist, Benutzeroberflächenelemente über zu konfigurieren system.xml- aber können für diese Einstellungen Standardwerte festgelegt werden? Wenn ja, wo oder wie sollten diese Werte konfiguriert werden?

Alan Storm
quelle
Ich entwickle eine Erweiterung, in der ich im ADMIN-Speicher >> Konfiguration meine Erweiterungseinstellung in eine zieh- und sortierbare Liste mit Attributen einfügen möchte. Daher muss ich eine benutzerdefinierte Vorlage für dieses bestimmte Feld festlegen in system.xml?
Yogesh Trivedi

Antworten:

42

Ja, in Magento 2 können Sie weiterhin die Standardwerte in einer Konfigurationsdatei definieren. Namespace \ Modulname \ 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>

Systemkonfiguration 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
quelle
1
Beachten Sie, dass Abschnittsname, Gruppenname und Feld-ID alle mit der Tag-ID jedes Abschnitts korrelieren.
Eirik
Wie können wir diesen Standardwert in .php-Datei bekommen
Anand Ontigeri
1
@AnandOntigeri use $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );Where $this->scopeConfigmuss in der Methode class __construct () instanziiert werden. \Magento\Framework\Cache\ConfigInterface $scopeConfig
Vasilii Burlacu
Ist es möglich, die Standardwerte anstelle der konfigurierten Werte abzurufen? Vasiliis Kommentar gibt den aktuellen Wert an, aber ich möchte die aktuelle Konfiguration einer Site mit den Standardwerten vergleichen (und wenn möglich zurücksetzen). Kann das gemacht werden, ohne das config.xmlmanuell zu laden und zu lesen ?
Jacques
@JaccoAmersfoort Auf die Standardwerte kann nur zugegriffen werden, bis sie überschrieben werden. Magento 2 speichert die Systemwerte in der Tabelle core_config_data und speichert die Standardwerte nicht getrennt vom aktuellen Wert.
Eirik
7

Magento2Erlauben Sie Ihnen, den gleichen Standardwert wie einzustellen Magento1. Wenn Sie sich das Kontaktmodul von ansehen Magento2,

system.xml für Kontaktmodul

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

und config.xmlfür das Kontaktmodul

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

Wenn wir einen Standardwert festlegen möchten, müssen wir dessen ID wie folgt anpassen

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

dann wird es

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