tryhardy/component.params

bitrix module for extending components params

1.0.0 2024-12-12 09:19 UTC

This package is auto-updated.

Last update: 2025-06-12 10:20:07 UTC


README

  1. Описание
  2. Пример использования
  3. Вывод <input type="text">
  4. Вывод <select>
  5. Вывод <textarea>
  6. Вывод диалогового окна с выбором элемента инфоблока (по ID)
  7. Вывод диалогового окна с выбором выбора раздела инфоблока
  8. Вывод <input type="checkbox">
  9. Вывод диалогового окна с выбором файла
  10. Вывод вложенных групп полей

Описание

Простой модуль для настройки параметров компонентов без необходимости хранить значения параметров в отдельной таблице в БД.

Значительно экономит время на написании и отладке миграций.

Состав полей можно конфигурировать практически в любых комбинациях.

Полезно, если на проекте много плашек с фактоидами и табами, которые нет смысла хранить в БД.

Пример использования

Пример использования

Вывод <input type="text">

<?php
//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    //Заводим пустую коллекцию полей (в нее будем добавлять селекты, инпуты, радиобаттоны и т.д.)
    $сollection = new Fields\FieldsCollection();
        
    //Простое тектовое поле: <input type="text" name="theme">
    $simpleInputField = (new Fields\Field(name: 'name'))->setLabel('Some random label');
    //Добавляем это поле в коллекцию
    $сollection->add($simpleInputField);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "INPUTS_BLOCK",
        name: "Ссылки:",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
}

?>
-23-06-2024.09_26_08.mp4

Вывод <select>

<?php
//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    //Заводим пустую коллекцию полей (в нее будем добавлять селекты, инпуты, радиобаттоны и т.д.)
    $сollection = new Fields\FieldsCollection();
    
    //Создаем пустой <select name="{name}"></select>
    $selectField = (new Fields\SelectField(name: 'theme'))->setLabel('Тема');
    // Создаем коллекцию объектов <option> (пока что пустую)
    $selectOptionsCollection = new Fields\SelectOptionCollection();
    //Создаем тег <option value="blue">Синяя тема</option>
    $option1 = new Fields\SelectOption(text: "Синяя тема", value: "blue", selected: false);
    //Добавляем option1 в коллекцию объектов option
    $selectOptionsCollection->add($option1);
    
    //Создаем тег <option value="green">Зеленая тема</option>
    $option2 = new Fields\SelectOption(text: "Зеленая тема", value: "green", selected: false);
    //Добавляем option2 в коллекцию объектов option
    $selectOptionsCollection->add($option2);
    
    //Добавляем коллекцию объектов <option> внутрь объекта <select>
    $selectField->setCollection($selectOptionsCollection);
    
    //Добавляем получившийся <select> в коллекцию полей
    $сollection->add($selectField);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "SELECTS_BLOCK",
        name: "Селекты:",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
}

?>
-23-06-2024.09_31_28.mp4

Вывод <textarea>

//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    $сollection = new Fields\FieldsCollection();
    
    //<textarea name="description"></textarea>
    $textareaField = (new Fields\TextareaField(name: "description"))->setLabel("Описание");
    
    //Добавляем получившийся <textarea> в коллекцию полей
    $сollection->add($textareaField);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "DESCRIPTION_BLOCK",
        name: "Заголовок с описанием:",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
    
}
-23-06-2024.11_48_46.mp4

Вывод диалогового окна с выбором элемента инфоблока (по ID)

//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    $сollection = new Fields\FieldsCollection();
    
    $field = (new Fields\IblockField(iblockId: 10, name: "element"))->setLabel("Элемент инфоблока");
    
    $сollection->add($field);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "ELEMENTS_IBLOCK",
        name: "Элементы инфоблока",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
    
}

Вывод диалогового окна с выбором выбора раздела инфоблока (по ID)

//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    $сollection = new Fields\FieldsCollection();
    
    $field = (new Fields\IblockField(iblockId: 10, name: "section"))->setLabel("Раздел инфоблока")->setIsSection();
    
    $сollection->add($field);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "SECTIONS_IBLOCK",
        name: "Разделы инфоблока",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
    
}

Вывод <input type="checkbox">

//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    $сollection = new Fields\FieldsCollection();
    
    $field = (new Fields\CheckboxField(name: "agreement"))
        ->setLabel("Подпись для чекбокса")
        ->setChecked(); //Устанавливаем, если нужно, чтобы чекбокс был по умолчанию выбран
    
    $сollection->add($field);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "CHECKBOX_BLOCK",
        name: "Множественный блок с чекбоксами",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
    
}
video_3.mp4

Вывод диалогового окна с выбором файла

//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {
    $сollection = new Fields\FieldsCollection();
    
    $field1 = (new Fields\FileField(name: "image_desc"))->setLabel("Изображение для таба (Desc)");
    $field2 = (new Fields\FileField(name: "image_tab"))->setLabel("Изображение для таба (Tab)");
    $field3 = (new Fields\FileField(name: "image_mob"))->setLabel("Изображение для таба (Mob)");
    $сollection->add($field1);
    $сollection->add($field2);
    $сollection->add($field3);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "IMAGES_BLOCK",
        name: "Множественный блок с изображениями",
        parent: "ADDITIONAL_PARAMETERS",
        multiple: "Y",
        refresh: "N"
    );
    
}
-23-06-2024.09_50_21.mp4

Вывод вложенных групп полей

//в файле .parameters.php шаблона компонента
use \Component\Params\Fields;

/**
 * @global  CMain    $APPLICATION
 * @var     array    $arParams
 * @var     array    $arCurrentValues
 * @var     array    $arResult
 */

if (\Bitrix\Main\Loader::includeModule('component.params')) {

    //Создаем пустую коллекцию полей
    $сollection = new FieldsCollection();
    //Добавляем в нее <input type="text" name="name" placeholder="Заголовок">
	$сollection->add((new Field('name', 'Заголовок'))->setLabel('Заголовок'));
    //Добавляем в нее <textarea name="descr" placeholder="Описание">
	$сollection->add((new TextareaField('descr', 'Описание'))->setLabel('Описание'));

    //Создаем множественную пустую группу полей, которая будет вложена внутрь коллекции $сollection
    $groupField = (new GroupFields('groupFields', 'Группа полей'))->setMultiple();
	//Настраиваем коллекцию полей, которые будут вложены в экземпляр $groupField
	$GroupFieldsCollection = new FieldsCollection();
	$GroupFieldsCollection->add((new Field('href', 'Href'))->setLabel('Href'));
	$GroupFieldsCollection->add((new Field('text', 'Название ссылки'))->setLabel('Описание'));
	$GroupFieldsCollection->add((new IblockField((int)$arCurrentValues['IBLOCK_ID'], 'iblock'))->setLabel('Инфоблок'));
	$groupField->setFields($GroupFieldsCollection);
	
	//Добавляем группу полей в коллекцию 
	$сollection->add($groupField);
    
    //Добавляем получившуюся коллекцию полей в параметры компонента
    \Component\Params\Helpers\ComponentParams::setCustomParams(
        $arTemplateParameters,
        $arCurrentValues,
        fieldsCollection: $сollection,
        code: "GROUP_FIELDS",
        name: "Кастомный блок",
        parent: "ADDITIONAL_SETTINGS",
        multiple: "Y",
        refresh: "N"
    );
    
}
-23-06-2024.09_53_25.mp4