Вывод свойств инфоблока

Вывод информации через свойство "Привязка элементов в виде списка"


 <?foreach($arResult["PROPERTIES"]["ATT_CONNECT"]["VALUE"] as $item):?>
<?$res = CIBlockElement::GetByID($item);?>
<?while($ob = $res->GetNextElement()):?>
<?
$connect = $ob->GetFields();
$connect["PROPERTIES"] = $ob->GetProperties();
?>
<div class="connect">
<?=$connect["PROPERTIES"]["ATT_POSITION"]["VALUE"];?>
<?=$connect["DETAIL_TEXT"];?>
<img src="<?=CFile::GetPath($connect['PREVIEW_PICTURE'])?>">
</div>
<?endwhile;?>
<?endforeach;?>

Вывод изображения раздела в news.list

1. Создаем файл result_modifier.php и размещаем в папку с компонентом news.list (например, news.list - services)

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if ($arResult["SECTION"]["PATH"]["0"]["PICTURE"]) {
$tmpFileID = $arResult["SECTION"]["PATH"]["0"]["PICTURE"];
$tmpFile = CFile::GetFileArray($tmpFileID);
$arResult["SECTION"]["PATH"]["0"]["PICTURE"] = $tmpFile;
}

2. В шаблоне news.list (news.list - services - templates.php)

<?if ($arResult["SECTION"]["PATH"]["0"]["PICTURE"]["SRC"]):?>
<img src="<?=$arResult["SECTION"]["PATH"]["0"]["PICTURE"]["SRC"]?>">
<?endif?>

Вывод раздела и ссылки на него в шаблоне детального элемента


<?
$res = CIBlockSection::GetByID($arResult['IBLOCK_SECTION_ID']);
$ar_res = $res->GetNext();
?>
<a href="<? echo $ar_res['SECTION_PAGE_URL']; ?>"><? echo $ar_res['NAME']; ?></a>

Вывод lang текста в шаблон компонента

<?=GetMessage("NEWS_MORE")?>
В lang файле
<?
$MESS["NEWS_MORE"] = "Подробнее";
?>
Вместо NEWS_MORE - любое ваше имя

Изображения

Вывести Название в alt картинки (берется из поля название)

<?=$arItem["NAME"]?>

Вывести описание для картинки анонса (берется из поля Описание под картинкой)

<?=$arItem["PREVIEW_PICTURE"]["DESCRIPTION"]?>

Вывести описание для детальной картинки

<?=$arItem["DETAIL_PICTURE"]["DESCRIPTION"]?> 

Изображение анонса

<?=$arItem["PREVIEW_PICTURE"]["SRC"]?>

Изображение детальной картинки

<?=$arItem["DETAIL_PICTURE"]["SRC"]?>

Вывести в alt Описание картинки если заполнено поле Описание и вывести Название если нет Описания


 <?if($arParams["DISPLAY_PICTURE"]!="N" && $arItem["PREVIEW_PICTURE"]):?>
<a href="<?=$arItem["DETAIL_PAGE_URL"]?>">
<?
$file = CFile::ResizeImageGet(($arItem["PREVIEW_PICTURE"]), array('width'=>300, 'height'=>170), BX_RESIZE_IMAGE_EXACT, true);                
echo '<img src="'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$arItem["NAME"].'" />';
?>
</a>
<?endif;?>

Вывести все изображения из свойств файл


 <ul>
<?if($arResult["PROPERTIES"]["ATT_PHOTOS"]["VALUE"]):?>
<?foreach($arResult["PROPERTIES"]["ATT_PHOTOS"]["VALUE"] as $item):?>
<? $img = CFile::GetFileArray($item); ?>
<li>
<a href="<?=$img["SRC"]?>"><img src="<?=$img["SRC"]?>" width="<?=$img["WIDTH"]?>" height="<?=$img["HEIGHT"]?>" alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" /></a>
</li>
<?endforeach;?>
<?endif;?>
</ul>

Важно! Свойства инфоблока файл не отображаются в Параметрах компонента (настройки с иконкой шестеренка). Поэтому их вызов только через PROPERTIES, а не DISPLAY_PROPERTIES.

Если в настройках компонента не стоит NAME то массив с изображениями не выведется

Вывести множественное свойство типа файл

Для news.detail


<?foreach($arResult["PROPERTIES"]["ATT_TEXT"]["VALUE"] as $item):?>
<?=$item;?>
<?endforeach;?>

Для news.list


<?foreach($arItem["PROPERTIES"]["ATT_TEXT"]["VALUE"] as $item):?>
<?=$item;?>
<?endforeach;?>


Вывести количество элементов из свойства типа файл

Для news.list


<?=sizeof($arItem["PROPERTIES"]["ATT_PHOTO"]["VALUE"]);?>

или


<?=count($arItem["PROPERTIES"]["ATT_PHOTO"]["VALUE"]);?>

Важно! Необходимо в параметрах компонента выделить данное свойство.

Ресайз изображений налету

  • BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник $arSize без сохранения пропорций;
  • BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается $arSize;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.
<?
$file = CFile::ResizeImageGet(($arResult["DETAIL_PICTURE"] ? $arResult["DETAIL_PICTURE"] : $arResult["PREVIEW_PICTURE"]), array('width'=>800, 'height'=>400), BX_RESIZE_IMAGE_EXACT, true);                
echo '<img src="'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$arResult["NAME"].'"  title="'.$arResult["NAME"].'" />';
?>

Если нужно чтобы ресайз был с сохранением пропорций для горизонтальных фото, то ширину и высоту лучше выставлять одинакового размера

<?
$file = CFile::ResizeImageGet(($arResult["DETAIL_PICTURE"]), array('width'=>800, 'height'=>800), BX_RESIZE_IMAGE_PROPORTIONAL, true);                
echo '<img src="'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$arResult["NAME"].'"  title="'.$arResult["NAME"].'" />';
?>

Ресайз изображений для Каталога (catalog.section)

<?
$file = CFile::ResizeImageGet(($item["PREVIEW_PICTURE"]["ID"]), array('width'=>800, 'height'=>800), BX_RESIZE_IMAGE_PROPORTIONAL, true);                
echo '<img src="'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$item["NAME"].'"  title="'.$item["NAME"].'" />';
?>

Конструкция для вывода картинки анонса с проверками и ресайзом

<?if($arParams["DISPLAY_PICTURE"]!="N" && $arItem["PREVIEW_PICTURE"]):?>
<div class="block_promo_img">
<a href="<?echo $arItem["DETAIL_PAGE_URL"]?>">
<?
$file = CFile::ResizeImageGet(($arItem["PREVIEW_PICTURE"] ? $arItem["PREVIEW_PICTURE"] : $arItem["DETAIL_PICTURE"]), array('width'=>700, 'height'=>700), BX_RESIZE_IMAGE_PROPORTIONAL, true);                
echo '<img src="'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$arItem["NAME"].'" />';
?>
</a>
</div>
<?endif;?>

Условие, если поле заполненное вывести его значение (один элемент)


<? if($arItem["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"]):?>
    <?=$arItem["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"];?>
<?endif;?>

или

<? if($arResult["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"]):?>
    <?=$arResult["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"];?>
<?endif;?>

Важно!

Отличие PROPERTIES от DISPLAY_PROPERTIES

Если узазать DISPLAY_PROPERTIES то будут выведены свойства инфоблока, которые выбраны в настройках параметра Компонента.

Если какое либо свойство не отображается в параметрах компонента (например свойство файл), то указывается через PROPERTIES.

Если свойство определяется в параметрах компонента, то можно к нему обратиться как через DISPLAY_PROPERTIES  так и через PROPERTIES 


Конструкция if


Так работают все проверки. Проверяется если поле не пустое, то массив arItem отдает true следовательно условие выполняется

<? if($arItem["DISPLAY_PROPERTIES"]["ATT_LINK"]["VALUE"]):?>
Действие
<?else:?>
Действие
<?endif;?>

Ссылки

<a href="<?=$arItem["DETAIL_PAGE_URL"]?>"> - ссылка на детальную страницу

<a href="<?echo $arItem["DETAIL_PAGE_URL"]?>"><?=$arItem["NAME"]?></a> - вывод ссылки на детальную страницу. Анкор ссылки взят из поля "Название"

Когда какой массив используется $arResult и $arItem

$arResult основной массив в который может входить множество массивов $arItem

Если вы работаете с news.list либо news-news.list то сначала создается массив $arResult в котором создаются $arItem. И обращение в этих шаблонах (template.php) будет только к $arItem

Задается он следующим образом
<?foreach($arResult["ITEMS"] as $arItem):?>
Внутри этого массива обращение только к $arItem
<?endforeach;?>

Если вы работает с детальной страницой news.detail, то массивы  $arItem просто не создаются, так как в них нет необходимости. Вы работаете с одной новостью. Поэтому обращение в файле шаблона будет через $arResult

Конструкция элементов для news.list 

<?foreach($arResult["ITEMS"] as $arItem):?>

<div id="<?=$this->GetEditAreaId($arItem['ID']);?>"> 

<?
$this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
$this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
?>

Содержимое массива $arItem

</div>

<?endforeach;?>


В основном шаблоне:

<?$APPLICATION->ShowTitle()?> - собственно вывод тайтла в основном шаблоне сайта

<?$APPLICATION->ShowHead()?> - подключение для вывода в шаблоне сайта основных полей тега : мета-теги Content-Type, robots, keywords, description; стили CSS; скрипты

<?$APPLICATION->ShowPanel();?> - выводит панель управления администратора

<?=SITE_TEMPLATE_PATH?> - подставляет путь к шаблону

<?$APPLICATION->ShowTitle(false);?> - заголовок (в h1 например использовать)

ShowHead разбить на составляющие:

<meta http-equiv="Content-Type" content="text/html; charset=<?=LANG_CHARSET;?>" /> - Установка кодировки сайта

<? $APPLICATION->ShowMeta("keywords") ?> - Вывод мета тега keywords

<? $APPLICATION->ShowMeta("description") ?> - Вывод мета тега description

<? $APPLICATION->ShowCSS(); ?> - Подключение основных файлов стилей template_styles.css и styles.css

<? $APPLICATION->ShowHeadStrings() ?> - Отображает специальные стили, JavaScript

<? $APPLICATION->ShowHeadScripts() ?> - Вывода служебных скриптов

В шаблонах компонентов:

<img src="<?=$arSection["PICTURE"]["SRC"]?>" title="<?=$arSection["NAME"]?>" border="0"/> - картинка раздела инфоблока.

<?=$arSection["DESCRIPTION"]?> - описание раздела инфоблока

<?=$arResult["DESCRIPTION"]?> - описание раздела в catalog.section

<?=$arResult["SECTION"]["PATH"][0]["~DESCRIPTION"]?> - вывод описания раздела в блоке news.list

<?=$arResult["SECTION"]["PATH"][0]["NAME"]?> - вывод в news.list названия раздела

<?echo $arItem["NAME"]?> - название

<?echo $arItem["DETAIL_PAGE_URL"]?> - ссылка на детальную новость (статью)

<?echo $arItem["PREVIEW_TEXT"];?> - текст анонса

<?echo $arResult["DETAIL_TEXT"];?> - детальный текст

<?=$arItem["PREVIEW_PICTURE"]["SRC"]?> - изображение анонса

<?=$arItem["DETAIL_PICTURE"]["SRC"]?> - изображение детальное

<?=$arResult['DISPLAY_ACTIVE_FROM']?> - дата начала активности

<?=$arItem['DATE_CREATE']?> - Дата создания элемента инфолока

Полезные условия

Если картинки нет- то вывести "нет картинки"

<?if (strlen($arItem["DETAIL_PICTURE"]["SRC"])>0):?> 
<img src="<?=$arItem["DETAIL_PICTURE"]["SRC"]?>"/> 
<?else:?> 
нет картинки 
<?endif?>

Включаемая область в режиме php.

<? 
$APPLICATION->IncludeFile( 
SITE_DIR. "include/flash.php", 
Array(), 
Array( "MODE"=>"php") 
); 
?>

Количество товара на складе в списке товаров:

<? 
$ar_res = CCatalogProduct::GetByID($arElement['ID']); 
echo "<br>На складе: "; 
print_r($ar_res['QUANTITY']); 
echo " шт."; 
?>

В подробной карточке товара, с подменой цифрового значения на выражение:

<?  
$quantity= $arElement[CATALOG_QUANTITY]; 
if (!$quantity){?>нет<?} 
if ($quantity!=0 && $quantity<=10){?>мало<?} 
if ($quantity!=0 && $quantity>10 && $quantity<=100){?>достаточно<?} 
if ($quantity>100){?>много 
<?}?><?=$arResult[CATALOG_QUANTITY];?>  

Вывести название раздела внутри элемента. Например в детальной новости, указать к какому из разделов она относится:

 <?echo $arResult["SECTION"]["PATH"][0]["NAME"]?>

Вывести меню нужного типа в шаблоне битрикс

 <? 
$APPLICATION->IncludeComponent("bitrix:menu", "top_menu", array( 
"ROOT_MENU_TYPE" => "top",  //В данном случаее меню типа top 
"MENU_CACHE_TYPE" => "A", 
"MENU_CACHE_TIME" => "3600", 
"MENU_CACHE_USE_GROUPS" => "Y", 
"MENU_CACHE_GET_VARS" => array( 
), 
"MAX_LEVEL" => "1", 
"CHILD_MENU_TYPE" => "left", 
"USE_EXT" => "N", 
"DELAY" => "N", 
"ALLOW_MULTI_SELECT" => "N" 
), 
false 
); 
? >

Подключение веб мессенджера в шаблоне сайта

<?$APPLICATION->IncludeComponent("bitrix:im.messenger", "", Array(), null, array("HIDE_ICONS" => "N"));?>

Вывести текст описания свойства инфоблока. Например, в форме добавления/редактирования элемента инфоблока для пользователей:

<?=$arResult["PROPERTY_LIST_FULL"][$propertyID]["HINT"]?>

Вывести текущую дату из установленной на сервере

<? echo date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()); ?>

Свойства инфоблока

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

Для этого достаточно в шаблоне bitrix:news.detail вписать

       

<? echo $arResult['DISPLAY_PROPERTIES']['ATTRIBUTE']['DISPLAY_VALUE'];?>

Где: 
DISPLAY_PROPERTIES - название свойства 
ATTRIBUTE - код свойства

Чтобы вывести и название и значение свойства есть вариант:

<? if ($arResult["DISPLAY_PROPERTIES"]['СВОЙСТВО']){?> //если не пустое 
<?=$arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['NAME']?>  //вывести название 
<?echo $arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['DISPLAY_VALUE'];?>  //и значение 
<?}?>

Чтобы вывести ссылку:

<? if ( $arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"] > 0 ) : ?> 
<? echo '<a href="'.CFile::GetPath($arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"]).'">Скачать книгу</a> '; ?> 
<? endif; ?>  

Чтобы вывести свойство типа строка в режиме html:

<? echo $arResult['DISPLAY_PROPERTIES']['ATTRIBUTE']['~VALUE'];?>

Что бы вевести свойство типа html/text:

<?=htmlspecialcharsBack($arResult["PROPERTIES"]["Название свойства"]["VALUE"]["TEXT"])?>

Свойство список в виде select

<select> 
<option>Выберите</option> 
<?$i=0;foreach($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"] as $arRazmer):?> 
<option><?=$arRazmer?></option> 
<?endforeach;?> 
</select>  

Множественное свойство типа список:

<?foreach($arResult["DISPLAY_PROPERTIES"] as $pid=>$arProperty):?> 
<?if($pid =="ATT_COMPANY"): ?> 
<li><span>Арендодатель:</span> <?echo $arProperty["DISPLAY_VALUE"];?></li> 
<?endif?> 
<?endforeach;?> 

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

<?foreach($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"] as $analog):?> 
<?$res = CIBlockElement::GetByID($analog);?> 
<?if($ar_res = $res->GetNext())?> 
<li><b><a href='<?=$ar_res["DETAIL_PAGE_URL"];?>'><?=$ar_res["NAME"];?></a></b></li> 
<?endforeach;?>

Вывести свойство файл-изображение как изображение а не ссылку на загрузку:

<?$что_нибудь_понятное = CFile::GetPath($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"]);?> 

<img src="<?echo $что_нибудь_понятное;?>" />

Свойство типа файл с ссылкой на загрузку файла

<?foreach($arResult["DISPLAY_PROPERTIES"] as $pid=>$arProperty):?> 
<? if($pid =="СВОЙСТВА_АТРИБУТ"): ?> 
<li> 
<b>Дополнительные файлы</b> 
<?if(is_array($arProperty["DISPLAY_VALUE"])): 
echo implode($arProperty["DISPLAY_VALUE"]); 
elseif($pid=="MANUAL"): 
?> 
<a href="<?=$arProperty["VALUE"]?>">Скачать</a> 
<?else: 
echo $arProperty["DISPLAY_VALUE"];?> 
<?endif?> 
</li> 
<?endif?>

Вывести все свойства

<?foreach($arItem["DISPLAY_PROPERTIES"] as $pid=>$arProperty):?>

<p><strong><?=$arProperty["NAME"]?></strong>:&nbsp;

<?if(is_array($arProperty["DISPLAY_VALUE"])):?>

<?=implode("&nbsp;/&nbsp;", $arProperty["DISPLAY_VALUE"]);?>

<?else:?>

<?=$arProperty["DISPLAY_VALUE"];?>

<?endif?>

</p>

<?endforeach;?>

Условия для xml_id

<?if($arResult["PROPERTIES"]["ATT_STATUS"]["VALUE_XML_ID"] == "status_zakaz"):?>
<div class="catalog-detail__status-zakaz">
<?=$arResult["PROPERTIES"]["ATT_STATUS"]["VALUE"];?>
</div>
<?endif?>

Вывод заголовка h1

<h1><?=$arResult["NAME"]?></h1> - вывод заголовка из названия элемента

<h1><?=$arResult['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']?></h1> - вывод заголовка из вкладки SEO

<h1><?=$arResult["SECTION"]["PATH"][0]["NAME"]?></h1> - заголовок раздела

С разделами

<a href="<?=$arResult["SECTION"]["PATH"][0]["SECTION_PAGE_URL"]?>"><i class="fa fa-chevron-left" aria-hidden="true"></i><?=GetMessage("T_NEWS_DETAIL_BACK")?></a>

Вывод изображения фоном

<?
$file = CFile::ResizeImageGet(($arItem["PREVIEW_PICTURE"]), array('width'=>1920, 'height'=>420), BX_RESIZE_IMAGE_EXACT, true);                
echo '<div style="background: url('.$file['src'].'); background-position: center; background-size: cover; width: 100%; height: 420px; position:absolute; top:0; left:0;">
</div>';
?>
Менеджер
Команда ГВОЗДЕВСОФТ
Консультация специалиста
Менеджер
Команда ГВОЗДЕВСОФТ
Оставить заявку
Менеджер
Команда ГВОЗДЕВСОФТ
Заказать расчет