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

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

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

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

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

В системе «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>
	…

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

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

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

Прочитано 37195 раз
Мои услуги

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

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

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

Скачать

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

Наверх