🚀Автоматизируем рутину в 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
// Добавляем обработчик события OnBeforeIBlockElementAdd
AddEventHandler("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: устанавливать значения по умолчанию для свойств, изменять текст перед сохранением, отправлять уведомления и много�� другое. Экспериментируйте!
Ищете надежного партнера по веб-разработке и автоматизации? Мы помогаем бизнесу расти с помощью современных технологий, автоматизации процессов и экспертного SEO. Свяжитесь с нами, чтобы обсудить вашу задачу.