3

I have a module which adds a menu in backend linked to a custom page using a controller. All this works fine.

I would like now to use this new admin page for configuration.

I thought using my /view/adminhtml/templates/newpage.phtml to add all the mandatory fields, but all the entered parameters may be memorized somewhere surely in database.

Is there a dedicated table for that or may I create a new one ?

Thank you for your help

EDIT : I found I need to use system.xml. But each time in the examples I found, the new configuration fields are in admin/store/configuration menu. Is there a way to define my custom page instead?

  • For configuration, should use core_config_data table. – Khoa TruongDinh May 6 '17 at 6:49
0

The system.xml is a configuration file which is used to create configuration fields in Magento 2 System Configuration.

You will need this if your module has some settings which the admin needs to set. You can go to Store -> Setting -> Configuration to check how it look like.

To Create system.xml

  • Step 1: Create System.xml
  • Step 2: Set default value
  • Step 3: Flush Magento cache
  • Step 4: Get value from configuration

app/code/Mageplaza/HelloWorld/etc/adminhtml/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="mageplaza" translate="label" sortOrder="10">
                <label>Mageplaza</label>
            </tab>
            <section id="helloworld" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
                <class>separator-top</class>
                <label>Hello World</label>
                <tab>mageplaza</tab>
                <resource>Mageplaza_HelloWorld::hello_configuration</resource>
                <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
                    <label>General Configuration</label>
                    <field id="enable" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
                        <label>Module Enable</label>
                        <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                    </field>
                    <field id="display_text" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
                        <label>Display Text</label>
                        <comment>This text will display on the frontend.</comment>
                    </field>
                </group>
            </section>
        </system>
    </config>

Checking this code, you will see how to create a Tab, Section, Group and Field. We will find more detail about each element: The Tab element may have many sections and some main attributes and child: Id attribute is the identify for this tab sortOrder attribute will define the position of this tab. Translate attribute let Magento know which title need to translate Label element child is the text which will show as tab title. The Section element will have id, sortOrder, translate attributes like the Tab element. Some other attributes (showInDefault, showInWebsite, showInStore) will decide this element will be show on each scope or not. You can change the scope here

The section may have many group and some other child elements:

Class: this value will be added as class for this element. You should you it if you want to make-up this element.

Label: the text title of this element

Tab: this’s a tab id. This tab element will let Magento know the tab which this section is belong to. This section will be placed under that tab Resource: defined the ACL rule which the admin user must have in order to access this configuration.

Group: This element may have many field and some attributes which is same as Sections.

Fields: is the main path of this page. It will save the data which we want to setting. In this element, we focus on the type attribute. It will define how the element is when display. It can be: text, select, file… In this example we create 2 fields with type select and text. With each type we will define the child element for the field to make it work as we want.

For example, with the type select/multiselect you must define the child element resource_model.

Step 2: Set default value

Each field in system.xml after create will not have any value. When you call them, you will receive ‘null’ result. So for the module, we will need to set the default value for the field and you will call the value without go to config, set value and save it. This default value will be saved in config.xml which is located in etc folder. Let’s create it for this simple configuration:

app/code/Mageplaza/HelloWorld/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>
            <hello>
                <general>
                    <enable>1</enable>
                    <display_text>Hello World</display_text>
                </general>
            </hello>
        </default>
    </config>

Note that, if you might get an Error 404 Page Not Found first time, just logout and login again to fix this

Step 3: Flush Magento Cache

https://www.mageplaza.com/kb/how-flush-enable-disable-cache.html

Step 4: Get value from configuration

First all of let’s save value and flush cache, then you can get saved value from database. In the system.xml, we have added 2 fields: enable and display_text. So the path should be:

helloworld/general/enable

helloworld/general/display_text

$this->scopeConfig->getValue('helloworld/general/enable', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
$this->scopeConfig->getValue('helloworld/general/display_text', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);

For more information use this link

  • thank you for your answer. is there a way to display my new configuration fields in my adminpage instead of Store -> Setting -> Configuration ? – Alexglvr May 6 '17 at 7:02
  • you want to create new page that store module configuration details instead of magento default page or you want to just display configuration option tab in your module menu – Vaibhav Ahalpara May 6 '17 at 7:06
  • I need to add several configuration fields for my module, but I would prefer not to add them in Store -> Setting -> Configuration. Therefore I create a menu which is linked to a new admin page. I would like to have my own configuration fields in this new page. I found that : magestore.com/magento-2-tutorial/… but seems to be quite complicated compared to the system.xml solution... – Alexglvr May 6 '17 at 7:13
  • There is 2 way to do this first you have to create form/admin page and save this page data to custome database and second you need to save that data to core_config_data table magento save configuration form data in core_config_data table – Vaibhav Ahalpara May 6 '17 at 7:17
  • I managed to create my configuration form. I now would like a yes/no or check box input field to enable/disable another field. Is it possible? – Alexglvr May 9 '17 at 10:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.