COption в Bitrix: как не утонуть в настройках

Или руководство для тех, кто устал хранить API-ключи в разных файлах.

Если вы когда-либо писали модуль для 1С-Битрикс, вы сталкивались с вопросом: «Где хранить настройки?»

Варианты:

  • В отдельной таблице — а почему бы и нет, ведь у нас уже 17 таблиц для одной формы.
  • В файлах — но тогда придется писать свой класс для работы с таким форматом хранения опций.
  • В константах — и такое бывает.

Но в Bitrix есть уже готовый класс для этих целей - COption.
Он есть в ядре, он работает, он — официальный способ хранить настройки.

Сегодня разберём COption: как он работает и как его правильно использовать.

Что такое COption?

COption — это класс ядра Битрикс, отвечающий за централизованное хранение настроек на уровне модулей. Данные храняться в таблице b_option, что позволяет каждому модулю иметь свой набор ключей-значений, которые можно читать, писать и удалять.

Почему это важно?

  • Настройки привязаны к модулю, а не к компоненту или странице.
  • Поддерживается мультисайтовость — можно задать разные значения для разных сайтов.
  • Есть готовые методы для получения и записи значений.

Где хранятся настройки?

Открываем phpMyAdmin и смотрим на таблицу b_option:

MODULE_IDNAMEVALUESITE_ID
main upload_dir /upload null
mymodule api_key 12345 s1
mymodule debug_mode Y

Вот и всё.
Каждая строка — это одна настройка.

  • MODULE_ID — кому принадлежит.
  • NAME — название параметра.
  • VALUE — значение (в сериализованном виде, если нужно).
  • SITE_ID — для какого сайта.

Основные методы: Get, Set и не только

КлассCOption предоставляет основной набор методов для работы. Примеры:

// Получить строку (или значение по умолчанию)
$key = COption::GetOptionString("mymodule", "api_key", "default123");

// Получить число
$limit = COption::GetOptionInt("mymodule", "items_limit", 10);

// Получить массив (если сохраняли через SetOptionString с сериализацией)
$emails = unserialize(COption::GetOptionString("mymodule", "notify_emails", "a:0:{}"));

// Сохранить
COption::SetOptionString("mymodule", "debug_mode", "Y");

// Удалить
COption::RemoveOption("mymodule", "temp_value");

Антипаттерны: что НЕ стоит делать

  1. Хранить чувствительные данные в открытом виде — пароли, токены и т.д. лучше хранить в зашифрованном виде.
  2. Использовать COption для настроек компонента — лучше передавать параметры при вызове компонента.
  3. Не валидировать ввод — проверяйте, что пришло в $_POST перед сохранением данных в базу.
  4. Не документировать опции — без документации легко случайно задублировать настройки или потратить много времени на поиски нужной опции.

Альтернативы COption

  • Пользовательские поля — если настройки привязаны к какому-то объекту: пользователь, сделка, раздел и т.д.
  • Отдельная таблица — если настроек много, они иерархические, со сложной логикой выбора.
  • Файлы — например, config.php с массивом опции. Так же у нас была статья про то как можно хранить свои настройки в файле .settings.php

Но для большинства случаев — COption остаётся лучшим выбором.

Заключение

Класс COption в Bitrix упрощает хранение настроек без дополнительного программирования, однако важно грамотно подбирать опции, которые действительно требуют сохранения таким способом.

Полезный совет: класс COption подходит не только для конкретных модулей, но и для хранения настроек мелких доработок. Чтобы было понятно назначение таких опций, в качестве имени модуля удобно указывать custom или аналогичное обозначение.

Учтите, что при переносе доработок с тестового сервера на рабочий с использованием класса COption, вам потребуется заново задать значения новых настроек.

Рубрики: PHP Bitrix

Если есть вопросы, что-то в статье не понятно или нашли ошибку, напишите об этом в комментариях, все комментарии читаются и по возможности материал будет доработан.
Читайте также
Как добавить свою вкладку в карточку элемента СРМ?

Как добавить свою вкладку в карточку элемента СРМ?

Вкладки в карточках элементов CRM очень удобное решение. В этой статье разберем как добавить свою вкладку в карточку элемента CRM...

Подключить bitrix без подключения шаблона сайта

Подключить bitrix без подключения шаблона сайта

В статье приводится пример кода подключения bitrix без подключения шаблона сайта. Так же описано когда это может пригодится.

Bitrix сбросить буфер вывода

Bitrix сбросить буфер вывода

Функция RestartBuffer() в Bitrix используется для сброса буфера вывода. Она позволяет прервать вывод страницы на определенном этапе выполнения скрипта и...

Bitrix подключить модуль

Bitrix подключить модуль

Так как bitrix состоит из большого количества различных модулей, знать как их правильно подключать просто необходимо.

Bitrix регистрация своего события

Bitrix регистрация своего события

В статье приводится пример регистрации собственного события в bitrix и добавления на него обработчика.

Как в bitrix получить параметры запроса

Как в bitrix получить параметры запроса

Из этой статьи вы узнаете, какие классы и методы в bitrix помогут получить данные запроса без использования глобальных переменных. Это...

Комментарии

Комментариев пока нет
Данный сайт использует файлы cookies. Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookies.
ОК