🚀Автоматизируем рутину в Bitrix: Добавляем картинки в статьи по умолчанию
При ведении блога или новостного раздела на "1С-Битрикс: Управление сайтом" часто возникает рутинная задача: для каждой новой статьи нужно вручную загружать одни и те же изображения для анонса и детального просмотра. Это отнимает время и повышает риск ошибки. В этой статье мы разберем, как раз и навсегда решить эту проблему с помощью небольшого, но мощного PHP-кода.
💡В чем суть? Знакомство с init.php и событиями Bitrix
В архитектуре Bitrix есть волшебный файл — `init.php`. Обычно он находится по пути `/local/php_interface/init.php` (это предпочтительный путь, так как он не затирается при обновлениях системы). Этот файл — точка входа для любого кастомного кода. Код, размещенный здесь, выполняется при каждой загрузке страницы. Мы воспользуемся двумя ключевыми возможностями Bitrix: - **Файл `init.php`**, чтобы разместить нашу логику. - **Система событий**, чтобы наша логика выполнялась не всегда, а только в нужный момент. Мы будем "ловить" событие `OnBeforeIBlockElementAdd` — оно срабатывает прямо перед тем, как новый элемент (в нашем случае — статья) будет добавлен в инфоблок.
🛠️Пошаговая реализация
Наша задача — написать функцию, которая проверяет, что создается статья в нужном нам блоге, и если у нее не заданы картинки, подставляет их из заранее определенных файлов.
Шаг 1: Подготовка
Перед тем как писать код, нам нужно узнать три вещи: - **ID инфоблока** нашего блога. Найти его можно в админ-панели, открыв инфоблок на редактирование и посмотрев на параметр `ID=XX` в URL. - **ID сайта**, на котором находится блог (это критически важно для многосайтовых конфигураций). Найти его можно в разделе `Настройки → Настройки продукта → Сайты → Список сайтов`. - **Полные пути на сервере** к файлам изображений, которые мы будем подставлять (например, `/home/bitrix/www/img/default_preview.jpg`).
Шаг 2: Код для init.php
Откройте файл `/local/php_interface/init.php` и добавьте в него следующий код:
<?php// Добавляем обработчик события OnBeforeIBlockElementAddAddEventHandler("iblock", "OnBeforeIBlockElementAdd", "AddDefaultPicturesToBlogPost");function AddDefaultPicturesToBlogPost(&$arFields){ // --- БЛОК НАСТРОЕК --- // 1. ID вашего инфоблока "Блог" $iblockIdForBlog = 74; // <-- Замените на ваш ID // 2. ID сайта, для которого работает автоматизация (например, 's1', 's2') $targetSiteId = 's2'; // <-- Замените на ID вашего сайта // 3. Полные пути к изображениям на сервере $announcementImagePath = '/home/bitrix/www/img/neural_net_preview.webp'; $detailedImagePath = '/home/bitrix/www/img/neural_net_detail.webp'; // --- КОНЕЦ НАСТРОЕК --- // Проверяем, что мы на нужном сайте и работаем с нужным инфоблоком if (defined('SITE_ID') && SITE_ID == $targetSiteId && $arFields["IBLOCK_ID"] == $iblockIdForBlog) { // Если картинка для анонса не загружена вручную, добавляем свою if (empty($arFields["PREVIEW_PICTURE"])) { $arFields["PREVIEW_PICTURE"] = CFile::MakeFileArray($announcementImagePath); } // Если детальная картинка не загружена вручную, добавляем свою if (empty($arFields["DETAIL_PICTURE"])) { $arFields["DETAIL_PICTURE"] = CFile::MakeFileArray($detailedImagePath); } }}?>
Шаг 3: Разбор полетов — как это работает?
- `AddEventHandler(...)`: Эта строка "подписывает" нашу функцию `AddDefaultPicturesToBlogPost` на событие создания элемента инфоблока. - `function AddDefaultPicturesToBlogPost(&$arFields)`: Наша функция, которая принимает по ссылке (знак `&`) массив полей нового элемента. Это позволяет нам изменять его на лету. - `if (defined('SITE_ID') && ...)`: Это ключевая проверка. Она гарантирует, что код сработает только для нужного сайта и нужного инфоблока, не затрагивая другие части системы. - `if (empty($arFields["..."]))`: Мы проверяем, не загрузил ли редактор картинку вручную. Если поле пустое — действуем. Это дает возможность при необходимости переопределить стандартные изображения. - `CFile::MakeFileArray(...)`: Стандартная функция API Bitrix, которая превращает серверный путь к файлу в массив, понятный для файловых полей Bitrix.
⚠️ Частая ошибка новичков
При копировании кода в `init.php` убедитесь, что вы копируете **только чистый PHP-к��д**. Не должно быть никаких номеров строк, HTML-тегов или команд терминала. Файл должен начинаться с `<?php` и заканчиваться `?>`.
✅ Заключение
Готово! Теперь при создании новой статьи в вашем блоге вам больше не нужно думать о картинках — система подставит их сама. Это простое, но эффективное решение экономит время, снижает количество ошибок и делает работу с контентом немного приятнее. Используя этот же принцип, можно автоматизировать множество других рутинных задач в Bitrix: устанавливать значения по умолчанию для свойств, изменять текст перед сохранением, отправлять уведомления и много�� другое. Экспериментируйте!