Magento 2: Nilai Default untuk Konfigurasi `system.xml`

24

Di Magento 1, itu mungkin

  1. Konfigurasi antarmuka pengguna untuk bagian Konfigurasi Sistem dalam etc/system.xmlfile

  2. Tetapkan nilai default untuk bidang-bidang di etc/config.xmlfile

Di belakang layar Magento akan memuat data dari core_config_data, dan jika tidak ada yang ditetapkan, akan default ke nilai yang ditetapkan secara global etc/config.xml. (versi sederhana - ini sedikit lebih rumit dari itu )

Bisakah hal yang sama dilakukan di Magento 2? Saya tahu ini mungkin untuk mengkonfigurasi elemen UI melalui system.xml- tetapi apakah mungkin untuk menetapkan nilai default untuk pengaturan ini? Jika demikian, di mana atau bagaimana nilai-nilai ini harus dikonfigurasi?

Alan Storm
sumber
Saya mengembangkan ekstensi di mana di toko ADMIN >> konfigurasi pengaturan ekstensi saya, saya ingin meletakkan atribut draggable dan sortable list dan oleh karena itu saya perlu mengatur template khusus untuk bidang khusus ini, jadi apakah ada cara saya dapat menempatkan file template kustom phtml di dalam system.xml?
Yogesh Trivedi

Jawaban:

42

ya, Magento 2 masih memungkinkan Anda untuk menentukan nilai default di dalam file konfigurasi. 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>

Konfigurasi sistem 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
sumber
1
Perhatikan bahwa nama bagian, nama grup, dan fieldid semuanya berkorelasi dengan id tag dari setiap bagian.
Eirik
bagaimana kita bisa mendapatkan nilai default ini dalam file .php
Anand Ontigeri
1
@AnandOntigeri menggunakan $this->scopeConfig->getValue( $path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE );Di mana $this->scopeConfigharus dipakai di kelas __construct () metode. \Magento\Framework\Cache\ConfigInterface $scopeConfig
Vasilii Burlacu
Apakah mungkin untuk mendapatkan nilai default daripada nilai yang dikonfigurasi? Komentar Vasilii memberikan nilai saat ini, tetapi saya ingin membandingkan konfigurasi situs saat ini dengan nilai default (dan jika mungkin, setel ulang). Bisakah itu dilakukan tanpa memuat dan membaca config.xmlsecara manual?
Jacques
@JaccoAmersfoort Nilai default hanya dapat diakses sampai ditimpa. Magento 2 menyimpan nilai sistem dalam tabel core_config_data dan tidak menyimpan nilai default yang terpisah dari nilai saat ini.
Eirik
7

Magento2memungkinkan Anda untuk mengatur nilai default yang sama Magento1. Ketika Anda melihat modul kontak dari Magento2,

system.xml untuk modul kontak

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

dan config.xmluntuk modul kontak

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

Jika kita ingin menetapkan nilai default, maka kita harus mencocokkan id-nya

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

maka itu menjadi

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