Как добавить и отобразить свойства у разделов в 1С-Битрикс

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

Как добавить и вывести дополнительные поля и свойства раздела в 1С-Битрикс

Чтобы это сделать, зайдите в админку, на нужном разделе нажмите “Изменить” или кликните по его ID (стоит отметить, если вы кликните по имени раздела, вы перейдете в сам раздел).

Отлично, мы в настройках раздела. На последней вкладке Доп. свойства мы и создадим наше пользовательское свойство, кликаем на Добавить пользовательское свойство (если у вас ее нету, не забудьте сбросить ваши настройки формы – делается это тут же, кликните на синюю шестеренку и отмените настройки).

Теперь нам необходимо создать поле. Самым популярным типом является строка, меняем наш тип (по умолчанию Видео) на Строка. Самое важное задать понятный Код поля – ну, например, это может быть UF_TITLE или UF_SECTION_DESC – этот код нам в дальнейшем пригодится для вывода, поэтому желательно давать осмысленные названия.

Кстати говоря, приставку UF_ рекомендуется оставить, так как другим разработчикам будет более понятней что мы пытаемся вывести, да и вам самим тоже. В самом низу формы создания поля, после того как мы придумали ему имя и задали тип, мы пишем ему название на русском и английском (для админки).

1С-Битрикс как вывести пользовательские поля разделов

Поле мы создали, осталось понять как его вывести на сайте. Для начала заполните на каком-то разделе эти свойства (я создам 3 поля для мета свойств), после чего переходим на этот раздел на нашем сайте. Если нам необходимо выводить эти свойства динамически (ID раздела будет меняться в зависимости от того, на каком разделе мы сейчас находимся), то заходим в наш код компонента (новости это или каталог) и где-нибудь в начале кода или в самом конце пишем:

<?$fSections = CIBlockSection::GetList(
    false,
    Array("IBLOCK_ID" => 14, "ID" => $arResult ['ID'], "ACTIVE"=>"Y", "GLOBAL_ACTIVE"=>"Y", "SECTION_ACTIVE" => "Y"),
    false,
    Array("UF_TITLE", "UF_KEYWORDS", "UF_DESCRIPTION),
    false
);
$flSections = $fSections->Fetch();
if ($flSections['UF_TITLE']) {
    $APPLICATION->SetPageProperty("title", $flSections['UF_TITLE']);
}?>

Тут мы задаем ID инфоблока “IBLOCK_ID” => 14, и подхватываем наш динамический ID раздела
“ID” => $arResult [‘ID’]. В массиве, который отвечает за выбор полей для отображения, мы выводим 3 наших только что созданных свойства типа строка “UF_TITLE”, “UF_KEYWORDS”, “UF_DESCRIPTION”.

Кстати, если вы еще не читали про CIBlockSection::GetList, советую глянуть эту статью, возможно вы узнаете для себя много интересного 🙂
О том, как вывести остальные наши 2 свойства и просто работать с мета данными, вы можете прочитать в статье Как задавать мета свойства в 1С-Битрикс.

Довольно часто на проектах необходимо выполнить работу связанную с пользовательскими полями и дополнительными свойствами. Если на вашем сайте, сделанном на 1С-Битрикс, необходимо вывести такие поля, свяжитесь со мной по скайпу или напишите мне на почту.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

18 коментаря

    1. Для элемента можно использовать обычные свойства (которые задаются в инфоблоке). Если хотите, вот пример для заголовков:

      $myNewTitle = $arResult[‘PROPERTIES’][‘TITLE_NEW’][‘VALUE’];
      if(!$arResult[‘PROPERTIES’][‘TITLE_NEW’][‘VALUE’]) {
      $myTitle = $arResult[‘NAME’].” купить в Москве “.$arResult[‘ID’];
      $APPLICATION->SetPageProperty(“title”, “$myTitle”);
      } else {
      $APPLICATION->SetPageProperty(“title”, “$myNewTitle”);
      }

      В шаблоне элемента мы задаем код “какой заголовок задать на странице”. Не забудьте в настройках компонента выбрать “свойства на детальной странице” чтобы не грузить страницу лишними запросами, то есть – выбрать свойства которые используются на этой странице.

    2. Дмитрий, добрый день! В этой статье, по выводу пользовательского поля, использовал Ваш код, но почему то закрывающий php тег не активен. И в какой шаблон компонента нужно устанавливать Ваш код, может проблема в этом.
      Я использовал
      D:\OSPanel\domains\my_site\local\templates\my_site_template\components\bitrix\catalog\main\bitrix\catalog.section\.default\template.php. Отрабатываю навыки на локальном сервере. Заранее спасибо за ответ!

  1. Здравствуйте, Дмитрий! Скажите, пожалуйста, как добавить информацию на вкладку карточки товара? Внизу три вкладки – описание, которое можно править визуальным редактором, таблица размеров и отзывы. Хочу загрузить в таблицу размеров саму таблицу. Как это сделать в админке просто и быстро? Буду очень признательна за помощь!

      1. Дмитрий добрый день! Спасибо, отличный урок. Немогли бы подсказать пожалуйста, как решить такую задачу. Через компонент news.list выводятся элементы информационного блока медиагалерея в этом ИБ есть два раздела это фотогалерея и видеогалерея. Для этих разделов я добавил пользовательское поле UF_ICON. Теперь мне нужно получить значение этого пользовательского поля для каждого элемента. Воспользовался методом CIBlockSection::GetList, но получается вывести только значение пользовательского поля для одного элемента а нужно для всех. Вот код
        Код
        $iblock_id, ‘ID’ => $id_section), false, array(“ID”,”UF_PHOTO_ICON”), false);
        while($props_array = $section_props->GetNext()){
        $arResult[“SECTIONS_ID”] = $props_array[“ID”];
        }
        ?>

        
        				
  2. $db_list = CIBlockSection::GetList(
    [$by=>$order],
    [‘IBLOCK_ID’ => $arResult[‘IBLOCK_ID’], “ACTIVE”=>”Y”, ‘GLOBAL_ACTIVE’=>’Y’, ‘ID’ => $sectionIds],
    true,
    // [‘IBLOCK_ID’, ‘IBLOCK_SECTION_ID’, ‘IBLOCK_CODE’, ‘ID’, ‘NAME’, ‘CODE’, ‘PICTURE’, ‘UF_TYPE’, ‘UF_BG_TYPE’],
    [‘UF_*’],
    false
    );

    Подскажи почему пользовательское свойство не возвращается

    1. потому что не правильный код:
      $db_list = CIBlockSection::GetList(
      array($by=>$order),
      array(‘IBLOCK_ID’ => $arResult[‘IBLOCK_ID’], «ACTIVE»=>»Y», ‘GLOBAL_ACTIVE’=>’Y’, ‘ID’ => $sectionIds),
      false,
      array(‘IBLOCK_ID’, ‘IBLOCK_SECTION_ID’, ‘IBLOCK_CODE’, ‘ID’, ‘NAME’, ‘CODE’, ‘PICTURE’, ‘UF_TYPE’, ‘UF_BG_TYPE’, ‘UF_*’)
      );

  3. Здравствуйте! Подскажите пожалуйста как можно вывести дополнительные свойства раздела (тип файл), но не в каталоге, а например на главной странице в слайдере вывести “Лучшие категории”, с дополнительным пользовательским свойством в виде картинки?

    1. Добрый день. В массиве выбора укажите символьный код свойства “тип файл”, например UF_FILE (если вы его так назвали). На выходе у вас будет число по которому нужно будет получить путь к картинке (это идентификатор файла). Как это сделать вы можете прочитать тут – https://forwww.com/how-to-get-path-to-image-in-1c-bitrix/

    1. Здравствуйте, к сожалению не знаю в каком виде приходит ваше свойство из 1С, и каким образом стандартный обмен с 1С заполняет пользовательские свойства.
      Если бы речь шла про заполнение данного свойства при помощи API Битрикс, то тут даже документация дает пример:

            $bs = new CIBlockSection;
      
            $arFields = Array(
               "ACTIVE" => $ACTIVE,
               "IBLOCK_SECTION_ID" => False,
               "IBLOCK_ID" => $IBLOCK_ID,
               "NAME" => $data["title"],
               "UF_DESCRIPTION" => $data["description"],
               "UF_KEYWORDS" => $data["keywords"],
               "UF_TITLE" => $data["head_title"]
            );
      
            $bs->Update($data["id"], $arFields); 
      

Залишити коментар до Артём Скасувати коментар