Как настроить параметры компонента в 1С-Битрикс через .parameters.php?

Как настроить параметры компонента в 1С-Битрикс через .parameters.php?

Вы описали поле в .parameters.php, а в визуальном редакторе его нет. Или поле видно, но в component.php массив $arParams пустой, кроме CACHE_TIME. Знакомая боль: цепочка "форма настроек → IncludeComponent → логика компонента" рвётся в неочевидном месте. Ниже - пошаговый разбор файла .parameters.php в 1С-Битрикс: Управление сайтом: от пустого массива $arComponentParameters до рабочей формы и проверки, что выбранные значения доходят до $arParams.

Файл .parameters.php нужен только для формы в режиме редактирования: на публичном хите он не подключается. Вы описываете GROUPS и PARAMETERS, контент-менеджер выбирает значения в админке, а IncludeComponent передаёт их в $arParams. Если поле не видно - проверьте TYPE. Если $arParams пустой в D7-классе - проверьте return в onPrepareComponentParams().

Речь про коробочную CMS на вашем сервере, не про облачный портал Bitrix24. Если вы только знакомитесь с анатомией компонента, сначала прочитайте обзор структуры компонента - здесь углубимся именно в параметры и форму настроек.

Параметры - настройки, которые редактор меняет без правки PHP: ID инфоблока, лимит элементов, флаги вывода. Файл .parameters.php описывает их для визуального редактора.

Разберите, зачем нужен .parameters.php и когда он выполняется

Сравнительная таблица: когда выполняется .parameters.php в Битрикс

component.php (или D7-класс) работает при каждом показе страницы: читает $arParams и отдаёт данные в шаблон. .parameters.php выполняется только когда кто-то открывает окно "Настройки компонента" в режиме правки. Официальный урок разработчика прямо говорит: при обычном хите файл не подключается.

Типичная ошибка - include __DIR__.'/.parameters.php' в class.php "для дефолтов". На практике это антипаттерн: дефолты задавайте в onPrepareComponentParams(). Параметры из PHP-страницы и из формы редактора сходятся в один $arParams, но описываются в разных местах.

Делайте: храните .parameters.php в корне компонента: /local/components/vendor/name/.parameters.php. Не делайте: не ждите, что код из этого файла выполнится на публичной странице - для runtime нужен только component.php.

Схема цепочки:
Разработчик пишет .parameters.php → редактор видит форму → сохраняет настройки → IncludeComponent передаёт arParams → component.php получает $arParams → шаблон выводит результат

Создайте минимальный .parameters.php с GROUPS и PARAMETERS

Схема workflow: от GROUPS/PARAMETERS до $arParams

Файл возвращает массив $arComponentParameters с двумя ключами верхнего уровня: GROUPS (вкладки в форме) и PARAMETERS (сами поля). Минимальный рабочий пример - одна группа и одно текстовое поле:

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die();
}

$arComponentParameters = [
    'GROUPS' => [
        'MAIN' => [
            'NAME' => 'Основные',
            'SORT' => 100,
        ],
    ],
    'PARAMETERS' => [
        'TITLE' => [
            'PARENT' => 'MAIN',
            'NAME' => 'Заголовок блока',
            'TYPE' => 'STRING',
            'DEFAULT' => 'Новости',
        ],
        'COUNT' => [
            'PARENT' => 'MAIN',
            'NAME' => 'Количество элементов',
            'TYPE' => 'STRING',
            'DEFAULT' => '5',
        ],
    ],
];
  1. Создайте .parameters.php рядом с component.php.
  2. Добавьте GROUPS - вкладку с NAME и SORT.
  3. Опишите PARAMETERS - PARENT, NAME, TYPE, DEFAULT для каждого поля.
  4. Подключите компонент через IncludeComponent с теми же ключами в arParams.
  5. Откройте настройки в режиме правки и сохраните значения.
  6. Проверьте $arParams в component.php - временно print_r.

Делайте: совпадение ключей в PARAMETERS и в arParams вызова IncludeComponent. Не делайте: не оставляйте параметр без TYPE - без него поле не появится в форме, даже если ключ прописан в массиве.

Выберите TYPE и настройте REFRESH для зависимых списков

Чеклист: TYPE, REFRESH и проверка $arParams

TYPE определяет виджет в форме. Для 90% задач хватает четырёх типов:

TYPE Когда использовать Обязательные ключи
STRING Текст, число как строка, URL DEFAULT
LIST Выпадающий список, в том числе инфоблоки VALUES (массив value => label), при необходимости REFRESH
CHECKBOX Флаг да/нет DEFAULT (Y или N)
CUSTOM Нестандартное поле с JS JS_FILE, JS_EVENT, JS_DATA

Для каскада "тип инфоблока → ID инфоблока" на поле типа ставят 'REFRESH' => 'Y'. После выбора значения и нажатия OK форма перезагружается, и второй LIST может построить VALUES с учётом $arCurrentValues['IBLOCK_TYPE']. Если инфоблок ещё не создан, сначала пройдите гайд по созданию инфоблока.

'IBLOCK_TYPE' => [
    'PARENT' => 'DATA',
    'NAME' => 'Тип инфоблока',
    'TYPE' => 'LIST',
    'VALUES' => $arIBlockType,
    'REFRESH' => 'Y',
],
'IBLOCK_ID' => [
    'PARENT' => 'DATA',
    'NAME' => 'Инфоблок',
    'TYPE' => 'LIST',
    'VALUES' => $arIBlock[$arCurrentValues['IBLOCK_TYPE'] ?? ''] ?? [],
    'REFRESH' => 'Y',
],

Делайте: REFRESH только там, где список зависит от другого поля. Не делайте: не ставьте REFRESH на каждое поле подряд - форма будет дёргаться при каждом клике.

Добавьте параметры шаблона через templates/.default/.parameters.php

Настройки шаблона лежат в templates/.default/.parameters.php и описываются в $arTemplateParameters. Пример: у шаблона "слайдер" - автопрокрутка, у "списка" - число колонок.

В файле шаблона доступен $arCurrentValues - текущие значения всех параметров. Им пользуются, чтобы показать поле только при определённом режиме:

if (($arCurrentValues['VIEW_MODE'] ?? '') === 'SLIDER') {
    $arTemplateParameters['AUTOPLAY'] = [
        'NAME' => 'Автопрокрутка',
        'TYPE' => 'CHECKBOX',
        'DEFAULT' => 'N',
    ];
}

В template.php значения читают через $arParams['AUTOPLAY'] - ключи шаблонных параметров тоже попадают в общий $arParams.

Делайте: выносите в шаблон только то, что меняет вёрстку, а не бизнес-логику. Не делайте: не дублируйте один и тот же ключ и в корневом .parameters.php, и в шаблонном - получите путаницу в форме.

Локализуйте подписи через lang/ru/.parameters.php

Подписи NAME выносите в lang/ru/.parameters.php через $MESS и GetMessage:

// lang/ru/.parameters.php
$MESS['GROUP_MAIN'] = 'Основные';
$MESS['PARAM_TITLE'] = 'Заголовок блока';

// .parameters.php
$arComponentParameters['GROUPS']['MAIN']['NAME'] = GetMessage('GROUP_MAIN');
$arComponentParameters['PARAMETERS']['TITLE']['NAME'] = GetMessage('PARAM_TITLE');

Делайте: один ключ $MESS на подпись. Не делайте: не смешивайте GetMessage и голый текст без причины.

Прогоните чек-лист: форма видна, $arParams не пустой

Когда "всё вроде правильно, но не работает", в реальном проекте пройдите шесть пунктов по порядку:

  1. TYPE задан у каждого параметра в PARAMETERS - без TYPE поле не рендерится.
  2. PARENT совпадает с ключом группы в GROUPS - иначе поле уйдёт на несуществующую вкладку.
  3. Ключ совпадает с тем, что вы читаете в component.php и передаёте в IncludeComponent.
  4. onPrepareComponentParams возвращает массив в D7-классе. Пустой метод без return обнуляет все кастомные ключи - частая ошибка на форумах.
  5. Кеш компонента сброшен после смены параметров, если включён CACHE_TYPE=A.
  6. Не путаете runtime и редактор - .parameters.php не выполняется на хите, дефолты задавайте в onPrepareComponentParams, а не через include файла параметров.

Для отладки включите вывод ошибок по инструкции для settings.php. Ключи с тильдой (~IBLOCK_ID) - сырое значение; в логике берите ключ без тильды.

Делайте: фиксируйте дефолты в onPrepareComponentParams, если параметр может не прийти из формы. Не делайте: не копируйте чужой .parameters.php без проверки TYPE и PARENT - скопируете и чужие баги.

Что дальше

После рабочей формы параметров логично связать компонент с данными: выборка элементов через GetList или D7 ORM, реакция на события ядра - через обработчик событий. Если нужна помощь с кастомным компонентом под ваш проект - напишите нам, разберём задачу до рабочей формы в редакторе.

Автор: Максим Мольков, разработчик 1С-Битрикс.
Источники: официальный урок "Параметры компонента", блог разработчиков по .parameters.php, документация BitrixFramework по созданию компонента.

Частые вопросы

Чем .parameters.php отличается от component.php?

.parameters.php описывает форму настроек в визуальном редакторе и выполняется только при её открытии. component.php (или D7-класс) работает при каждом показе страницы и получает готовый массив $arParams. Логику выборки и вывода пишите в component.php, описание полей для редактора - в .parameters.php.

Какие типы параметров есть в Битрикс?

Чаще всего используют STRING, LIST, CHECKBOX и CUSTOM. Дополнительно встречаются FILE, COLORPICKER, NUMBER. Тип задаётся ключом TYPE в массиве параметра. Без TYPE поле в форме не появится.

Зачем REFRESH в parameters.php?

REFRESH=Y говорит форме перезагрузиться после выбора значения и нажатия OK. Нужен для зависимых списков: сначала выбирают тип инфоблока, затем подгружают список инфоблоков этого типа. Без REFRESH второй список не узнает о смене первого поля.

Можно ли описать параметры только для одного шаблона?

Да. Создайте .parameters.php внутри папки шаблона, например templates/.default/.parameters.php, и заполните массив $arTemplateParameters. Эти поля появятся в настройках только когда выбран этот шаблон.

Как передать выбранный инфоблок в компонент?

Добавьте в .parameters.php LIST-параметры IBLOCK_TYPE и IBLOCK_ID с REFRESH=Y, постройте VALUES из CIBlockType::GetList и CIBlock::GetList. После сохранения формы ID попадёт в $arParams['IBLOCK_ID'] и его можно использовать в GetList или D7-запросе.

Можно ли задать параметр только из PHP на странице, без формы?

Да. Передайте ключ в массиве arParams при IncludeComponent. Если параметр не описан в .parameters.php, он всё равно попадёт в $arParams, но не будет виден в визуальном редакторе. Для скрытых технических флагов это нормальная практика.

Читайте также

Интеграции с 1С и API
946 6 мин.

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Пошаговая настройка регистрации на сайте битрикс: Главный модуль, main.register, system.auth.form и sale.personal.section с историей заказов и 152-ФЗ.
Интеграции с 1С и API
675 15 мин.

Что такое компонент в Битриксе и как он работает

Каждый разработчик, впервые столкнувшийся с Битриксом, проходит через своеобразный обряд посвящения. Вначале кажется, что это просто CMS, где можно поправить HTML в визуальном редакторе или дописать пару строк CSS. Но однажды наступает момент, когда нужно изменить логику вывода новостей, отфильтровать товары по хитрому свойству или добавить на страницу нечто совершенно новое. И тут он впервые слышит это слово — «компонент». Для многих этот момент становится стеной. Система, казавшаяся понятной, вдруг превращается в черный ящик, полный непонятных файлов и странных переменных. Но стоит лишь раз заглянуть под капот, как эта стена рассыпается, превращаясь в набор удивительно логичных и мощных строительных блоков. Понимание компонентов — это тот самый щелчок, после которого разработка на Битрикс из мучения превращается в творчество.

Эта статья — ваш проводник в мир компонентов «1С-Битрикс». Мы не будем сыпать сухими терминами из документации. Вместо этого мы совершим путешествие: от философии, заложенной в эту архитектуру, до мельчайших деталей её работы. Мы разберем компонент на атомы — его файлы, логику, шаблон, параметры — и соберем обратно, чтобы вы не просто знали, что это, но и глубоко понимали, почему это работает именно так. Это знание — ключ к эффективной и профессиональной разработке на Битрикс.

Интеграции с 1С и API
605 2 мин.

Установка Composer в 1С-Битрикс

Установка Composer в проекте на 1С-Битрикс требует учета особенностей платформы, чтобы обеспечить корректную работу и интеграцию с системой.