Метка: D7
18 материалов

Обмен данными с внешними API, AJAX-обработчики, сохранение структурированных данных в текстовое поле — всё это регулярно требует кодирования и декодирования JSON. Разберём Bitrix\Main\Web\Json и чем он отличается от стандартных функций PHP. Базовое кодирование и декодирование <?php use Bitrix\Main\Web\Json; $jsonString = Json::encode([‘name’ => ‘Товар’, ‘price’ => 1500]); $data = Json::decode($jsonString); echo $data[‘name’]; Функционально класс — обёртка над стандартными json_encode и json_decode,…

Bitrix\Main\Engine\Controller — штатный способ обрабатывать AJAX-запросы в новом ядре 1С-Битрикс. Вместо самописного файла с подключением пролога вы описываете класс с методами-действиями, а ядро берёт на себя проверку токена, разбор параметров и формирование ответа. Разберём устройство контроллера, систему фильтров, возврат ошибок и способы вызова с фронтенда. Обзор остальных подходов к AJAX есть в статье AJAX в Битрикс. Минимальный контроллер <?php //…

Bitrix\Main\Application — центральная точка доступа к контексту текущего выполнения в D7: запросу, ответу, сессии, подключению к базе. Разберём, зачем нужен этот класс, если к тем же данным можно обратиться через глобальные переменные, и когда это действительно важно. Получение экземпляра приложения <?php use Bitrix\Main\Application; $app = Application::getInstance(); $context = $app->getContext(); Application реализован как синглтон — один экземпляр на весь жизненный цикл…

Данные в базе разложены по таблицам, и почти любая полезная выборка требует их соединить: заказы вместе с пользователями, элементы вместе с разделами, записи справочника вместе с привязанными к ним значениями. В ORM 1С-Битрикс за это отвечает referenceField — описание связи между сущностями. Один раз описав связь, дальше вы обращаетесь к полям связанной таблицы как к своим. Разберём, как это устроено,…

Кеширование в компонентах включается галочкой, а вот собственный код кешируется вручную. Тяжёлая выборка, обращение к внешнему API, сложный расчёт — всё это должно выполняться раз в час, а не при каждом открытии страницы. В D7 для этого есть Bitrix\Main\Data\Cache. Разберём базовый шаблон использования, работу с тегированным кешем и типичные ошибки, из-за которых кеш либо не работает, либо отдаёт устаревшие данные….

Настройки проекта надо где-то хранить: ключ доступа к внешнему сервису, идентификатор инфоблока, адрес получателя уведомлений, флаг включения интеграции. Класть их константами в init.php неудобно — при каждом изменении нужен разработчик. В 1С-Битрикс для этого есть штатное хранилище настроек модулей — Bitrix\Main\Config\Option. Разберём, как читать и записывать значения, чем он отличается от старого COption и как вывести свои настройки в административную…

Любой текст, который увидит пользователь или администратор, стоит выносить в языковые файлы через Loc::getMessage, а не зашивать строкой прямо в код, — даже если проект никогда не станет многоязычным. Разберём механизм локализации D7 и почему это правило стоит соблюдать с самого начала разработки. Базовое использование <?php use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); echo Loc::getMessage(‘MY_MODULE_TASK_SAVED’); Loc::loadMessages(__FILE__) подключает языковой файл, расположенный по соглашению рядом с…

Собственная ORM-модель на D7 описывается классом-наследником Bitrix\Main\Entity\DataManager с явным перечислением полей таблицы и их типов. Разберём базовые типы полей, связи между сущностями и валидацию — то, ради чего вообще стоит писать ORM-модель, а не работать с таблицей через прямой SQL. Минимальная модель <?php namespace Vendor\Module; use Bitrix\Main\Entity\DataManager; use Bitrix\Main\Entity\IntegerField; use Bitrix\Main\Entity\StringField; use Bitrix\Main\Entity\DatetimeField; class TaskTable extends DataManager { public static…

Bitrix\Main\Request — D7-обёртка над глобальными массивами $_GET, $_POST, $_SERVER с встроенной базовой защитой от опасных символов. Разберём, чем это лучше прямого обращения к суперглобалам и какие ограничения стоит знать при работе с ней. Получение объекта запроса <?php use Bitrix\Main\Context; $request = Context::getCurrent()->getRequest(); $id = $request->get(‘id’); $action = $request->getPost(‘action’); Context::getCurrent() — правильный способ получить текущий запрос из любого места кода D7,…

Bitrix\Main\Type\DateTime — обёртка над стандартным PHP DateTime, обязательная к использованию при работе с датами через D7 API. Разберём, зачем она вообще нужна, если в PHP уже есть свой класс дат, и какие ошибки чаще всего возникают при смешивании форматов. Почему нельзя просто передать обычный DateTime <?php use Bitrix\Main\UserTable; use Bitrix\Main\Type\DateTime; UserTable::update($userId, [ ‘LAST_LOGIN’ => new DateTime(), // именно Bitrix\Main\Type\DateTime ]);…