Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

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

00 голосов
6
Использую комплексный компонент вывода каталога (Полный каталог bitrix:catalog). На странице вывода списка элементов хочу вывести пользовательское поле UF_TTX раздела в котором нахожусь.
Прочитал много тем по этому поводу но до конца не разобрался. smile:(
Стандартные методы не выводят значения полей типа "UF_TTX", т.е. в массиве значений $arResult в конечном итоге не содержится, отсюда и вопрос в каком месте(файле) нужно добавить к массиву значений массив с значениями полей типа "UF_TTX".
спросил 22 Сен, 13 от Acier (460 баллов)

6 Ответы

00 голосов
http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getlist.php смотри комментарии внизу, соответсвенно придётся править стандартный компонент  catalog.section.list либо catalog.section, в зависимости от задачи, если переписывать компонент лень, то тогда http://dev.1c-bitrix.ru/api_help/main/general/component20/13.result_modifier.php 
ответил 28 Сен, 13 от Zabulus (220 баллов)
00 голосов
Переписывать компонент не хочется, а вот изменить result_modifier.php устраивает, в комментариях написано что достаточно в
Код
$rsSections = CIBlockSection::GetList(
   array(), 
   array(
      "IBLOCK_ID" => $arParams["IBLOCK_ID"],
      "LEFT_MARGIN" => $arResult["LEFT_MARGIN"],
      "RIGHT_MARGIN" => $arResult["RIGHT_MARGIN"],
   ), 
   false, 
   array("ID", "DEPTH_LEVEL", "SECTION_PAGE_URL", "UF_*")
);
добавить в четвертом массиве
Код
"UF_*"
или явное определение
Код
"UF_TTX"
Но к сожалению в массиве значений данных полей не наблюдаю, скажите куда копать?

Весь код result_modifier.php
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

// cache hack to use items list in component_epilog.php
$this->__component->arResult["IDS"] = array();
$this->__component->arResult["OFFERS_IDS"] = array();

if(isset($arParams["DETAIL_URL"]) && strlen($arParams["DETAIL_URL"]) > 0)
   $urlTemplate = $arParams["DETAIL_URL"];
else
   $urlTemplate = CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "DETAIL_PAGE_URL");

//2 Sections subtree
$arSections = array();
$rsSections = CIBlockSection::GetList(
   array(), 
   array(
      "IBLOCK_ID" => $arParams["IBLOCK_ID"],
      "LEFT_MARGIN" => $arResult["LEFT_MARGIN"],
      "RIGHT_MARGIN" => $arResult["RIGHT_MARGIN"],
   ), 
   false, 
   array("ID", "DEPTH_LEVEL", "SECTION_PAGE_URL", "UF_TTX")
);

while($arSection = $rsSections->Fetch())
   $arSections[$arSection["ID"]] = $arSection;

foreach ($arResult["ITEMS"] as $key => $arElement) 
{
   $this->__component->arResult["IDS"][] = $arElement["ID"];
   
   if(is_array($arElement["OFFERS"]) && !empty($arElement["OFFERS"])){
      foreach($arElement["OFFERS"] as $arOffer){
         $this->__component->arResult["OFFERS_IDS"][] = $arOffer["ID"];
      }
   }
   
   if(is_array($arElement["DETAIL_PICTURE"]))
   {
      $arFilter = '';
      if($arParams["SHARPEN"] != 0)
      {
         $arFilter = array(array("name" => "sharpen", "precision" => $arParams["SHARPEN"]));
      }
      $arFileTmp = CFile::ResizeImageGet(
         $arElement["DETAIL_PICTURE"],
         array("width" => $arParams["DISPLAY_IMG_WIDTH"], "height" => $arParams["DISPLAY_IMG_HEIGHT"]),
         BX_RESIZE_IMAGE_PROPORTIONAL,
         true, $arFilter
      );

      $arResult["ITEMS"][$key]["PREVIEW_IMG"] = array(
         "SRC" => $arFileTmp["src"],
         'WIDTH' => $arFileTmp["width"],
         'HEIGHT' => $arFileTmp["height"],
      );
   }
   
   $section_id = $arElement["~IBLOCK_SECTION_ID"];

   if(array_key_exists($section_id, $arSections))
   {
      $urlSection = str_r eplace(
         array("#SECTION_ID#", "#SECTION_CODE#"),
         array($arSections[$section_id]["ID"], $arSections[$section_id]["CODE"]),
         $urlTemplate
      );

      $arResult["ITEMS"][$key]["DETAIL_PAGE_URL"] = CIBlock::Repl aceDetailUrl(
         $urlSection,
         $arElement,
         true,
         "E"
      );
   }   
   
}

$this->__component->SetResultCacheKeys(array("IDS"));
$this->__component->SetResultCacheKeys(array("OFFERS_IDS"));

?>
 
ответил 28 Дек, 13 от Acier (460 баллов)
00 голосов
вот пример из моего проекта


$dbSection = CIBlockSection::GetList(Array(), array("ID" => $arParams["PARENT_SECTION"], "IBLOCK_ID" => $arParams["IBLOCK_ID"]), false ,Array("UF_SEO_NAME"));
if($arSection = $dbSection->GetNext()){
$arResult["DESCRIPTION"] = $arSection["DESCRIPTION"];
if(!empty($arSection["UF_SEO_NAME"]))
$APPLICATION->SetPageProperty("title", $arSection["UF_SEO_NAME"]);
}
ответил 13 Апр, 14 от Zabulus (220 баллов)
00 голосов
Что то я совсем не до понимаю, по логике как понимаю нужно в массив $arResult передать значения из CIBlockSection::GetList(Array(), array(Array(),  $arFilter, false,Array("UF_TTX")).
ответил 06 Авг, 14 от Acier (460 баллов)
00 голосов
да чтобы было доступно в шаблоне, надо добавить нужное тебе значение в результирующий массив  $arResult
ответил 10 Дек, 14 от Zabulus (220 баллов)
00 голосов
Код
 $arResult = CIBlockSection::GetList(Array(), array("ID" => $arParams["PARENT_SECTION"], "IBLOCK_ID" => $arParams["IBLOCK_ID"]), false ,Array("UF_TTX")).
к сожалению это не работает, в общем я в тупике
ответил 02 Апр, 15 от Acier (460 баллов)
Попробуйте у компонента bitrix:catalog.section.list

указать

"SECTION_FIELDS" => Array("UF_*"),

Тогда в шаблоне появятся нужные свойства

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

0 голосов
3 ответов
спросил 12 Июль, 13 от Snezhka (2,240 баллов)
0 голосов
3 ответов
0 голосов
6 ответов
0 голосов
8 ответов