In this article it will be shown how to add custom config parameters and how to make them available on the administration panel.
In the example it's supposed that your module is named MyModule
. Replace MyModule
and my-module
with your real module name.
Create a file custom/Espo/Modules/MyModule/Resources/metadata/entityDefs/Settings.json
:
{
"fields": {
"myParameter": {
"type": "enum",
"options": ["Option 1", "Option 2"],
"tooltip": true
}
}
}
Create a file custom/Espo/Modules/MyModule/Resources/metadata/app/config.json
:
{
"params": {
"myParameter": {
"level": "admin"
}
}
}
The level parameter defines availability of the config parameter in the front-end.
default
– available for logged-in users (applied by default);global
– available even before logging in;system
– never available;internal
– never available for read, admin can write (useful for passwords, secrets; recommended to use the password field type) (as of v7.3);admin
– available only for admin (read and write);superAdmin
– available only for super-admin (read and write).
The readOnly parameter disables the ability to change a parameter value for admin users.
Create a file custom/Espo/Modules/MyModule/Resources/metadata/app/adminPanel.json
:
{
"myPanel": {
"label": "My Panel",
"itemList": [
{
"url": "#Admin/mySettings",
"label": "My Settings",
"iconClass": "fas fa-cog",
"description": "myDescription",
"recordView": "my-module:views/admin/my-settings"
}
],
"order": 101
}
}
Create a file custom/Espo/Modules/MyModule/Resources/i18n/en_US/Admin.json
:
{
"keywords": {
"myPanel": "some search keyword,another search keyword"
},
"descriptions": {
"myDescription": "Description text."
},
"labels": {
"My Settings": "My Settings",
"My Panel": "My Panel"
}
}
Create a file custom/Espo/Modules/MyModule/Resources/i18n/en_US/Settings.json
:
{
"fields": {
"myParameter": "My Parameter"
},
"tooltips": {
"myParameter": "My parameter tooltip text. Markdown supported."
},
"options": {
"myParameter": {
"Option 1": "Option 1",
"Option 2": "Option 2"
}
}
}
Create a file client/custom/modules/my-module/src/views/admin/my-settings.js
:
define('my-module:views/admin/my-settings', ['views/settings/record/edit'], function (Dep) {
return Dep.extend({
detailLayout: [
{
rows: [
[
{
name: 'myParameter'
},
false
]
]
}
],
// Dynamic logic can de defined.
dynamicLogicDefs: {},
setup: function () {
Dep.prototype.setup.call(this);
// Some custom logic can be written here.
},
});
});
Clear cache.
The parameter value now can be read in the back-end:
<?php
/** @var \Espo\Core\Utils\Config $config */
$config->get('myParameter');