Содержание
Как быстро сделать кастомный тип свойства в Битриксе.
Заготовка
Необходимо в файле init.php создать класс и обработчик который будет его вызывать:
После этого в вашем списке свойств появится новое:
Теперь можно эту заготовку доработать до нужного вида.
Базовые типы свойств
Все пользовательские свойства имеют в основе какой-то базовый тип и отличаются, как правило, формой работы в админской части. К примеру, свойства дата имеет базовый тип Число. Вот список этих основных типов:
Хранение данных в базе
Значение каждого свойства может иметь две составляющие — это VALUE и DESCRIPTION .
Функция вывода в форме редактирования элемента
В описанном примере это GetPropertyFieldHtml и у нее три аргумента:
Кейс: свойство время
Тут два пути, зависит от деталей задачи.
В обоих случаях перед сохранением и выводом добавляете свои обработчики. Пример функции выше с обработчиками будет такой:
Как логично вытекает эти функции надо добавить в наш класс. Если брать пример с календарем, то можно так:
И последнее, это вывод поля с календарем на странице редактирования. Берем стандартный Битриксовский:
В Битриксе есть тип св-ва "Дата/Время", но нет типа "Время".
По гуглению о добавлении кастомного типа выдается только куча кода, без объяснений что делается и куда его вставлять.
В магазине решения для добавления этого типа я не нашел.
Прошу помочь примером/ссылкой
2 ответа 2
Опишу как быстро сделать кастомный тип свойства в Битриксе. Для этого достаточно даже стартовых знаний по этой системе.
Необходимо в файле init.php создать класс и обработчик который будет его вызывать. Небольшой комментарий по файлу init.php. Часто его можно найти или в папке /bitrix/php_interface/ или /bitrix/php_interface/#id_сайта# или /local/php_interface/. Если вы его там не нашли, то надо его создать. Важно отметить, что ошибки в файле критичны и если они будут допущены в коде, то сайт сразу ляжет.
Я покажу очень простую и понятную заготовку:
После этого в вашем списке свойств появится новое:
Теперь можно эту заготовку доработать до нужного вида.
Для удобства добавлю еще ряд дополнительных комментариев.
Базовые типы свойств: Все пользовательские свойства имеют в основе какой-то базовый тип и отличаются, как правило, формой работы в админской части. К примеру, свойства дата имеет базовый тип Число. Вот список этих основных типов:
- Строка — S
- Число — N
- Список — L
- Файл — F
- Привязка к элементам — E
- Привязка к разделам — G
Хранение данных в базе
Значение каждого свойства может иметь две составляющие — это VALUE и DESCRIPTION
Функция вывода в форме редактирования элемента
В описанном примере это GetPropertyFieldHtml и у нее три аргумента:
- $arProperty — массив данных по этому типу свойств
- $value — значение хранимое в базе данных для конкретного элемента инфоблока
- $strHTMLControlName — массив с контрольными данными для формы на странице редактирования элемента инфоблока
Конкретно ваш случай с временем.
Тут два пути, зависит от деталей задачи.
- Выводите свойство как строку с маской 00:00 (может с секундами 00:00:00)
- Выводите поле с календарем, как при вводе даты
В обоих случаях перед сохранением и выводом добавляете свои обработчики. Пример функции выше с обработчиками будет такой:
Как логично вытекает эти функции надо добавить в наш класс. Если брать пример с календарем, то можно так:
И последнее, это вывод поля с календарем на странице редактирования. Берем стандартный Битриксовский:
Как создать кастомный тип свойства инфоблока, состоящий из трех полей с типами строка, файл, 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 не заполнен, то свойство не сохраняется.
само значение в итоге записано из массивов в строки. можно также сделать сериализацию.