Странно что до сих пор нет такого свойства в стандартной поставке. Может где-то проскакивало на форуме - не помню, решил написать своё для удобства работы, может кому-то пригодится:
Как использовать: 1. разместить файл CViDiPropSection.php в папке /bitrix/php_interface/lib/ 2. в файле /bitrix/php_interface/init.php добавить код:
AddEventHandler("main", "OnBeforeProlog", "IBlockOnBeforePrologHandler");
function IBlockOnBeforePrologHandler()
{
// Пользовательское свойство - привязка к разделам в виде списка
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/lib/CViDiPropSection.php");
}
После этого на странице настроек свойств инфоблока появится это свойство:
Если разделы имеют вложенную структуру - то они показываются последовательно, один под одним (после выбора раздела первого уровня предлагается выбрать раздел второго уровня, и тд.). Удобно если разделов очень большое количество.
AddEventHandler("main", "OnBeforeProlog", "IBlockOnBeforePrologHandler");
function IBlockOnBeforePrologHandler()
{
global $USER;
if (is_object($USER) && $USER->isAuthorized())
{
// Пользовательское свойство - привязка к разделам в виде списка
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/lib/CViDiPropSection.php");
}
}
Т.е. чтобы не подключать лишний код для обычных пользователей и ускорить загрузку страницы. А объект $USER есть только после OnBeforeProlog.
Чтобы файл подключался только тогда, когда нужен, лучше воспользоваться автолоадом:
CModule::AddAutoloadClasses(
'',// здесь ничего не указывать
array(
'CViDiPropSection' => BX_PERSONAL_ROOT.'/php_interface/lib/CViDiPropSection.php'
)
);
Только здесь из CViDiPropSection.php нужно вынести в init.php добавление обработчика события OnIBlockPropertyBuildList.
Согласен, если методы юзертайпа не планируется использовать до вызова CIBlockProperty::GetUserType(), то можно обойтись пятым параметром AddEventHandler().
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».