Добавляем новую настройку в "Общие настройки"

Иногда надо создать какую-то свою настройку для модуля или дополнения.
Например, сколько дней будут храниться какие-нибудь данные или на какой email отправлять оповещения о заказах больше миллиона долларов.
Вместо совершенно избыточного создания своего модуля в админке, где будут задаваться одна-две настройки и храниться где-нибудь в собственной SQL-таблице можно использовать штатный механизм хранения настроек.

Такая дополнительная настройка делается очень просто, достаточно выполнить SQL-запрос следующего вида:

INSERT xxxx_settings SET
settings_groupID=2,
settings_constant_name='CONF_MY_FAVORITE_CONST',
settings_value='Например, ноль',
settings_title='Название этой настройки',
settings_description='Описание этой настройки',
settings_html_function='setting_TEXT_BOX(0,',
sort_order=99;

xxxx - префикс для имен таблиц. У всех таблиц сайта он один и тот же. Нужен, чтобы можно было хранить в одной SQL-базе несколько разных сайтов.

settings_groupID - группа настроек.
1 - Внутренние настройки. Нигде не показываются для изменения, хотя используются и вполне можно их менять.
2 - Общие настройки. Обычно дополнительная настройка добавляется в эту группу.
3 - Настройки фотографий.
4 - Настройки партнерской программы.

setting value - значение настройки по умолчанию, т.е. в момент создания.

settings_title - Название настройки. Текст, который Вы видите в "Общих настройках" жирным.

settings_description - Описание настройки. Текст, который Вы видите в "Общих настройках" не жирным.

settings_html_function - функция, которая будет выполняться для обработки этой настройки.
Наиболее часто используемые: 'setting_TEXT_BOX(0,', 'setting_TEXT_BOX(1,', 'setting_TEXT_BOX(2,' (для текстовой строки, для float, для int) и 'setting_CHECK_BOX(' (чекбокс), но есть и много других.
Полный список функций можно посмотреть в файле core/functions/setting_functions.php

sort_order - сортировка. Место расположения настройки среди остальных.
99 - заведомо самая последняя.
Но если надо расположить где-то в середине, то sort_order для штатных настроек можно посмотреть в файле install/sql/setting_constants.sql

Пример. Задание валюты:

INSERT xxxx_settings SET
settings_groupID=2, 
settings_constant_name='CONF_MY_CURRENCY', 
settings_value='1', 
settings_title='Валюта для моего дополнения',
settings_description='Тут развесистое описание, для чего же эта настройка', 
settings_html_function='settingCONF_DEFAULT_CURRENCY()', 
sort_order=27;

Чтобы не заморачиваться с выполнением SQL-запроса в консоли (или еще где) можно просто создать файл addon.php следующего содержания:

if(!defined('CONF_MY_CURRENCY'))
    db_query("INSERT ".SETTINGS_TABLE." SET
              settings_groupID=2,
              settings_constant_name='CONF_MY_CURRENCY',
              settings_value='1',
              settings_title='Валюта для моего дополнения',
              settings_description='Тут развесистое описание, для чего же эта настройка',
              settings_html_function='settingCONF_DEFAULT_CURRENCY()',
              sort_order=27");
unlink("core/includes/admin/addon.php");

Затем надо положить это файл в core/includes/admin/ и зайти в админку. Код выполнится, настройка создастся, файл удалится.
В "Общих настройках" рядом с настройкой "Валюта по умолчанию" появится настройка "Валюта для моего дополнения",
которую можно будет использовать как CONF_MY_CURRENCY в php-файлах и как {$smarty.const.CONF_MY_CURRENCY} в tpl.html-файлах (шаблонах).