Пользовательское свойство для инфоблока можно добавить через функцию 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 — массив с контрольными данными для формы на странице редактирования элемента инфоблока
Конкретно ваш случай с временем.
Тут два пути, зависит от деталей задачи.
- Выводите свойство как строку с маской 00:00 (может с секундами 00:00:00)
- Выводите поле с календарем, как при вводе даты
В обоих случаях перед сохранением и выводом добавляете свои обработчики. Пример функции выше с обработчиками будет такой:
Как логично вытекает эти функции надо добавить в наш класс. Если брать пример с календарем, то можно так:
И последнее, это вывод поля с календарем на странице редактирования. Берем стандартный Битриксовский:
Источник: