Метка: API
14 материалов

Почти каждый метод старого API Битрикса — CUser::GetList, CIBlockElement::GetList, прямой запрос через $DB->Query — возвращает не готовый массив данных, а объект CDBResult. Разберём, как этот объект устроен и какие его методы регулярно путают между собой. Fetch vs GetNext <?php $result = CUser::GetList(‘ID’, ‘ASC’, []); // вариант 1 while ($row = $result->Fetch()) { echo $row[‘LOGIN’]; } // вариант 2 (для инфоблоков…

Группы пользователей — не только контейнер для прав доступа в интерфейсе, но и сущность, которой можно управлять программно: создавать новые группы динамически, настраивать их права из кода, автоматически включать пользователей в нужные группы по бизнес-логике. Разберём класс CGroup. Создание группы программно <?php $group = new CGroup; $groupId = $group->Add([ ‘ACTIVE’ => ‘Y’, ‘C_SORT’ => 100, ‘NAME’ => ‘VIP-клиенты’, ‘DESCRIPTION’ =>…

До появления удобной обёртки Bitrix\Main\Data\Cache в D7, ручное кеширование в Битриксе строилось на классе CPHPCache. Он до сих пор встречается в старом коде и в некоторых сценариях остаётся рабочим вариантом. Разберём его устройство и чем он отличается от современной обёртки. Базовое использование <?php $cache = new CPHPCache; $cacheTime = 3600; $cacheId = ‘my_data_’ . $categoryId; $cacheDir = ‘/my_module/category/’; if ($cache->InitCache($cacheTime,…

Когда клиент спрашивает «а кто и когда поменял статус моего заказа» или «почему изменилась сумма», ответ должен опираться на реальную историю изменений, а не на память менеджера. Разберём, как устроен лог изменений заказа в 1С-Битрикс и как получить его программно. Штатный журнал истории заказа Модуль продаж D7 фиксирует историю изменений заказа автоматически — смену статуса, изменение состава корзины, изменение суммы…

«Письмо не пришло» — жалоба, за которой может стоять с десяток разных причин: от неправильного шаблона до банальной попадания в спам. Разберём системный порядок диагностики недоставленных писем в 1С-Битрикс, от самого вероятного к менее очевидному. Шаг 1. Проверка очереди писем Первым делом стоит проверить раздел Сервисы → Почтовые события → Просмотр событий — если письмо вообще не появилось в списке…

Стандартных переменных штатных почтовых событий (заказ, регистрация) часто не хватает для нестандартной коммуникации — собственное событие с собственным набором полей закрывает эту потребность. Разберём, как зарегистрировать почтовое событие с произвольными переменными и передать в него нужные данные. Регистрация нового типа почтового события Собственное почтовое событие регистрируется через административную панель в разделе Сервисы → Почтовые события → Типы почтовых событий, где…

Защита изображений товаров от копирования конкурентами или продвижение бренда через логотип на каждой фотографии — типичная причина добавлять водяной знак при загрузке. Разберём, как реализовать автоматическое нанесение водяного знака на изображения в 1С-Битрикс. Обработчик события при сохранении файла <?php use Bitrix\Main\EventManager; EventManager::getInstance()->addEventHandler( ‘main’, ‘OnAfterFileSave’, function ($fileId) { $file = CFile::GetByID($fileId)->Fetch(); if (in_array($file[‘CONTENT_TYPE’], [‘image/jpeg’, ‘image/png’], true)) { addWatermark($file); } } );…

CFile::SaveFile ожидает массив в определённом формате — но не всегда исходные данные приходят готовым файлом с диска. Разберём CFile::MakeFileArray, который упрощает подготовку такого массива из пути или URL, избавляя от ручного формирования структуры вручную. Базовое использование с локальным путём <?php $fileArray = CFile::MakeFileArray(‘/path/to/local/image.jpg’); $fileId = CFile::SaveFile($fileArray, ‘catalog’); MakeFileArray берёт на себя формирование массива с нужными ключами (name, type, tmp_name, size)…

Завершение сессии пользователя выглядит как простая операция, но имеет несколько нюансов — от разницы между выходом текущего пользователя и принудительным завершением чужой сессии до того, что реально происходит с данными при вызове. Разберём CUser::Logout. Базовый вызов для текущего пользователя <?php global $USER; $USER->Logout(); LocalRedirect(‘/’); Logout() завершает сессию текущего авторизованного пользователя — удаляет данные авторизации из сессии и очищает связанные cookie….

Классы CSite и CLang дают программный доступ к настройкам сайтов и языков установки — той же информации, что видна в административной панели через карточки сайтов и языковые настройки. Разберём их основные методы и типичные сценарии использования. Получение информации о текущем сайте <?php $siteId = SITE_ID; $site = CSite::GetByID($siteId)->Fetch(); echo $site[‘NAME’]; echo $site[‘SERVER_NAME’]; echo $site[‘EMAIL’]; Константа SITE_ID доступна в контексте выполнения…