Свой тип свойства инфоблока битрикс

Как быстро сделать кастомный тип свойства в Битриксе.

Заготовка

Необходимо в файле init.php создать класс и обработчик который будет его вызывать:

После этого в вашем списке свойств появится новое:

Теперь можно эту заготовку доработать до нужного вида.

Базовые типы свойств

Все пользовательские свойства имеют в основе какой-то базовый тип и отличаются, как правило, формой работы в админской части. К примеру, свойства дата имеет базовый тип Число. Вот список этих основных типов:

Хранение данных в базе

Значение каждого свойства может иметь две составляющие — это VALUE и DESCRIPTION .

Функция вывода в форме редактирования элемента

В описанном примере это GetPropertyFieldHtml и у нее три аргумента:

Кейс: свойство время

Тут два пути, зависит от деталей задачи.

В обоих случаях перед сохранением и выводом добавляете свои обработчики. Пример функции выше с обработчиками будет такой:

Как логично вытекает эти функции надо добавить в наш класс. Если брать пример с календарем, то можно так:

И последнее, это вывод поля с календарем на странице редактирования. Берем стандартный Битриксовский:

В Битриксе есть тип св-ва "Дата/Время", но нет типа "Время".

По гуглению о добавлении кастомного типа выдается только куча кода, без объяснений что делается и куда его вставлять.

В магазине решения для добавления этого типа я не нашел.

Прошу помочь примером/ссылкой

2 ответа 2

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

Необходимо в файле init.php создать класс и обработчик который будет его вызывать. Небольшой комментарий по файлу init.php. Часто его можно найти или в папке /bitrix/php_interface/ или /bitrix/php_interface/#id_сайта# или /local/php_interface/. Если вы его там не нашли, то надо его создать. Важно отметить, что ошибки в файле критичны и если они будут допущены в коде, то сайт сразу ляжет.

Читайте также  Почему число 69 пошлое

Я покажу очень простую и понятную заготовку:

После этого в вашем списке свойств появится новое:

Теперь можно эту заготовку доработать до нужного вида.

Для удобства добавлю еще ряд дополнительных комментариев.

Базовые типы свойств: Все пользовательские свойства имеют в основе какой-то базовый тип и отличаются, как правило, формой работы в админской части. К примеру, свойства дата имеет базовый тип Число. Вот список этих основных типов:

  • Строка — S
  • Число — N
  • Список — L
  • Файл — F
  • Привязка к элементам — E
  • Привязка к разделам — G

Хранение данных в базе

Значение каждого свойства может иметь две составляющие — это VALUE и DESCRIPTION

Функция вывода в форме редактирования элемента

В описанном примере это GetPropertyFieldHtml и у нее три аргумента:

  • $arProperty — массив данных по этому типу свойств
  • $value — значение хранимое в базе данных для конкретного элемента инфоблока
  • $strHTMLControlName — массив с контрольными данными для формы на странице редактирования элемента инфоблока

Конкретно ваш случай с временем.

Тут два пути, зависит от деталей задачи.

  1. Выводите свойство как строку с маской 00:00 (может с секундами 00:00:00)
  2. Выводите поле с календарем, как при вводе даты

В обоих случаях перед сохранением и выводом добавляете свои обработчики. Пример функции выше с обработчиками будет такой:

Как логично вытекает эти функции надо добавить в наш класс. Если брать пример с календарем, то можно так:

И последнее, это вывод поля с календарем на странице редактирования. Берем стандартный Битриксовский:

Как создать кастомный тип свойства инфоблока, состоящий из трех полей с типами строка, файл, HTML/текст.

Пока получилось сделать вот это

Но сохраняется только одно значение для всех полей

  • Вопрос задан более года назад
  • 739 просмотров
Читайте также  Самые тихие вентиляторы для компьютера

1) т.к. у вас несколько полей, то они не могут иметь одинаковый name. надо каждому задать

name="’.$strHTMLControlName["VALUE"].'[1]"
name="’.$strHTMLControlName["VALUE"].'[2]"
name="’.$strHTMLControlName["VALUE"].'[3]"

2) Базовый тип вашего свойства — строка. поэтому сохранение значения в базу происходит просто как строка. файл никуда из формы не сохраняется и никак не обрабатывается.
Сохранение в базу вы должны написать сами вот тут
function ConvertToDB($arProperty, $value) <
return $value;
>

например, из поля $value[‘VALUE’][2] — у вас будет картинка. ее сначала надо будет сохранить, можно средствами же битрикса, чтобы файл был записан в таблицу b_file, и у вас только id файла осталась, и уже это id записывать в значение кастомного свойства.

С полями типа файл кастомные свойства не делала, но вот пример сохранения строка+селект с множественным выбором+строка

function ConvertToDB($arProperty, $value) <
if(!$value[‘VALUE’][1]) return false;
$value[‘VALUE’][2]= implode(‘+’, $value[‘VALUE’][2]);
$value[‘VALUE’]= implode(‘||’, $value[‘VALUE’]);
return $value;
>

т.е. тут еще проверяю, если первый input не заполнен, то свойство не сохраняется.
само значение в итоге записано из массивов в строки. можно также сделать сериализацию.

Ссылка на основную публикацию
Adblock
detector