Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Как вывести свойства инфоблока по отдельности и немного плюшек не в тему

Просмотров: 103038

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

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


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

Где: 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 $что_нибудь_понятное;?>" />

Изображение торгового предложения


<img src="<?=CFile::GetPath($arOffer["PREVIEW_PICTURE"])?>">

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


<?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?>
<?endforeach;?>

Вывести множественное свойство типа файл, со всей информацией о файле: размер, название, транслитированное название, тип файла- в отдельной заметке.

Вывести колличество комментариев к элементу в списке новостей битрикс:


<?=(strlen($arItem["PROPERTIES"]["FORUM_MESSAGE_CNT"]["VALUE"]) > 0 ? $arItem["PROPERTIES"]["FORUM_MESSAGE_CNT"]["VALUE"] : "0");?>

Вывести и отресайзить детальную картинку товара знаная ID товара (или элемента)


<?
	$res = CIBlockElement::GetByID($arItem["ITEM_ID"]); 
	if($ar_res = $res->GetNext()){ 
	$img = CFile::ShowImage($ar_res["DETAIL_PICTURE"], 50, 50, "border=0", "", true);} 
?> 
<div class="bx_image" style="background-image: url('<?=$img?>')"></div>

Немного не в тему но может пригодиться: вывести колличество просмотров элемента инфоблока (с новостями точно работает):


// К парметру вывода компанента добавить: 
"LIST_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",), 
"DETAIL_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",), 
// В нужном месте шаблона вставить
<?=$arItem['SHOW_COUNTER']?> - для списка новостей 
<?=$arResult['SHOW_COUNTER']?> - для детальной новости

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


<?if(count($arResult["LINKED_ELEMENTS"])>0):?>
<b>Товары этого бренда в нашем каталоге:</b>
<?foreach($arResult["LINKED_ELEMENTS"] as $arElement):?> 
 
//это ссылка на детальный просмотр <a href="<?=$arElement["DETAIL_PAGE_URL"]?>"> <?=$arElement["NAME"]?> </a>
//это картинка превью товара <? $res = CIBlockElement::GetByID($arElement["ID"]); if($ar_res = $res->GetNext()) echo CFile::ShowImage($ar_res['PREVIEW_PICTURE'], 200, 200, "border=0", "", true); ?> <?endforeach;?> <?endif?>

Свойство привязка к Google карте


 <? $arProperty = $arResult["DISPLAY_PROPERTIES"]; ?>
<? if (isset($arProperty['СВОЙСТВО'])):?>
<? $arPos = explode(",", $arProperty['СВОЙСТВО']['VALUE']);?>
<?$APPLICATION->IncludeComponent("bitrix:map.google.view", ".default", array( 
		"INIT_MAP_TYPE" => "MAP",
		"MAP_DATA" => serialize(array( 
		'google_lat' => $arPos[0], 
		'google_lon' => $arPos[1], 
		'google_scale' => 13, 
	'PLACEMARKS' => array ( 
		array( 
			'TEXT' => $arProperty["СВОЙСТВО_ГОРОД"]["VALUE"].", ".$arProperty["СВОЙСТВО_АДРЕС"]["VALUE"], 
			'LON' => $arPos[1], 
			'LAT' => $arPos[0], 
			), 
	), 
)), 
	"MAP_WIDTH" => "600", 
	"MAP_HEIGHT" => "600", 
	"CONTROLS" => array( 
	"SMALL_ZOOM_CONTROL",
	"SCALELINE" 
), 
	"OPTIONS" => array( 
	"ENABLE_SCROLL_ZOOM", 
	"ENABLE_DBLCLICK_ZOOM", 
	"ENABLE_DRAGGING", 
	"ENABLE_KEYBOARD" 
), 
	"MAP_ID" => "" 
), 
false 
);?> 
<?endif;?>

Вывести любое множественное свойство:


 <?foreach($arResult["DISPLAY_PROPERTIES"] as $pid=>$arProperty):?> 
 <? if($pid =="MATERIAL"):?> 
 <li><b><?=$arProperty["NAME"]?>:</b> <?
 if(is_array($arProperty["DISPLAY_VALUE"])):
 echo implode("&nbsp;/&nbsp;", $arProperty["DISPLAY_VALUE"]);
 elseif($pid=="MANUAL"):
 ?><a href="<?=$arProperty["VALUE"]?>"><?=GetMessage("CATALOG_DOWNLOAD")?></a><?
 else:
 echo $arProperty["DISPLAY_VALUE"];?>
 <?endif?></li>
 <?endif;?>
 <?endforeach;?>

Вывести теги с отправкой на страницу поиска

Вывести теги с отправкой на страницу поиска


<?
$arrTags = explode(',', $arResult["TAGS"]);
	$count = count($arrTags);
	$i = 0;
	foreach($arrTags as $value):
	$i++;
	$value = trim($value);
	echo ' <a href="/search/?tags='.str_replace(' ', '+', $value).'">'.$value.' </a>';
	endforeach;
?>

Вывести дату создания элемента в правильном формате "22 января 2015"


<?
$arParams["DATE_CREATE"]="j F Y";
	echo CIBlockFormatProperties::DateFormat($arParams["DATE_CREATE"], MakeTimeStamp($arItem["DATE_CREATE"], CSite::GetDateFormat()));
?>

Вывести количество просмотров элемента инфоблока. Если просмотров нет, вывести 0


 <?if (strlen($arItem['SHOW_COUNTER'])>0):?>
 <?=$arItem['SHOW_COUNTER']?>
 <?else:?>
	0
 <?endif;?>

Вывести количество комментариев к элементу инфоблока. Если просмотров нет, вывести 0


 <?if (strlen($arResult['DISPLAY_PROPERTIES']['BLOG_COMMENTS_CNT']['DISPLAY_VALUE'])>0):?>
 <?echo $arResult['DISPLAY_PROPERTIES']['BLOG_COMMENTS_CNT']['DISPLAY_VALUE'];?>
 <?else:?>
0
 <?endif;?>

Вывести путь к файлу из пользовательского поля раздела инфоблока в catalog.section.list

Для этого создаем два пользовательских поле типа Файл и даем им коды UF_FILE и UF_SECOND_FILE. В шаблоне catalog.section.list создаем файл result_modifier.php с содержимым:


$db_list = CIBlockSection::GetList(Array($by=>$order),
$arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"],
"ID"=>$arResult['SECTIONS']), true,
$arSelect=Array("UF_FILE", "UF_SECOND_FILE"));
while($ar_result = $db_list->GetNext()) {
    $arResult["UF_FILE"][$ar_result["ID"]] = CFile::GetPath($ar_result["UF_FILE"]);
      $arResult["UF_SECOND_FILE"][$ar_result["ID"]] = CFile::GetPath($ar_result["UF_SECOND_FILE"]);
}

В нужном месте шаблона catalog.section.list выводим пути к этим файлам (могут быть картинкой, файлом, чем угодно)


$arResult['UF_FILE'][$arSection['ID']];
$arResult['UF_SECOND_FILE'][$arSection['ID']];
Гость 01.09.2022
Цитата

<?
echo implode(', ', $arResult['DISPLAY_PROPERTIES']['ВАШЕ_СВОЙСТВО']['VALUE']);
?>
Супер! То что надо, спасибо!
Михаил Базаров 31.08.2022
Цитата
Андрей написал:
Подскажите, пожалуйста, как вывести отдельное свойство инфоблока, у которого несколько значений должны быть разделены запятой

Если правильно понял вопрос:
Код
<?
echo implode(', ', $arResult['DISPLAY_PROPERTIES']['ВАШЕ_СВОЙСТВО']['VALUE']);
?>
Андрей 31.08.2022
Подскажите, пожалуйста, как вывести отдельное свойство инфоблока, у которого несколько значений должны быть разделены запятой
Михаил Базаров 04.07.2022
Цитата
Максим написал:
Здравствуйте! Подскажите, пожалуйста,
Хочу вывести срок годности на видном месте, где он заполнен. Использую ваш 1 пример <? if ($arResult["DISPLAY_PROPERTIES"]['СВОЙСТВО']){?> //если не пустое <?=$arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['NAME']?> //вывести название <?echo $arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['DISPLAY_VALUE'];?> //и значение <?}?>
Но Не работает. Сейчас использую вот такой <div class="expired"><?=$arResult['PROPERTIES']['GODEN_DO']['VALUE']['NAME'];?></div> Показывается, но имя свойста "Годен до" везде отображается, даже у товаров у которых он не заполнен. Как правильно задать условие, чтобы показывалось имя свойства только при условии заполненного значения? Заранее спасибо.

Добрый
Попробуйте вот так:
Код
<?if (strlen($arResult['PROPERTIES']['GODEN_DO']['VALUE']) !== 0) {?>
   <?=$arResult['PROPERTIES']['GODEN_DO']['NAME'];?>:
    <?=$arResult['PROPERTIES']['GODEN_DO']['VALUE'];?>
<?}?>
Максим 03.07.2022
Здравствуйте! Подскажите, пожалуйста,
Хочу вывести срок годности на видном месте, где он заполнен. Использую ваш 1 пример <? if ($arResult["DISPLAY_PROPERTIES"]['СВОЙСТВО']){?> //если не пустое <?=$arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['NAME']?> //вывести название <?echo $arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['DISPLAY_VALUE'];?> //и значение <?}?>
Но Не работает. Сейчас использую вот такой <div class="expired"><?=$arResult['PROPERTIES']['GODEN_DO']['VALUE']['NAME'];?></div> Показывается, но имя свойста "Годен до" везде отображается, даже у товаров у которых он не заполнен. Как правильно задать условие, чтобы показывалось имя свойства только при условии заполненного значения? Заранее спасибо.
Bakha 02.12.2021
Здравствуйте! Помогите пожалуйста разобраться.
Данный код выводит название элемента и ссылку на него.
Как вывести вместо название элемента вывести свойство?
Код
<?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;?>
Название элемента
Код
<li><b><a href='<?=$ar_res["DETAIL_PAGE_URL"];?>'><?=$ar_res["NAME"];?></a></b></li>
Свойство элемента
Код
<li><b><a href='<?=$ar_res["DETAIL_PAGE_URL"];?>'><?=$ar_res["Свойство"];?></a></b></li>
Надеюсь понятно объяснил)
ольга евдокимова 04.08.2020
Огромное спасибо за материал! Сколько миллонов раз я его использовала на сайтах, просто не описать словами!
Микки Маус 07.06.2019
Добрый день, Михаил!

В комплексном каталоге этот код не работает:
Код
<? if ($arResult["DISPLAY_PROPERTIES"]['СВОЙСТВО']{?> //если не пустое 
<?=$arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['NAME']?>  //вывести название 
<?echo $arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['DISPLAY_VALUE'];?>  //и значение  
Опытным путем подобрал рабочий:
Код
<? if ($arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"]){?>
<?=$arItem["PROPERTIES"]["СВОЙСТВО"]['NAME']?> 
<?=$arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"];?>
<?}?> 
Я только начинаю осваивать Битрикс и пока не понимаю, в чем отличия arResult от arItem, DISPLAY_PROPERTIES от PROPERTIES, DISPLAY_VALUE от VALUE, а также какие кавычки ставить.

Еще может кому пригодится код для создания ссылки:
Код
<? if ($arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"]){?>
<a href="<?=$arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"];?>"><?=$arItem["PROPERTIES"]["СВОЙСТВО"]["NAME"];?></a>
<?}?> 
 
Елена Беляева 21.03.2019
Здравствуйте, подскажите пожалуйста почему не выводится свойство
<?if(!empty($arResult["DETAIL_PICTURE"]["SRC"])):?>

      <div class="tickets_block">

           <?if($arResult['PROPERTIES']['ATT_TICKETS']['VALUE_XML_ID']=='Y'):?>        
                 <span class="tickets_icon"></span>
           <?endif?>

<img src="<?=$arResult["DETAIL_PICTURE"]["SRC"];?>" alt="<?=$arResult["NAME"];?>" class="actions">
</div>
<?endif;?>
В каталоге работает, а вот в news.detail не срабатывает.
Алексей Клёнин 08.11.2018
Михаил, добрый вечер.
Подскажите пожалуйста, в детальном просмотре выводятся дополнительные свойства, порядка 10 штук, в одном месте.
Среди них есть 1 свойство, содержащее ссылку на видео, его нужно выводить на этой же странице, но в другом месте. С этим проблем нет, его мы выводим отдельно.

Вопрос, как можно удалить это свойство, содержащее ссылку на видео из вывода всех полей, которые выводятся через foreach? Пробовал через unset почему то не получилось, также пробовал через continue. Тоже безрезультатно. Какие ещё могут быть варианты?
Алексей Сель 22.02.2018
Цитата
Михаил Базаров пишет:
Цитата
Алексей Сель написал:
Цитата
Михаил Базаров пишет:
Цитата
Алексей Сель написал:
Здравствуйте! Подскажите пожалуйста как вывести по отдельности свойства элемента в catalog.top?
Точно также как и в catalog.section у них шаблоны принципиально не отличаются
использую
Код
  <?=$arItem['PROPERTIES']['BR_PRICE']['VALUE']?>  
нефига не происходит(
Потомучто в топе, как и в catalog.section, нужно использовать $arElement

<?=$arElement['PROPERTIES']['BR_PRICE']['VALUE']?>
arElement тоже пробовал, не работает, у меня в общем ТОП это  слайдер для популярных товаров, выводится на главную, может есть разница какая то что он вне комплексного компонента вставлен?
Михаил Базаров 22.02.2018
Цитата
Алексей Сель написал:
Цитата
Михаил Базаров  пишет:
Цитата
Алексей Сель написал:
Здравствуйте! Подскажите пожалуйста как вывести по отдельности свойства элемента в catalog.top?
Точно также как и в catalog.section у них шаблоны принципиально не отличаются
использую
Код
 <?=$arItem['PROPERTIES']['BR_PRICE']['VALUE']?> 
нефига не происходит(  
Потомучто в топе, как и в catalog.section, нужно использовать $arElement

<?=$arElement['PROPERTIES']['BR_PRICE']['VALUE']?>
Алексей Сель 21.02.2018
Цитата
Михаил Базаров пишет:
Цитата
Алексей Сель написал:
Здравствуйте! Подскажите пожалуйста как вывести по отдельности свойства элемента в catalog.top?
Точно также как и в catalog.section у них шаблоны принципиально не отличаются
использую
Код
<?=$arItem['PROPERTIES']['BR_PRICE']['VALUE']?>
нефига не происходит(
Михаил Базаров 21.02.2018
Цитата
Алексей Сель написал:
Здравствуйте! Подскажите пожалуйста как вывести по отдельности свойства элемента в catalog.top?
Точно также как и в catalog.section у них шаблоны принципиально не отличаются
Алексей Сель 21.02.2018
Здравствуйте! Подскажите пожалуйста как вывести по отдельности свойства элемента в catalog.top?
Сергей Стефанович 01.02.2018
Вывести множественное свойство привязка к элементам в виде списка.


Код
<?foreach($arResult["PROPERTIES"]["TRENER"]["VALUE"] as $analog):?>
    <?$res = CIBlockElement::GetByID($analog);?>
    <?if($ar_res = $res->GetNext())?>

        <img src="<?=CFile::GetPath($ar_res["PREVIEW_PICTURE"])?>">
        <?=$ar_res["NAME"];?>
        <?=$ar_res["PREVIEW_TEXT"];?>

        <p><?=$ar_res["DISPLAY_PROPERTIES"]["TEL_TRENER"]["VALUE"];?></p>
<?endforeach;?>
 

Стандартные свойства выводятся, последнее (тип строка) не выводится
Алексей Богомолов 25.12.2017
Здравствуйте Михаил!

Пытаюсь вывести отдельное свойство ссылкой:  

Код
 <? if ( $arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"] > 0 ) : ?> 

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

    <? endif; ?>  
 
 



в файле: catalog.section ,  но что-то не получается. Помещаю этот код в отдельный див после дива с тайтлом. Не подскажите что делаю не так, не получается разобраться.
Код
     
Antik 09.11.2017
Хотя бы весь листинг кода привели...
ivdic 09.11.2017
аууу... есть кто живой тут?
ivdic 30.10.2017
Цитата
ivdic пишет:
Подскажите как в bitrix:search.page (результатах поиска стандартного компонента) вывести дополнительное свойство FILE в виде ссылки
вставляю

<? echo $arResult['PROPERTIES']['FILE']['VALUE'];?>
и
<? echo $arResult['DISPLAY_PROPERTIES']['FILE']['DISPLAY_VALUE'];?>


вообще ничего не выводится...может где какие переменные надо объявить?

Работы из портфолио

В портфолио не публикуются работы, доля моего участия в которых менее 80%.
Часто обращаются за доработками уже существующих проектов или реализацией не стандратного функционала на готовых сайтах.