Разработка

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

🚀Автоматизируем рутину в 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: устанавливать значения по умолчанию для свойств, изменять текст перед сохранением, отправлять уведомления и много�� другое. Экспериментируйте!