Creating a generic Module Center module
At some point your module might need some kind of configuration page for your module. Using the GXModule.json
file
in the root directory of your module, you can define an automatically created configurations page that can be accessed
by our Module Center.
If you take a closer look at the following example configuration page, you can see that there are multiple sections that include several configurations, which have specific types and parameters.
Defining sections
To start with everything is based on the JSON structure of the GXModule.json
file, with the configuration
attribute.
{
"title": "sample_module.module_title",
"description": "sample_module.module_description",
"forceIncludingFiles": false,
"configuration": [
{
"title": "sample_module.section_title",
"fields": {}
}
]
}
Each JSON object inside the configuration
array defines a section of the configuration page. Similar to the
title
attribute, each of these JSON object inside the configuration
array reference their title
the
same way. Using the fields
object you can define the specific configurations that belong to this section. More
information about defining configurations will be given in the next part.
Besides these two attributes, there is also another optional attribute called tab
that references a text phrase
(like the title
and description
attributes). If you add this attribute, a tab will be added to the
configuration page and this tab will only contain the sections with the same reference.
{
"title": "sample_module.module_title",
"description": "sample_module.module_description",
"forceIncludingFiles": false,
"configuration": [
{
"title": "sample_module.section_title_1",
"tab": "sample_module.tab_title_1",
"fields": {}
},
{
"title": "sample_module.section_title_2",
"tab": "sample_module.tab_title_1",
"fields": {}
},
{
"title": "sample_module.section_title_3",
"tab": "sample_module.tab_title_2",
"fields": {}
},
{
"title": "sample_module.section_title_4",
"fields": {}
}
]
}
If some sections do have a tab
attribute and some don't, then all sections without this attribute will be grouped
by a General
(or in German Allgemein
) tab.
Defining configurations
Configurations itself can be defined by using the fields
attribute inside the JSON object for describing the sections.
Therefore, you have two possibilities to select one of many configuration types and use parameters to change this
configuration regarding your needs. Defining a configuration named sampleConfig
, a simple input value, looks like this:
{
"title": "sample_module.module_title",
"description": "sample_module.module_description",
"forceIncludingFiles": false,
"configuration": [
{
"title": "sample_module.section_title",
"fields": {
"sampleConfig": {
"type": "text",
"label": "sample_module.input_field"
}
}
}
]
}
The type
attribute defines the type of the configuration and label
references a text phrase. The key sampleConfig
is used for identifying, storing and reading the configuration and its given value. How to get a specific configuration
value will be explained in the chapter [Reading configuration values].
The following part lists the available types, provides examples how to define them and lists all (optional) parameters that can be used to modify the configuration.
Configuration types
Switcher
{
"configuration": [
{
"title": "sample_module.section_switcher",
"fields": {
"sampleSwitcher": {
"type": "checkbox",
"label": "sample_module.label_switcher"
}
}
}
]
}
default_value
required
tooltip
Simple input field
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleInput": {
"type": "text",
"label": "sample_module.label_input"
}
}
}
]
}
default_value
readonly
regex
required
tooltip
Password input field
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"samplePassword": {
"type": "password",
"label": "sample_module.label_password"
}
}
}
]
}
regex
required
tooltip
Email input field
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleEmail": {
"type": "email",
"label": "sample_module.label_email"
}
}
}
]
}
default_value
readonly
regex
required
tooltip
Numeric input field
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleNumber": {
"type": "number",
"label": "sample_module.label_number"
}
}
}
]
}
default_value
max
min
readonly
regex
required
step
tooltip
Color picker
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleColor": {
"type": "color",
"label": "sample_module.label_color"
}
}
}
]
}
default_value
required
tooltip
Date picker
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleDate": {
"type": "date",
"label": "sample_module.label_date"
}
}
}
]
}
default_value
readonly
required
tooltip
Date and time picker
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleDateTime": {
"type": "datetime",
"label": "sample_module.label_datetime"
}
}
}
]
}
default_value
readonly
required
tooltip
File update
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleFile": {
"type": "file",
"label": "sample_module.label_file",
"folder": "images"
}
}
}
]
}
Necessary parameters:
folder
: Destination directory for the updated file, based on the root directory of the shop.
accept
tooltip
Textarea
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleTextarea": {
"type": "textarea",
"label": "sample_module.label_textarea"
}
}
}
]
}
default_value
readonly
required
tooltip
HTML Editor
{
"configuration": [
{
"title": "sample_module.section_inputs",
"fields": {
"sampleEditor": {
"type": "editor",
"label": "sample_module.label_editor"
}
}
}
]
}
default_value
readonly
required
tooltip
Dropdown
{
"configuration": [
{
"title": "sample_module.section_selects",
"fields": {
"sampleSelect": {
"type": "select",
"label": "sample_module.label_select",
"values": [
{
"value": "value1",
"text": "sample_module.option_value1"
},
{
"value": "value2",
"text": "sample_module.option_value2"
},
{
"value": "value2",
"text": "sample_module.option_value3"
}
]
}
}
}
]
}
Necessary parameters:
values
: Contains a list of all available items. Thevalue
attribute defines the value of the item and thetext
attribute references a text phrase.
default_value
required
tooltip
Dropdown with multi select
{
"configuration": [
{
"title": "sample_module.section_selects",
"fields": {
"sampleMultiSelect": {
"type": "multiselect",
"label": "sample_module.label_multiselect",
"values": [
{
"value": "value1",
"text": "sample_module.option_value1"
},
{
"value": "value2",
"text": "sample_module.option_value2"
},
{
"value": "value2",
"text": "sample_module.option_value3"
}
]
}
}
}
]
}
Necessary parameters:
values
: Contains a list of all available items. Thevalue
attribute defines the value of the item and thetext
attribute references a text phrase.
default_value
selected
required
tooltip
Customer groups
{
"configuration": [
{
"title": "sample_module.section_selects",
"fields": {
"sampleCustomerGroup": {
"type": "customer_group",
"label": "sample_module.label_customer_group"
}
}
}
]
}
default_value
required
tooltip
Order status
{
"configuration": [
{
"title": "sample_module.section_selects",
"fields": {
"sampleOrderStatus": {
"type": "order_status",
"label": "sample_module.label_order_status"
}
}
}
]
}
default_value
required
tooltip
Countries
{
"configuration": [
{
"title": "sample_module.section_selects",
"fields": {
"sampleCountryList": {
"type": "countries",
"label": "sample_module.label_countries"
}
}
}
]
}
default_value
required
tooltip
Languages
{
"configuration": [
{
"title": "sample_module.section_selects",
"fields": {
"sampleLanguage": {
"type": "languages",
"label": "sample_module.label_languages"
}
}
}
]
}
default_value
required
tooltip
AJAX button
{
"configuration": [
{
"title": "sample_module.section_buttons",
"fields": {
"sampleAjaxButton": {
"type": "button",
"label": "sample_module.label_button_ajax",
"text": "sample_module.text_button_ajax",
"action": {
"controller": "SampleButtonController",
"method": "sampleAction",
"message": "sample_module.text_success_button_ajax"
}
}
}
}
]
}
Necessary parameters:
action
: Defines the AJAX action that's triggered after clicking the button.controller
: Defines the controller class that is to be called.method
: Defines the method of the controller class that is to be called.message
: References the text phrase for the success message that is to be be shown.
color
tooltip
Notice: The first provided argument to the called controller method contains all form data of the configuration
page. For an easier handling, you can extend from the \GXModuleController
class.
Modal button
{
"configuration": [
{
"title": "sample_module.section_buttons",
"fields": {
"sampleModalButton": {
"type": "button",
"label": "sample_module.label_button_modal",
"text": "sample_module.text_button_modal",
"modal": "sampleModal"
}
}
}
]
}
Necessary parameters:
text
: References the text phrase that is to be used as the modal text.modal
: Defines which modal is to be shown.
color
tooltip
Modal with simple text
{
"configuration": [
{
"title": "sample_module.section_buttons",
"fields": {
"sampleModal": {
"type": "modal",
"title": "sample_module.modal_title_sample_modal",
"description": "sample_module.modal_description_sample_modal",
"buttons": {
"close": {
"text": "buttons.cancel"
},
"delete": {
"text": "buttons.delete",
"action": {
"controller": "SampleButtonController",
"method": "someAction",
"message": "sample_module.text_success_button_modal"
}
}
}
}
}
}
]
}
Necessary parameters:
title
: References the text phrase that is to be used as the modal title.description
: References the text phrase that is to be used as the modal text.buttons
: Defines the available buttons.close
,delete
: Name of the available buttons.action
: (Optional) Defines the AJAX action that's triggered after clicking the button. If this attribute is missing, the modal will be closed after clicking the button.controller
: (Optional) Defines the controller class that is to be called.method
: (Optional) Defines the method of the controller class that is to be called.message
: (Optional) References the text phrase for the success message that is to be shown.
color
Modal with rendered HTML
{
"configuration": [
{
"title": "sample_module.section_buttons",
"fields": {
"sampleModal2": {
"type": "modal",
"title": "sample_module.modal_title_sample_modal",
"content": "Vendor/Module/Admin/Html/modal_content.html",
"buttons": {
"close": {
"text": "buttons.cancel"
},
"delete": {
"text": "buttons.delete",
"action": {
"controller": "SampleButtonController",
"method": "someAction",
"message": "sample_module.text_success_button_modal"
}
}
}
}
}
}
]
}
Necessary parameters:
content
: References the HTML file that is to be rendered.buttons
: Defines the available buttons.close
,delete
: Name of the available buttons.action
: (Optional) Defines the AJAX action that's triggered after clicking the button. If this attribute is missing, the modal will be closed after clicking the button.controller
: (Optional) Defines the controller class that is to be called.method
: (Optional) Defines the method of the controller class that is to be called.message
: (Optional) References the text phrase for the success message that is to be shown.
color
Optionale parameters
accept
Defines the accepted file extensions for an uploading file.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalAccept": {
"type": "file",
"label": "sample_module.label_optional_accept",
"folder": "images",
"accept": "image/*"
}
}
}
]
}
color
Defines the color of the button. Possible values are: default
, primary
, success
, info
, warning
, danger
,
and link
.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalColor": {
"type": "button",
"label": "sample_module.label_button_modal",
"text": "sample_module.text_button_modal",
"modal": "sampleModal",
"color": "warning"
}
}
}
]
}
default_value
Defines the default value of the configuration.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalDefaultValue": {
"type": "text",
"label": "sample_module.label_input",
"default_value": "Lorem ipsum …"
}
}
}
]
}
max
Defines the maximal value of a numeric input field.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalMax": {
"type": "number",
"label": "sample_module.label_number",
"max": 50
}
}
}
]
}
min
Defines the minimal value of a numeric input field.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalMix": {
"type": "number",
"label": "sample_module.label_number",
"mix": 50
}
}
}
]
}
regex
Defines a pattern for the input value that needs to be matched.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalRegex": {
"type": "text",
"label": "sample_module.label_input",
"regex": "[0-9()-\\+\\s]+"
}
}
}
]
}
required
Defines if this input field is required.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalRequired": {
"type": "text",
"label": "sample_module.label_input",
"required": true
}
}
}
]
}
selected
Defines the default value for multi select dropdowns (similar to default_value
).
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalSelected": {
"type": "multiselect",
"label": "sample_module.label_optional_selected",
"values": [
{
"value": "value1",
"text": "sample_module.option_value1"
},
{
"value": "value2",
"text": "sample_module.option_value2"
},
{
"value": "value3",
"text": "sample_module.option_value3"
}
],
"selected": [
"value1",
"value2"
]
}
}
}
]
}
step
Defines the steps for a numeric input value.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalStep": {
"type": "number",
"label": "sample_module.label_optional_step",
"step": 0.5
}
}
}
]
}
tooltip
Defines a tooltip.
{
"configuration": [
{
"title": "sample_module.section_optionals",
"fields": {
"sampleOptionalTooltip": {
"type": "text",
"label": "sample_module.label_optional_tooltip",
"tooltip": {
"type": "info",
"text": "sample_module.text_tooltip"
}
}
}
}
]
}
type
: Defines the type of the tooltip. Possible values are:info
underror
.text
: References the text phrase for the tooltip.
Reading a configuration value
To get saved configuration values, you need to use the GXModuleConfigurationStorage
. The following example shows,
how to initialize and request a configuration value.
$configurationStorage = MainFactory::create('GXModuleConfigurationStorage', '<Vendor>/<Module>');
$activeValue = $configurationStorage->get('active');
Please mind, that the second argument of the create
method uses placeholders for the vendor and module name.
Notice
If no module configuration had been saved, the GXModuleConfigurationStorage
will provide the default
configuration value from the GXModule.json
.
Type of the return value for each type
Type | Type of the return value |
---|---|
checkbox |
string, 1 for true, 0 for false |
text |
string |
password |
string |
email |
string |
number |
string |
color |
string, color code with prefixed # |
date |
string |
datetime |
string |
file |
string, file path based on the root directory of the shop |
textarea |
string, |
editor |
string, |
select |
string |
multiselect |
array |
customer_group |
string |
order_status |
string |
countries |
string |
languages |
string |
Detailed example
We created a detailed example that contains every possible type: