bitrix пользовательские свойства инфоблока

Пользовательское свойство для инфоблока можно добавить через функцию AddEventHandler('iblock', 'OnIBlockPropertyBuildList') в файле bitrix/php_interface/site_id/ init.php (если файла нет, его надо создать).

В инфоблоке при выборке свойств появится новый пункт «Имя поля».

Но поле ввода для данного значения пока не выводится.

Чтобы можно было вводить и сохранять значения для нового свойства, надо добавить параметр GetPropertyFieldHtml .

Теперь поле для нового свойства выводится и его можно редактировать.

Информационный блок — модуль, позволяющий публиковать различные типы информации: товары, новости, статьи, фотографии. Поскольку нельзя заранее сказать, какие свойства потребуются для описания элемента инфоблока — в Битрикс предусмотрено создание пользовательских свойств, кроме предопределенных.

Давайте создадим пять пользовательских свойств разного типа и посмотрим, как их в дальнейшем получить из БД и вывести в шаблоне. В панели управления переходим на страницу добавления/редактирования инфоблока, вкладка «Свойства» и добавляем свойства

  • AUTHOR — автор публикации, тип «Строка»
  • RATING — рейтинг публикации, тип «Список»
  • GALLERY — прикрепленные изображения, тип «Файл»
  • UPDATE — дата обновления, тип «Дата»
  • NOTE — примечание к публикации, тип «HTML/Текст»

Теперь на странице добавления/редактирования элемента инфоблока мы можем задать значения этих свойств:

Нативные компоненты Битрикс в настройках позволяют указать, какие пользовательские свойства должны быть доступны в шаблоне. Мы сделаем это сами:

Теперь массив $arResult имеет вид:

Все готово, можем показать пользовательские свойства в шаблоне:

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

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

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

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

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 — массив с контрольными данными для формы на странице редактирования элемента инфоблока

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

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

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

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

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

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

Оцените статью