Bitrix: пользовательский тип свойства для инфоблока

от автора

в
Время чтения: 2 мин.

Создание пользовательского типа свойства (User Type) для инфоблока в 1С-Битрикс позволяет расширить стандартные возможности свойств. Например, можно создать свойство, которое будет отображаться как цветовая палитра, карта, сложный редактор или любой другой кастомный интерфейс.

Для создания пользовательского типа свойства нужно выполнить несколько шагов. Рассмотрим их подробно.


1. Создание класса для пользовательского типа

Для начала нужно создать PHP-класс, который будет описывать поведение нового типа свойства. Этот класс должен реализовывать методы для отображения, сохранения и обработки данных.

Пример структуры класса:

<?php
namespace MyProject\Iblock;

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

class CustomPropertyType
{
    // Возвращает описание типа свойства
    public static function GetUserTypeDescription()
    {
        return [
            'PROPERTY_TYPE' => 'S', // Тип свойства (S - строка)
            'USER_TYPE' => 'CUSTOM_TYPE', // Уникальный идентификатор типа
            'DESCRIPTION' => 'Мой кастомный тип свойства', // Описание
            'GetPropertyFieldHtml' => [__CLASS__, 'GetPropertyFieldHtml'], // Метод для отображения в админке
            'ConvertToDB' => [__CLASS__, 'ConvertToDB'], // Метод для сохранения в БД
            'ConvertFromDB' => [__CLASS__, 'ConvertFromDB'], // Метод для извлечения из БД
        ];
    }

    // Отображение поля в админке
    public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
    {
        // Пример: текстовое поле с дополнительным описанием
        return '<input type="text" name="' . $strHTMLControlName['VALUE'] . '" value="' . htmlspecialcharsbx($value['VALUE']) . '">'
            . '<br><small>Это кастомное поле</small>';
    }

    // Преобразование данных перед сохранением в БД
    public static function ConvertToDB($arProperty, $value)
    {
        // Пример: простое сохранение значения
        return $value;
    }

    // Преобразование данных после извлечения из БД
    public static function ConvertFromDB($arProperty, $value)
    {
        // Пример: простое извлечение значения
        return $value;
    }
}

2. Регистрация пользовательского типа

После создания класса нужно зарегистрировать его в системе. Это делается с помощью события OnIBlockPropertyBuildList.

Пример регистрации:

<?php
use Bitrix\Main\EventManager;

EventManager::getInstance()->addEventHandler(
    'iblock',
    'OnIBlockPropertyBuildList',
    function () {
        return \MyProject\Iblock\CustomPropertyType::GetUserTypeDescription();
    }
);

3. Подключение класса

Класс должен быть подключен в системе. Для этого можно:
— Подключить файл с классом в init.php.
— Использовать автозагрузку через Composer (если проект использует Composer).

Пример подключения в init.php:

<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/lib/CustomPropertyType.php';

4. Использование пользовательского типа

После регистрации типа его можно использовать в свойствах инфоблока.

  1. Перейдите в админку Битрикс.
  2. Откройте раздел КонтентИнфоблоки.
  3. Выберите нужный инфоблок и перейдите в Свойства.
  4. Создайте новое свойство.
  5. В поле Тип свойства выберите ваш кастомный тип (например, «Мой кастомный тип свойства»).

5. Пример сложного типа: цветовая палитра

Если нужно создать более сложный тип (например, выбор цвета), можно расширить класс:

public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
    // Пример: поле выбора цвета
    return '<input type="color" name="' . $strHTMLControlName['VALUE'] . '" value="' . htmlspecialcharsbx($value['VALUE']) . '">';
}

6. Дополнительные методы

Вы можете добавить другие методы для обработки данных:
GetAdminFilterHTML: Для отображения фильтра в админке.
GetPublicViewHTML: Для отображения значения на сайте.
GetPublicEditHTML: Для редактирования значения на сайте.


7. Пример использования в шаблоне

Чтобы вывести значение кастомного свойства на сайте, используйте стандартные методы работы со свойствами:

<?php
$properties = CIBlockElement::GetProperty(
    $arResult['IBLOCK_ID'], // ID инфоблока
    $arResult['ID'], // ID элемента
    [], // Дополнительные параметры
    ['CODE' => 'CUSTOM_PROPERTY_CODE'] // Символьный код свойства
);

while ($property = $properties->Fetch()) {
    echo $property['VALUE']; // Выводим значение свойства
}
?>

Итог

Создание пользовательского типа свойства в Битрикс позволяет гибко настраивать инфоблоки под задачи проекта. Если нужно больше примеров или помощь с конкретной задачей, дай знать! 😊


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сколько будет 1 + 7?