В Bitrix есть множество функциональных возможностей, в том числе и возможность создания кастомных свойств инфоблока.
Свойства инфоблока - это параметры, которые можно задавать для каждого элемента инфоблока. Например, для элемента каталога в интернет-магазине можно задать свойства "цвет", "размер", "материал" и т.д.
Кастомные свойства - это свойства, которые вы создаете самостоятельно в соответствии с требованиями вашего проекта.
Например, попробуем создать свойство инфоблока - чекбокс (флажок Да/Нет).
Первым шагом необходимо создать новый тип свойства.
Создаём класс с названием CheckboxFlag
:
<?php
namespace App\CustomProperties;
class CheckboxFlag {
//
}
Далее нам потребуется создать описание getTypeDescription
и прописать зависимости для нашего свойства:
<?php
namespace App\CustomProperties;
class CheckboxFlag {
public static function getTypeDescription() {
return [
'PROPERTY_TYPE' => 'S',
'USER_TYPE' => 'CHECKBOX_FLAG',
'DESCRIPTION' => 'Skillline: Да / Нет (флажок)',
'GetPropertyFieldHtml' => [__CLASS__, 'GetPropertyFieldHtml'],
'GetSettingsHTML' => [__CLASS__, 'GetSettingsHTML'],
];
}
}
PROPERTY_TYPE
- тип свойства. Список доступных типов:
В нашем случае подойдет и строковое значение.
USER_TYPE
- символьный код свойства (важно использовать уникальное значение)
DESCRIPTION
- описание свойства
GetPropertyFieldHtml
и GetSettingsHTML
- служебные функции, их мы разберем далее.
Далее создаём функцию GetPropertyFieldHtml
:
<?php
namespace App\CustomProperties;
class CheckboxFlag {
public static function getTypeDescription() {
return [
'PROPERTY_TYPE' => 'S',
'USER_TYPE' => 'CHECKBOX_FLAG',
'DESCRIPTION' => 'Skillline: Да / Нет (флажок)',
'GetPropertyFieldHtml' => [__CLASS__, 'GetPropertyFieldHtml'],
'GetSettingsHTML' => [__CLASS__, 'GetSettingsHTML'],
];
}
public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) {
$html = '<input type="hidden" value="" name="'.$strHTMLControlName["VALUE"].'">';
$html .= '<input type="checkbox" size="'.$arProperty['COL_COUNT'].'" value="1" name="'.$strHTMLControlName["VALUE"].'"'.((int)$value['VALUE'] ? ' checked' : '').'>';
return $html;
}
}
Данная функция отвечает за визуальный вывод свойства в административной панели.
В функции создаём переменную $html
, в которую записываем input hidden
и input checkbox
.
hidden
- используется для сохранения пустого значения чекбокса, если не установлена галочка.
checkbox
- обратный эффект
Далее создаём функцию GetSettingsHTML
:
Данная функция отвечает за настройки свойства.
В переменной (массив) $arPropertyFields
возможно использование нескольких ключей:
HIDE
- массив названий полей свойства которые будут скрыты для редактирования.
Возможные значения:
S
- строка, N
- число и F
- файл (Y | N)SHOW
- массив полей которые должны быть показаны даже если базовое свойство их не поддерживает.
Возможные значения:
SET
- ассоциативный массив полей для принудительного выставления значений в случае если они не отображаются в форме.
Возможные значения:
USER_TYPE_SETTINGS_TITLE
- строка для отображения в качестве заголовка секции настроек
P.S. Так же у вас есть возможность добавлять и собственные настройки для свойства. Вот пример использования настройки “Не показывать в детальной карточке".
Т.к. появилась функция PrepareSettings
, ее так же нужно указать в описании свойства:
public static function getTypeDescription() {
return [
'PROPERTY_TYPE' => 'S',
'USER_TYPE' => 'CHECKBOX_FLAG',
'DESCRIPTION' => 'Skillline: Да / Нет (флажок)',
'GetPropertyFieldHtml' => [__CLASS__, 'GetPropertyFieldHtml'],
'GetSettingsHTML' => [__CLASS__, 'GetSettingsHTML'],
'PrepareSettings' => [__CLASS__, 'PrepareSettings'],
];
}
Исполняемый файл кастомного поля готов. Далее его требуется подключить.
Подключение свойства производится в файле init.php
AddEventHandler("iblock", "OnIBlockPropertyBuildList", ['App\CustomProperties\CheckboxFlag', 'getTypeDescription']);
Теперь вы можете использовать созданное вами свойство в элементах инфоблока. Для этого откройте нужный элемент инфоблока и перейдите на вкладку "Свойства".
Создайте свойство и выберите: Skillline: Да / Нет (флажок) (или ваше название).
Таким образом, вы можете создавать кастомные свойства инфоблока в Bitrix и использовать их для более удобной работы с вашими элементами.
Помимо вышеперечисленных функций свойств, существует еще несколько, например ConvertToDB
и ConvertFromDB
.
Они отвечают за сохранение и выдачу значения свойства.
Например, Вы можете хранить в своих свойствах массив PHP:
public static function ConvertToDB($arProperty, $value) {
if(empty($value['VALUE'])) {
return false;
}
$value['VALUE'] = serialize($value['VALUE']);
return $value;
}
public static function ConvertFromDB($arProperty, $value, $format = '') {
$value['VALUE'] = unserialize($value['VALUE']);
return $value;
}
И использовать его в GetPropertyFieldHtml
используя перебор массива - foreach
.
Возможности создания свойств инфоблоков безграничны - ограничивается лишь вашей фантазией и потребностью проекта.
Примеры более сложных свойств:
и многое другое…
Напишите нам и мы свяжемся с вами сразу после ознакомления с запросом (в рабочее время ~10 минут ожидания)