Битрикс. Пользовательские свойства элемента инфоблока
19.10.2018
Теги: CMS • Web-разработка • Битрикс • Инфоблок • ПользовательскиеСвойства • ЭлементИнфоблока
Информационный блок — модуль, позволяющий публиковать различные типы информации: товары, новости, статьи, фотографии. Поскольку нельзя заранее сказать, какие свойства потребуются для описания элемента инфоблока — в Битрикс предусмотрено создание пользовательских свойств, кроме предопределенных.
Давайте создадим пять пользовательских свойств разного типа и посмотрим, как их в дальнейшем получить из БД и вывести в шаблоне. В панели управления переходим на страницу добавления/редактирования инфоблока, вкладка «Свойства» и добавляем свойства
AUTHOR— автор публикации, тип «Строка»RATING— рейтинг публикации, тип «Список»GALLERY— прикрепленные изображения, тип «Файл»UPDATE— дата обновления, тип «Дата»NOTE— примечание к публикации, тип «HTML/Текст»
Теперь на странице добавления/редактирования элемента инфоблока мы можем задать значения этих свойств:
Нативные компоненты Битрикс в настройках позволяют указать, какие пользовательские свойства должны быть доступны в шаблоне. Мы сделаем это сами:
<?php /* * Файл local/components/demo/iblock.element/component.php */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die(); if (!CModule::IncludeModule('iblock')) { ShowError('Модуль «Информационные блоки» не установлен'); return; } /*...*/ if ($this->StartResultCache(false, ($arParams['CACHE_GROUPS']==='N' ? false: $USER->GetGroups()))) { // какие поля элемента инфоблока выбираем $arSelect = array( 'ID', // идентификатор элемента 'NAME', // название этого элемента /*...*/ 'PROPERTY_*', // пользовательские свойства ); // условия выборки элемента инфоблока $arFilter = array( /*...*/ ); // выполняем запрос к базе данных $rsElement = CIBlockElement::GetList( array(), // сортировка $arFilter, // фильтр false, // группировка false, // постраничная навигация $arSelect // поля ); // устанавливаем шаблоны путей для раздела и элемента $rsElement->SetUrlTemplates($arParams['ELEMENT_URL'], $arParams['SECTION_URL']); if ($obElement = $rsElement->GetNextElement()) { $arResult = $obElement->GetFields(); // пользовательские свойства $arResult['PROPERTIES'] = $obElement->GetProperties(); // получаем значения пользовательских свойств в удобном для отображения виде foreach ($arResult['PROPERTIES'] as $code => $data) { $arResult['DISPLAY_PROPERTIES'][$code] = CIBlockFormatProperties::GetDisplayValue($arResult, $data, ''); } /* * Добавляем в массив arResult дополнительные элементы, которые могут потребоваться в шаблоне */ /*...*/ } if (isset($arResult['ID'])) { $this->SetResultCacheKeys( /*...*/ ); $this->IncludeComponentTemplate(); } else { $this->AbortResultCache(); \Bitrix\Iblock\Component\Tools::process404( /*...*/ ); } }
Теперь массив $arResult имеет вид:
Array
(
[ID] => 349
[CODE] => afganskaya-borzaya
[IBLOCK_ID] => 5
[IBLOCK_SECTION_ID] => 28
[NAME] => Афганская борзая
[DETAIL_PICTURE] => 1011
[DETAIL_TEXT] => Lorem ipsum dolor sit amet, consectetur adipiscing elit...
[DETAIL_PAGE_URL] => /demo/item/id/349/
[IBLOCK_TYPE_ID] => content
[IBLOCK_CODE] => articles
[SECTION_PAGE_URL] => /demo/category/id/28/
..........
[PROPERTIES] => Array
(
[AUTHOR] => Array
(
[ID] => 47
[IBLOCK_ID] => 5
[NAME] => Автор
[CODE] => AUTHOR
[PROPERTY_TYPE] => S
[PROPERTY_VALUE_ID] => 1
[VALUE] => Сергей Иванов
..........
)
[RATING] => Array
(
[ID] => 48
[IBLOCK_ID] => 5
[NAME] => Оценка
[CODE] => RATING
[PROPERTY_TYPE] => L
[PROPERTY_VALUE_ID] => 2
[VALUE] => Интересно
..........
)
[GALLERY] => Array
(
[ID] => 49
[IBLOCK_ID] => 5
[NAME] => Галерея
[CODE] => GALLERY
[PROPERTY_TYPE] => F
[FILE_TYPE] => jpg, gif, bmp, png, jpeg
[PROPERTY_VALUE_ID] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
[VALUE] => Array
(
[0] => 1034
[1] => 1035
[2] => 1036
)
..........
)
[UPDATE] => Array
(
[ID] => 50
[IBLOCK_ID] => 5
[NAME] => Дата обновления
[CODE] => UPDATE
[PROPERTY_TYPE] => S
[PROPERTY_VALUE_ID] => 6
[VALUE] => 19.10.2018
..........
)
[NOTE] => Array
(
[ID] => 51
[IBLOCK_ID] => 5
[NAME] => Примечание
[CODE] => NOTE
[PROPERTY_TYPE] => S
[PROPERTY_VALUE_ID] => 7
[VALUE] => Array
(
[TEXT] => Примечание к публикации...
[TYPE] => TEXT
)
..........
)
)
[DISPLAY_PROPERTIES] => Array
(
[AUTHOR] => Array
(
[ID] => 47
[IBLOCK_ID] => 5
[NAME] => Автор
[CODE] => AUTHOR
[PROPERTY_TYPE] => S
[PROPERTY_VALUE_ID] => 1
[VALUE] => Сергей Иванов
[DISPLAY_VALUE] => Сергей Иванов
..........
)
[RATING] => Array
(
[ID] => 48
[IBLOCK_ID] => 5
[NAME] => Оценка
[CODE] => RATING
[PROPERTY_TYPE] => L
[PROPERTY_VALUE_ID] => 2
[VALUE] => Интересно
[DISPLAY_VALUE] => Интересно
..........
)
[GALLERY] => Array
(
[ID] => 49
[IBLOCK_ID] => 5
[NAME] => Галерея
[CODE] => GALLERY
[PROPERTY_TYPE] => F
[FILE_TYPE] => jpg, gif, bmp, png, jpeg
[PROPERTY_VALUE_ID] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
[VALUE] => Array
(
[0] => 1034
[1] => 1035
[2] => 1036
)
[FILE_VALUE] => Array
(
[0] => Array
(
[ID] => 1034
[MODULE_ID] => iblock
[HEIGHT] => 300
[WIDTH] => 400
[FILE_SIZE] => 33085
[CONTENT_TYPE] => image/jpeg
[SRC] => /upload/iblock/ef1/ef1a80087669d483faa9c3db3441985a.jpg
..........
)
[1] => Array
(
[ID] => 1035
[MODULE_ID] => iblock
[HEIGHT] => 300
[WIDTH] => 400
[FILE_SIZE] => 45306
[CONTENT_TYPE] => image/jpeg
[SRC] => /upload/iblock/b96/b96bb594c3bc5580a972f993e05f7317.jpg
..........
)
[2] => Array
(
[ID] => 1036
[MODULE_ID] => iblock
[HEIGHT] => 300
[WIDTH] => 400
[FILE_SIZE] => 24919
[CONTENT_TYPE] => image/jpeg
[SRC] => /upload/iblock/18c/18ca914388b75729618a412afd3f464b.jpg
..........
)
)
)
[UPDATE] => Array
(
[ID] => 50
[IBLOCK_ID] => 5
[NAME] => Дата обновления
[CODE] => UPDATE
[PROPERTY_TYPE] => S
[PROPERTY_VALUE_ID] => 6
[VALUE] => 19.10.2018
[DISPLAY_VALUE] => 19.10.2018
..........
)
[NOTE] => Array
(
[ID] => 51
[IBLOCK_ID] => 5
[NAME] => Примечание
[CODE] => NOTE
[PROPERTY_TYPE] => S
[PROPERTY_VALUE_ID] => 7
[VALUE] => Array
(
[TEXT] => Примечание к публикации...
[TYPE] => TEXT
)
[DISPLAY_VALUE] => Примечание к публикации...
..........
)
)
)
Все готово, можем показать пользовательские свойства в шаблоне:
<?php /* * Файл local/components/demo/iblock.element/templates/.default/template.php */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die(); $this->setFrameMode(true); ?> <h1><?php $APPLICATION->ShowTitle(false); /* Выводим «Заголовок страницы» */ ?></h1> <article id="iblock-element"> <?php if (!empty($arResult['DETAIL_PICTURE'])): /* детальная картинка элемента инфоблока */ ?> <img src="<?= $arResult['DETAIL_PICTURE']['SRC']; ?>" alt="<?= $arResult['DETAIL_PICTURE']['ALT']; ?>" title="<?= $arResult['DETAIL_PICTURE']['TITLE']; ?>" /> <?php endif; ?> <?php if (!empty($arResult['DETAIL_TEXT'])): /* детальная информация об элементе инфоблока */ ?> <div id="iblock-element-detail"> <?= $arResult['DETAIL_TEXT']; ?> </div> <?php endif; ?> <?php if (!empty($arResult['DISPLAY_PROPERTIES']['GALLERY']['FILE_VALUE'])): /* галерея для элемента инфоблока */ ?> <div id="iblock-element-gallery"> <?php foreach ($arResult['DISPLAY_PROPERTIES']['GALLERY']['FILE_VALUE'] as $item): ?> <a href="<?= $item['SRC']; ?>"><img src="<?= $item['SRC']; ?>" alt="" /></a> <?php endforeach; ?> </div> <?php endif; ?> <?php if (!empty($arResult['PROPERTIES']['NOTE']['VALUE']['TEXT'])): /* примечание к элементу инфоблока */ ?> <div id="iblock-element-note"> <h3>Примечание</h3> <div> <?php if ($arResult['PROPERTIES']['NOTE']['VALUE']['TYPE'] == 'HTML'): ?> <?= $arResult['PROPERTIES']['NOTE']['VALUE']['TEXT']; ?> <?php else: ?> <?= nl2br($arResult['PROPERTIES']['NOTE']['VALUE']['TEXT']); ?> <?php endif; ?> </div> </div> <?php endif; ?> <p>Автор публикации: <?= $arResult['PROPERTIES']['AUTHOR']['VALUE']; /* автор публикации */ ?></p> <p>Оценка читателей: <?= $arResult['PROPERTIES']['RATING']['VALUE']; /* рейтинг публикации */ ?></p> <p>Количество просмотров: <?= $arResult['SHOW_COUNTER'] ? $arResult['SHOW_COUNTER'] : 0; ?></p> <p><a href="<?= $arResult['SECTION']['SECTION_PAGE_URL']; ?>">Назад в раздел</a></p> </article>
- Битрикс. Работа с инфоблоками в старом ядре
- Битрикс. Работа с инфоблоками в новом ядре
- Битрикс. Пользовательские поля раздела инфоблока
- Битрикс. Создание комплексного компонента. Часть 4 из 4
- Битрикс. Создание комплексного компонента. Часть 3 из 4
- Битрикс. Создание комплексного компонента. Часть 2 из 4
- Битрикс. Создание комплексного компонента. Часть 1 из 4
Поиск: CMS • Web-разработка • Битрикс • Инфоблок • Пользовательские свойства • Элемент инфоблока

