Матвей Земсков

Заметки веб-мастера

Четверг, 20 декабря 2012 17:24

Используем пользовательские поля на сайте под управлением 1С-Битрикс

Оцените материал
(8 голосов)

В системе «1С-Битрикс» есть очень полезная «фишка» под названием «Пользовательские поля». Этот функционал позволяет добавлять объектам дополнительные поля, которые не предусмотрены в системе по умолчанию. Объектами могут быть: пользователи, сообщения блога или комментарии к ним, инфоблоки и их разделы и кое-что еще. С полным списком объектов можно ознакомиться на странице курса «Разработчик Bitrix Framework». В этой статье я опишу процесс добавления и получения данных из пользовательского поля. Все действия я буду проводить над демо-версией сайта под управлением CMS «1С-Битрикс. Управление сайтом» версии 12.0.3. При установке я выбрал «решение для разработчиков».

Сначала добавлю новое пользовательское поле в раздел инфоблока. Тип поля – строка. В системе поддерживаются различные типы пользовательских полей. Например, целое число, дата/время, файл, список и другие. Для своих опытов я выбрал инфоблок «Новости». В добавленном поле я буду хранить какое-нибудь значение, поле назову «UF_MY_FIELD».

Вообще добавить новое пользовательское поле можно в разделе настроек административной части сайта: Настройки → Настройки продукта → Пользовательские поля, но правильнее будет это сделать на закладке «Доп. свойства» любого раздела определенного инфоблока, в случае если поле добавляется разделу.

Создание пользовательского поля

Теперь заполню одно из полей у раздела с ID равным 5 - «Выставки» (инфоблок «Новости»). Значение этого поля будет «Test». Далее я покажу, как вывести значение этого поля на странице сайта, например, в компоненте «Список разделов каталога» (bitrix:catalog.section.list).

Сначала создадим в корне сайта новую страницу с именем test.php. Разместим на ней компонент bitrix:catalog.section.list и сделаем настройки.

Размещение компонента bitrix:catalog.section.list на странице

Далее скопируем шаблон компонента в папку нашего шаблона сайта. Назовем новый шаблон “test_fields”. Создадим в папке «нового» шаблона файл result_modifier.php. В нем мы будем «обходить» массив $arResult и добавлять в него данные из пользовательских полей разделов, если они не пустые. В файле будет содержаться следующий код:

PHP

	<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

	foreach($arResult["SECTIONS"] as $key => $arSection){
		// получаем значение пользовательского поля у каждого раздела
		$arUF = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("IBLOCK_3_SECTION",$arSection['ID'],"UF_MY_FIELD");
		if($arUF["UF_MY_FIELD"]["VALUE"] != ""){
			$arResult["SECTIONS"][$key]["UF_MY_FIELD"] = $arUF["UF_MY_FIELD"]["VALUE"];
		}
	}
	?>

Для проверки можно вывести измененный массив с помощью print_r().

Измененный массив $arResult

В коде используется функция CAllUserTypeManager::GetUserFields(), она возвращает массив с информацией о значении пользовательского поля.

Описание функции

CAllUserTypeManager::GetUserFields(
string entityID,
int ElemID,
string fieldName)


entityID - имя объекта пользовательского поля;
ElemID - идентификатор элемента (вероятно, ID элемента, свойство которого мы сохраняем или получаем. в нашем случае, это ID комментария);
fieldName - имя пользовательского поля (по умолчанию false);
Функция возвращает массив с информацией о значении пользовательского поля.
Код функции находится в файле - /bitrix/modules/main/classes/general/usertype.php

Теперь, когда значение пользовательского поля находится в массиве $arResult, можно вывести его в шаблоне компонента. Например, я выведу значение элемента массива $arSection[“UF_MY_FIELD”] после названия раздела. Для этого изменим код в шаблоне компонента:

PHP

	…
	<li id="<?=$this->GetEditAreaId($arSection['ID']);?>">
	  <a href="/<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]." <b>".$arSection["UF_MY_FIELD"]."</b>"?><?if($arParams["COUNT_ELEMENTS"]):?> (<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a>
	</li>
	…

И получим результат:

Вывод значения пользовательского поля на страницу

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

Прочитано 19036 раз
Добавить комментарий

Комментарии   

 
0 # Алексей 10.05.2013 21:22
Супер! Огромное спасибо!
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # Дмитрий 02.09.2013 12:55
СПАСИБО!!! «Несмотря на то, что показанный в статье пример не особо полезен, тем не менее, он показывает как можно получить доступ к значению пользовательских полей в шаблоне компонента.» - ЭТО ЛОЖЬ!!! Вещь полезная!
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Матвей 05.09.2013 13:35
Пожалуйста, Дмитрий! :-)
Рад, что информация оказалась полезной для вас.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Виталий 10.12.2013 12:05
Матвей. Спасибо за предоставленную информацию.
Ответьте пожалуйста на вопрос, вы создали файл result_modifier.php - а где он подключается?
Не было бы правильней вставить код из этого файла в какой-то уже существующий подключенный ко всей системе файл?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Матвей 11.12.2013 07:08
Пожалуйста, Виталий! Файл result_modifier.php как раз и подключается системой перед вызовом шаблона компонента. Подробнее о нем здесь - http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2830&LESSON_PATH=3913.4565.2830
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Никита 20.07.2015 14:13
Спасибо большое, все работает и, что самое главное, все подробно расписано - что и куда вставлять, при желании можно разобраться с похожими задачами! Просто супер!)
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Матвей 21.07.2015 09:32
Пожалуйста, Никита! :-)
Ответить | Ответить с цитатой | Цитировать
 
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию: