Разработка

Фотки автоматом

🚀Автоматизируем рутину в 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. Свяжитесь с нами, чтобы обсудить вашу задачу.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →