Полный цикл в digital

Пользовательские свойства элемента инфоблока

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

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

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

<?
/*
* Файл component.php
*/
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
// время кеширования
if (!isset($arParams['CACHE_TIME'])) {
$arParams['CACHE_TIME'] = 3600;
} else {
$arParams['CACHE_TIME'] = intval($arParams['CACHE_TIME']);
}
// если нет валидного кеша получаем данные из БД
if ($this->StartResultCache()) {
// проверяем, установлен ли модуль «Информационные блоки»
if (!CModule::IncludeModule('iblock')) {
return;
}
// создаем пустой массив arResult
$arResult = Array ();
// получаем данные из базы
$res = CIBlockElement::GetList(
array("ACTIVE_FROM"=>"desc"),
array("ID"=>$arParams["ELEMENT_ID"], "ACTIVE"=>"Y"),
false,
array(),
array("IBLOCK_ID", "ID", "NAME", "DETAIL_PICTURE", "PROPERTY_*")
);
// получаем из выборки объект
if ($obElement = $res->GetNextElement()) {
// дефолтные свойства
$arResult = $obElement->GetFields();
// пользовательские свойства
$arResult['PROPERTIES'] = $obElement->GetProperties();
// получаем значения пользовательских свойств в удобном для отображения виде
foreach ($arResult['PROPERTIES'] as $code => $data) {
// помогаем показать значения свойства элемента
$arResult['DISPLAY_PROPERTIES'][$code] = CIBlockFormatProperties::GetDisplayValue($arResult, $data, '');
}
// расширенный вывод детальной картинки
$arResult["DETAIL_PICTURE"] = CFile::GetFileArray($arResult["DETAIL_PICTURE"]);
}
// кэш не затронет весь код ниже, он будут выполняться на каждом хите, но здесь работаем уже с другим $arResult — будут
доступны только те ключи массива, которые перечислены в вызове SetResultCacheKeys()
if (isset($arResult['ID'])) {
// ключи $arResult, перечисленные при вызове этого метода, будут доступны в component_epilog.php и ниже по коду.
Обратите внимание, там уже будет другой $arResult
$this->SetResultCacheKeys(
array(
)
);
// подключаем шаблон и сохраняем кеш
$this->IncludeComponentTemplate();
} else { // если выяснилось что кешировать данные не требуется, прерываем кеширование и выдаем сообщение, что такой
страницы нет
$this->AbortResultCache();
\Bitrix\Iblock\Component\Tools::process404(
'Страница не найдена',
true,
true
);
}
};

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

Array
(
[IBLOCK_ID] => 1
[~IBLOCK_ID] => 1
[ID] => 1
[~ID] => 1
[NAME] => Index
[~NAME] => Index
[DETAIL_PICTURE] => Array
	(
		[ID] => 441
		[TIMESTAMP_X] => Bitrix\Main\Type\DateTime Object
			(
				[value:protected] => DateTime Object
					(
						[date] => 2022-01-22 11:04:52.000000
						[timezone_type] => 3
						[timezone] => Europe/Moscow
					)

			)

		[MODULE_ID] => iblock
		[HEIGHT] => 700
		[WIDTH] => 1600
		[FILE_SIZE] => 55651
		[CONTENT_TYPE] => image/jpeg
		[SUBDIR] => medialibrary/68e/dznj3ihulu191wv9g25lvt33xpvhj1sa
		[FILE_NAME] => index.jpg
		[ORIGINAL_NAME] => index.jpg
		[DESCRIPTION] => Главная страница
		[HANDLER_ID] => 
		[EXTERNAL_ID] => 4901138e93215742328799d56f926056
		[~src] => 
		[SRC] => /upload/medialibrary/68e/dznj3ihulu191wv9g25lvt33xpvhj1sa/index.jpg
	)

[~DETAIL_PICTURE] => 441
[ACTIVE_FROM] => 01.12.2021 21:02:36
[~ACTIVE_FROM] => 01.12.2021 21:02:36
[PROPERTIES] => Array
	(
		[ID_1_ZAGOLOVOK] => Array
			(
				[ID] => 1
				[TIMESTAMP_X] => 2021-12-02 11:48:22
				[IBLOCK_ID] => 1
				[NAME] => Заголовок
				[ACTIVE] => Y
				[SORT] => 500
				[CODE] => ID_1_ZAGOLOVOK
				[DEFAULT_VALUE] => 
				[PROPERTY_TYPE] => S
				[ROW_COUNT] => 5
				[COL_COUNT] => 50
				[LIST_TYPE] => L
				[MULTIPLE] => N
				[XML_ID] => 
				[FILE_TYPE] => 
				[MULTIPLE_CNT] => 5
				[TMP_ID] => 
				[LINK_IBLOCK_ID] => 0
				[WITH_DESCRIPTION] => N
				[SEARCHABLE] => N
				[FILTRABLE] => N
				[IS_REQUIRED] => N
				[VERSION] => 2
				[USER_TYPE] => 
				[USER_TYPE_SETTINGS] => 
				[HINT] => 
				[PROPERTY_VALUE_ID] => 1:1
				[VALUE] => <span>Экстренно!</span> Поднимите продажи своего бизнеса
				[DESCRIPTION] => 
				[VALUE_ENUM] => 
				[VALUE_XML_ID] => 
				[VALUE_SORT] => 
				[~VALUE] => Экстренно! Поднимите продажи своего бизнеса
				[~DESCRIPTION] => 
				[~NAME] => Заголовок
				[~DEFAULT_VALUE] => 
			)

		[ID_1_TEXT] => Array
			(
				[ID] => 2
				[TIMESTAMP_X] => 2021-12-02 11:48:22
				[IBLOCK_ID] => 1
				[NAME] => Текст
				[ACTIVE] => Y
				[SORT] => 500
				[CODE] => ID_1_TEXT
				[DEFAULT_VALUE] => 
				[PROPERTY_TYPE] => S
				[ROW_COUNT] => 5
				[COL_COUNT] => 50
				[LIST_TYPE] => L
				[MULTIPLE] => N
				[XML_ID] => 
				[FILE_TYPE] => 
				[MULTIPLE_CNT] => 5
				[TMP_ID] => 
				[LINK_IBLOCK_ID] => 0
				[WITH_DESCRIPTION] => N
				[SEARCHABLE] => N
				[FILTRABLE] => N
				[IS_REQUIRED] => N
				[VERSION] => 2
				[USER_TYPE] => 
				[USER_TYPE_SETTINGS] => 
				[HINT] => 
				[PROPERTY_VALUE_ID] => 1:2
				[VALUE] => <span>Мой подход</span> - интернет маркетинг должен быть с жесткой привязкой к продажам здесь и сейчас. В процессе сотрудничества будут достигнуты конкретные цели, выраженные в Вашей прибыли!
				[DESCRIPTION] => 
				[VALUE_ENUM] => 
				[VALUE_XML_ID] => 
				[VALUE_SORT] => 
				[~VALUE] => Мой подход - интернет маркетинг должен быть с жесткой привязкой к продажам здесь и сейчас. В процессе сотрудничества будут достигнуты конкретные цели, выраженные в Вашей прибыли!
				[~DESCRIPTION] => 
				[~NAME] => Текст
				[~DEFAULT_VALUE] => 
			)

	)

[DISPLAY_PROPERTIES] => Array
	(
		[ID_1_ZAGOLOVOK] => Array
			(
				[ID] => 1
				[TIMESTAMP_X] => 2021-12-02 11:48:22
				[IBLOCK_ID] => 1
				[NAME] => Заголовок
				[ACTIVE] => Y
				[SORT] => 500
				[CODE] => ID_1_ZAGOLOVOK
				[DEFAULT_VALUE] => 
				[PROPERTY_TYPE] => S
				[ROW_COUNT] => 5
				[COL_COUNT] => 50
				[LIST_TYPE] => L
				[MULTIPLE] => N
				[XML_ID] => 
				[FILE_TYPE] => 
				[MULTIPLE_CNT] => 5
				[TMP_ID] => 
				[LINK_IBLOCK_ID] => 0
				[WITH_DESCRIPTION] => N
				[SEARCHABLE] => N
				[FILTRABLE] => N
				[IS_REQUIRED] => N
				[VERSION] => 2
				[USER_TYPE] => 
				[USER_TYPE_SETTINGS] => 
				[HINT] => 
				[PROPERTY_VALUE_ID] => 1:1
				[VALUE] => <span>Экстренно!</span> Поднимите продажи своего бизнеса
				[DESCRIPTION] => 
				[VALUE_ENUM] => 
				[VALUE_XML_ID] => 
				[VALUE_SORT] => 
				[~VALUE] => Экстренно! Поднимите продажи своего бизнеса
				[~DESCRIPTION] => 
				[~NAME] => Заголовок
				[~DEFAULT_VALUE] => 
				[DISPLAY_VALUE] => <span>Экстренно!</span> Поднимите продажи своего бизнеса
			)

		[ID_1_TEXT] => Array
			(
				[ID] => 2
				[TIMESTAMP_X] => 2021-12-02 11:48:22
				[IBLOCK_ID] => 1
				[NAME] => Текст
				[ACTIVE] => Y
				[SORT] => 500
				[CODE] => ID_1_TEXT
				[DEFAULT_VALUE] => 
				[PROPERTY_TYPE] => S
				[ROW_COUNT] => 5
				[COL_COUNT] => 50
				[LIST_TYPE] => L
				[MULTIPLE] => N
				[XML_ID] => 
				[FILE_TYPE] => 
				[MULTIPLE_CNT] => 5
				[TMP_ID] => 
				[LINK_IBLOCK_ID] => 0
				[WITH_DESCRIPTION] => N
				[SEARCHABLE] => N
				[FILTRABLE] => N
				[IS_REQUIRED] => N
				[VERSION] => 2
				[USER_TYPE] => 
				[USER_TYPE_SETTINGS] => 
				[HINT] => 
				[PROPERTY_VALUE_ID] => 1:2
				[VALUE] => <span>Мой подход</span> - интернет маркетинг должен быть с жесткой привязкой к продажам здесь и сейчас. В процессе сотрудничества будут достигнуты конкретные цели, выраженные в Вашей прибыли!
				[DESCRIPTION] => 
				[VALUE_ENUM] => 
				[VALUE_XML_ID] => 
				[VALUE_SORT] => 
				[~VALUE] => Мой подход - интернет маркетинг должен быть с жесткой привязкой к продажам здесь и сейчас. В процессе сотрудничества будут достигнуты конкретные цели, выраженные в Вашей прибыли!
				[~DESCRIPTION] => 
				[~NAME] => Текст
				[~DEFAULT_VALUE] => 
				[DISPLAY_VALUE] => <span>Мой подход</span> - интернет маркетинг должен быть с жесткой привязкой к продажам здесь и сейчас. В процессе сотрудничества будут достигнуты конкретные цели, выраженные в Вашей прибыли!
			)

	)

)

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

<?
/*
* Файл template.php
*/
?>
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?>
<?
// редактирования и удаления элемента
$arButtons = CIBlock::GetPanelButtons(
$arResult["IBLOCK_ID"], // идентификатор инфоблока, которому принадлежит элемент
$arResult["ID"], // идентификатор текущего элемента информационного блока
0, // идентификатор раздела инфоблока (при наличии)
array("SECTION_BUTTONS"=>false, "SESSID"=>false) //массив, содержащий локализацию названий
);
// ссылка в arResult на изменение эллемента
$arResult["EDIT_LINK"] = $arButtons["edit"]["edit_element"]["ACTION_URL"];
// ссылка в arResult на добавление эллемента
$arResult["EDIT_ADD"] = $arButtons["edit"]["add_element"]["ACTION_URL"];
// ссылка в arResult на удаление эллемента
$arResult["DELETE_LINK"] = $arButtons["edit"]["delete_element"]["ACTION_URL"];
// экшен изменения элемента
$this->AddEditAction(
$arResult["ID"], // идентификатор текущего элемента инфоблока блока
$arResult['EDIT_LINK'], // ссылка в arResult на изменяемый эллемент
CIBlock::GetArrayByID( // возвращает массив полей инфоблока
$arResult["IBLOCK_ID"], "ELEMENT_EDIT"
)
);
// экшен добавления элемента
$this->AddEditAction(
$arResult["ID"], // идентификатор текущего элемента инфоблока блока
$arResult["EDIT_ADD"], // ссылка в arResult на добавляемый эллемент
CIBlock::GetArrayByID( // возвращает массив полей инфоблока
$arResult["IBLOCK_ID"], "ELEMENT_ADD"
)
);
// экшен удаления элемента
$this->AddDeleteAction(
$arResult["ID"], // идентификатор текущего элемента инфоблока блока
$arResult['DELETE_LINK'], // ссылка в arResult на удаляемый эллемент
CIBlock::GetArrayByID( // возвращает массив полей инфоблока и выводит предуприждение
$arResult["IBLOCK_ID"], "ELEMENT_DELETE"),
array("CONFIRM" => "Удалить?")
);
?>
<?
// проверка на администратора
if($USER->IsAdmin() && $APPLICATION->GetShowIncludeAreas()) {
echo '<section id="' . $this->GetEditAreaId($arResult["ID"]) . '">';
} else {
echo '<section>';
}
?>
<div class="main" style="background: url('<?=$arResult["DETAIL_PICTURE"]["SRC"]?>')">
<div class="container">
<div class="row">
<div class="col-12 col-lg-9 col-xl-8">
<div class="title">
<h1><?=$arResult["PROPERTIES"]["ID_1_ZAGOLOVOK"]["~VALUE"]?></h1>
</div>
<div class="tekst"><?=$arResult["PROPERTIES"]["ID_1_TEXT"]["~VALUE"]?></div>
<div class="svyaz">
<a href="#" class="btn open_modal" data-modal-open="forma">ОСТАВИТЬ ЗАЯВКУ</a>
</div>
</div>
</div>
</div>
</div>
</section>
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг