Битрикс. Пользовательские свойства элемента инфоблока
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-разработка • Битрикс • Инфоблок • Пользовательские свойства • Элемент инфоблока