Добавить и вывести значение свойства раздела (пользовательского поля) в Битриксе
И снова свойства, но уже разделов.Очень часто, делая каталог на 1С-Битриксе, требуется задать свойства и разделам, не только элементам. В стандартном функционале у нас есть только изображение и описание.
Чтобы вывести изображение раздела, нужно в шаблоне catalog.section прописать следующий код:
<?php if ($arResult["PICTURE"]["SRC"]) {?>
<a class="highslide1" onclick="return hs.expand(this)" title="<?=$arResult["NAME"]?>" href="<?=$arResult["PICTURE"]["SRC"]?>">
<img style="width:300px" src="<?=$arResult["PICTURE"]["SRC"]?>" title="<?=$arResult["NAME"]?>" />
<?php } else { ?><?php }?>
Чтобы было яснее, у меня идет сначала проверка, есть ли фотография, а потом идет вывод фотографии, там class и onclick - это остатки от галереи, не обращайте на них внимания. Если фотографии нет, то ничего и не выводится.
Чтобы вывести описание раздела, в шаблоне catalog.section прописываем код:
<?=$arResult["DESCRIPTION"]?>
Или для раздела news.list, если параметр выдается в виде массива Array:
<?foreach($arResult["SECTION"]["PATH"] as $arSection):?>
<?=$arSection["DESCRIPTION"]?>
<?endforeach;?>
Теперь самая соль.
Чтобы задать дополнительное свойство раздела, нужно использовать Пользовательские поля.
Заходим в свойства раздела, выбираем вкладку "Доп. свойства" и нажимаем на "Добавить пользовательское поле".
Создаете нужное поле требуемого типа и сохраняете. Потом в Свойствах раздела вы заполняете ваше созданное свойство раздела.
Теперь, самое главное, чтобы вывести свойство раздела (пользовательское поле) нужно, всё в том же шаблоне catalog.section прописать следующий код:
Для НЕ МНОЖЕСТВЕННОГО свойства раздела (пользовательского поля):
<?
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter = Array("IBLOCK_ID"=>$arResult["IBLOCK_ID"], "ID"=>$arResult["ID"]), true,$arSelect=Array("UF_DOC"));
while($ar_result = $db_list->GetNext()):
?>
<?=CFile::GetPath($ar_result["UF_DOC"]); ?>
<?endwhile?>
Для МНОЖЕСТВЕННОГО свойства раздела (пользовательского поля):
<?
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter = Array("IBLOCK_ID"=>$arResult["IBLOCK_ID"], "ID"=>$arResult["ID"]), true,$arSelect=Array("UF_FILE"));
while($ar_result = $db_list->GetNext()):
?>
<?foreach($ar_result["UF_FILE"] as $PHOTO):?>
<?=CFile::GetPath($PHOTO); ?>
<?endforeach?>
<?endwhile?>
В данном случае код используется CFile::GetPath, чтобы вывести ссылку на файл, дальше обработать ее, думаю, не составит труда.
Таким образом для значения типа данных "Файл" используем:
<?=CFile::GetPath($PHOTO); ?>
а, чтобы вывести текстовое значение поля типа данных "Строка":
<?=$ar_result["UF_TEXT"] ?>
Для вывода пользовательского поля в шаблоне catalog.section.list я использовал следующий кода:
<?
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter = Array("IBLOCK_ID"=>$arSection["IBLOCK_ID"], "ID"=>$arSection["ID"]), true,$arSelect=Array("UF_ACT"));
while($ar_result = $db_list->GetNext()):
?>
<? if ($ar_result["UF_ACT"]):?>
<font color="red">Акция!</font>
<? endif ?>
<?endwhile?>
8. Вывод пользовательского свойства типа "Привязка к элементам инф.блока" в разделе инфоблока catalog.section.list. Напрмер нужно выводить свзанные позиции другого каталога или связанные новости и т.п.
Для этого испольузуется следующий код:
<!-- Код отвечет вывод пользовательского свойства типа "Привязка к элементам инф.блока" в разделе инфоблока и размещенн в template.php, который лежит в шаблоне catalog.section.list -->
<?
//Сначала мы получаем ID привязанных элементов к нашему разделу по нужному нам свойству UF_NOV (можно написать UF_*, тогда будут получены все свойства вида UF_), т.е. ID инфоблока, у которого в разделе выводим свойство равен 3. Т.к. значение множественное, то его выводим циклом. Там еще стоит условие, что если заначения нашего свойства пустое, но чтобы ничего не выводил
$rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID" => "3", 'ID' => $arResult["SECTION"]["ID"]), true, Array("UF_NOV"));
while ($arResult = $rsResult -> GetNext())
{
if (!empty($arResult["UF_NOV"])) // условие, что пустые занчения не выводим
{
$iter = $arResult["UF_NOV"]; //получили наши ID элементов из ИБ id 8, которые привязаны к разделу ИБ id 3
}
}
//Здесь мы начинаем выводить элементы другого инфоблока с ID 8, к которым привязан наш раздел свойством UF_NOV
$arFilter = array('IBLOCK_ID' => 8,'ID' => $iter);//задаем в фильтр чтобы выводил тольк из ИБ id 8 и только нужные нам элемены по ID, которые мы получили выше
$rsItems = CIBlockElement::GetList(array(),$arFilter);
while ($arItem = $rsItems->GetNext())
{
if (!empty($iter)) // условие, что пустые занчения не выводим
{
$resizer = $arItem['PREVIEW_PICTURE']; //функция ресайза картинки, если нужно
$file = CFile::ResizeImageGet($resizer, array('width'=>1000, 'height'=>290), BX_RESIZE_IMAGE_PROPORTIONAL , true); //функция ресайза картинки, если нужно
$img = $file['src']; //функция ресайза картинки, если нужно
echo '<img src="'.$img.'" /><br><a href="'.$arItem["DETAIL_PAGE_URL"].'">'.$arItem["NAME"].'</a>';
}
}
?>
Может сулчится так, что перестанет работать цепочка навигации, т.е. ее данные перестанут поступать, тогда мы переносим код, отвечающи за ее вывод? перед нашим кодом из component.php в файл шаблона template.php:
<!-- Код отвечет за формирование цепочки навигации. Он взят из файла component.php без изменений -->
<?
if($arParams["ADD_SECTIONS_CHAIN"] && isset($arResult["SECTION"]) && is_array($arResult["SECTION"]["PATH"]))
{
foreach($arResult["SECTION"]["PATH"] as $arPath)
{
$APPLICATION->AddChainItem($arPath["NAME"], $arPath["~SECTION_PAGE_URL"]);
}
}
?>
Количество показов: 51325