1. Главная
  2. Блог
  3. 1С-Битрикс
  4. Вывод пользовательских свойств связанных элементов

Вывод пользовательских свойств связанных элементов

11 февраля 2024
73

Bitrix Framework предоставляет мощные инструменты для работы с данными и их отображения на сайте. Одним из таких инструментов является возможность вывода пользовательских свойств элементов, связанных с основным элементом. В этой статье мы расскажем, как это сделать, на примере медицинского сайта.

На сайте имеются разделы Врачи и Направления, созданные на основе компонента Новости. Необходимо для детальных страниц врачей и раздела врачи вывести 2 пользовательских поля: Специализация и Стаж, а на страницах Направлений вывести врачей соответствующей специализации.

Для начала, давайте разберемся, что такое пользовательские свойства. Пользовательские свойства - это дополнительные данные, которые можно добавить к любому элементу в системе. Например, это могут быть характеристики товара, описание услуги, или любая другая информация, которую вы хотите сохранить.

Создание пользовательских свойств

В принципе само создание свойств процесс не сложный. На вкладке Свойства Инфоблока Врачи добавляем два новых поля. Обязательно указываем уникальный Код свойства и в окне Детальное редактирование свойства ставим галочки Показывать на странице списка элементов и Показывать на детальной странице элемента.

1С-Битрикс свойства элемента
1С-Битрикс свойства элемента

В настройках инфоблока Направления добавляем свойство Врачи с кодом AD_DOCTORS. Свойство будет множественным.

1С-Битрикс свойства связанные элементы

Вывод пользовательских свойств

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

В файл template.php шаблона списка раздела Врачи добавляем код:


<? if (!empty($arItem['PROPERTIES']['SPECIALNOST']['VALUE'])):?>
<span class="doc-pos"><?=$arItem['PROPERTIES']['SPECIALNOST']['VALUE']?></span>
<?endif?>
<? if (!empty($arItem['PROPERTIES']['AD_STAGE']['VALUE'])):?>
<br><span class="stage">стаж: <?=$arItem['PROPERTIES']['AD_STAGE']['VALUE']?></span>
<?endif?>

Данный код выводит HTML теги в случае, если пользовательские поля не пустые.

В файл template.php шаблона детальной страницы Врачи добавляем код:


<? if (!empty($arResult['PROPERTIES']['SPECIALNOST']['VALUE'])):?>
<h2><?=$arResult['PROPERTIES']['SPECIALNOST']['VALUE']?></h2>
<?endif?>
<? if (!empty($arResult['PROPERTIES']['AD_STAGE']['VALUE'])):?>
<h2>Стаж: <?=$arResult['PROPERTIES']['AD_STAGE']['VALUE']?></h2>
<?endif?>

Далее для элемента из раздела Направления в поле Врачи указываем связанные элементы, содержащие врачей соответствующей специальности.

В папке шаблона детальной страницы Направлений создаем (при отсутствии) файл result_modifier.php

bitrix4.jpg

со следующим содержимым:


<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
if (!empty($arResult['PROPERTIES']['AD_DOCTORS']['VALUE'])) {
$arSelect = array('ID', 'DETAIL_PAGE_URL', 'PROPERTY_SPECIALNOST', 'PROPERTY_AD_STAGE', 'PREVIEW_PICTURE', 'PREVIEW_TEXT', 'NAME');//здесь указываем свойства, которые необходимо выводить, ID – необходимо указывать всегда.
 $res = CIBlockElement::GetList(
   array(
       'DATE_CREATE' => 'ASC'
    ),
    array(
        'ID' => $arResult['PROPERTIES']['AD_DOCTORS']['VALUE']
    ),
     false,
     false,
$arSelect 
 );
while($ob = $res->GetNext()){
    $ob['PREVIEW_PICTURE_SRC'] = CFile::GetPath($ob['PREVIEW_PICTURE']);
    $arResult['LINKED_NEWS'][] = $ob;
	//var_dump($ob);
	//print "<pre>"; print_r($ob); print "</pre>";	
//любое из полей выше раскомментируем для тестирования вывода массива данных.
 }
}
?>

В данном коде обращаем внимание на пользовательские поля. Они указываются как PROPERTY_*, где вместо * используется код свойства из инфоблока: PROPERTY_SPECIALNOST.

В файле template.php шаблона детальной страницы размещаем код:


<? if ($arResult["LINKED_NEWS"]):?>
<div class="doctors">
<h2>Прием ведут:</h2>
    <div class="items-wrap">
<?foreach ($arResult["LINKED_NEWS"] as $arItem):?>

		<!-- item -->
		<div class="item-wrap">
			<div class="item-doctor">
			<a href="<?=$arItem["DETAIL_PAGE_URL"]?>" class=" doc-photo">
			<img src="<?=$arItem["PREVIEW_PICTURE_SRC"]?>" alt="">
			</a>
			<a href="<?=$arItem["DETAIL_PAGE_URL"]?>" class="doc-title-wrap">
			<span class="doc-wrap">
			<span class="doc-title"><?echo $arItem["NAME"]?></span>
			<? if (!empty($arItem['PROPERTY_SPECIALNOST_VALUE'])):?>
			<span class="doc-pos"><?=$arItem['PROPERTY_SPECIALNOST_VALUE']?></span>
			<?endif?>
			<? if (!empty($arItem['PROPERTY_AD_STAGE_VALUE'])):?>
			<br><span class="doc-pos stage">стаж: <?=$arItem['PROPERTY_AD_STAGE_VALUE']?></span>
			<?endif?>
			</span>
			</a>
			</div>
		</div>
		<!-- /item -->
<?endforeach;?>		
       </div></div><?endif?>

Вот что получаем на выходе:

вывод пользовательских полей связанных элементов

Рекомендуемые материалы для изучения:

Описание используемого метода GetList:

https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php

Полезный материал от Михаила Базарова:

https://bazarow.ru/forum/forum10/774-vyvod-izobrazheniya-svyazannogo-elementa-v-detalnom-opisanii


Комментарии
Name
Email
Phone
Ваше имя
Ваш email
Оставить комментарий
Нажмите для звонка
Хотите заказать сайт?
Обращайтесь любым удобным способом и мы поможем подобрать интересный вариант для Вас!