Golovina90
@Golovina90
Начинающий Web-Master

Как вывести выбранные дополнительные поля для разных разделов в Битриксе?

Здравствуйте. На сайте надо вывести выбранные уникальные значения из дополнительных полей (Теги) разделов (тип - Привязка к разделам инфоблока)
<div class="tags_cloud"><?
//$rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID" => "5"), false, $arSelect = array("UF_TAGI"));
$rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" =>$arResult["SECTION"]["ID"]), false, $arSelect = array("UF_TAGI")); 
if($arSection = $rsResult -> GetNext())
    { 
$uftag = $arSection["UF_TAGI"]; 
$ufcategory = $arSection["UF_CATEGORY"]; 

if($uftag) {
$arFilter = array('IBLOCK_ID' => 27,'ID' => $uftag);
$rsItems = CIBlockSection::GetList(array(),$arFilter);
echo '<div class="catalog-tags">';
while ($arItem = $rsItems->GetNext())
  { 
	  echo '<div class="catalog-tags-item"><a href="'.$arItem['SECTION_PAGE_URL'].'">'.$arItem["NAME"].'</a></div>';	
  }
 echo '</div>';
	}
	
if($ufcategory) {
$arFilter = array('IBLOCK_ID' => 27,'ID' => $ufcategory);
$rsItems = CIBlockSection::GetList(array(),$arFilter);
echo '<div class="catalog-list-cat">';
while ($arItem = $rsItems->GetNext())
  { 
	  echo '<div class="class="catalog-tags-item""><a href="'.$arItem['SECTION_PAGE_URL'].'">'.$arItem["NAME"].'</a></div>';	
  }
 echo '</div>';
	}

}
?></div>

Код срабатывает частично - выводятся значения из доп. полей. НО! Они одинаковы для всех разделов. А должны быть уникальны, как и в админке.
Ниже ссылки на разделы и скрины доп. полей (Теги) из админки.
Шкафы-купе от производителя
6056287b665d0419508800.jpeg
Встроенные шкафы купе
605628955f42a854356440.jpeg
  • Вопрос задан
  • 1625 просмотров
Решения вопроса 1
Golovina90
@Golovina90 Автор вопроса
Начинающий Web-Master
Поправка. Решение нашлось!
В catalog.section.list и почистить кэш
<? //Блок вывода Доп полей в разделах
$rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" =>$arResult["SECTION"]["ID"]), false, $arSelect = array("UF_TAGI")); 
if($arSection = $rsResult -> GetNext())
    { 
$uftag = $arSection["UF_TAGI"]; 

if($uftag) {
$arFilter = array('IBLOCK_ID' => 27,'ID' => $uftag);
$rsItems = CIBlockSection::GetList(array(),$arFilter);
echo '<div class="catalog-tags">';
while ($arItem = $rsItems->GetNext())
  { 
	  echo '<div class="catalog-tags-item"><a href="'.$arItem['SECTION_PAGE_URL'].'">'.$arItem["NAME"].'</a></div>';	
  }
 echo '</div>';
	}
}
?>

Первый код выводит из Доп. полей (тип - Привязка к разделам инфоблока) выбранные разделы, которые относятся только к одной категории (т.е. не учитывает при этом значения админки, что в другом разделе отмечены другие пункты).
А вот это код
<?
$IBLOCK_ID = 27; // ID нужного инфоблока

//Получаем все возможные поля текущего пользователя
$rsUser = CUser::GetByID($USER->GetID());
$arUser = $rsUser->Fetch();

//Выводим если множественное
foreach ($arUser['UF_TAGI'] as $propertyUf):
    echo $propertyUf;
endforeach;

//Создаем массив фильтра
$arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y');

//Добавляем наш массив в котором перечислены ID разделов выбранные пользователем
$sect_id = $fofilter;

//Создаем массив фильтра. В конце переменная фильтра
$arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', 'ID' => $sect_id);

//Создаем массив выводимых полей
$arSelect = array('ID', 'NAME');

//Применяем метод с фильтром и полями
$rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);

//Выводим названия разделов
while ($arSection = $rsSection->Fetch()) {
    echo $arSection['NAME'];
}

foreach ($arUser['UF_TAGI'] as $propertyUf):
    $sectionsUser .= '\'' . $propertyUf . '\',';
endforeach;

eval('$fofilter=array(' . $sectionsUser . ');');
extract($fofilter);

?>

выводит всё подряд.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы