партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Модуль "Универсальные списки" - достаточно мощный и функциональный. Его можно с успехом использовать для предоставления пользователям сайта возможности добавлять и редактировать свои элементы инфолока в публичной части. Однако принцип работы с ним сильно отличается от того, к чему мы привыкли, работая, например, с компонентом "Добавление элементов инфоблока". Прежде всего это касается настройки прав доступа. В этой статье я расскажу как настроить модуль для выполнения задачи, аналогичной той, которая раньше решалась с помощью компонента "Добавление элементов инфоблока", т.е. чтобы пользователь мог добавлять элементы инфоблока, и редактировать элементы, но только добавленные им самим, с возможностью модерации редактором сайта.
[spoiler]
1. Создаем тип инфоблока

Т.к. комплексный компонент "Универсальные списки" (bitrix:lists) не работает с отдельными инфоблоками, cоздаем тип инфоблока "Компании".

2. Настраиваем тип инфоблока для работы с универсальными списками

Для этого заходим в настройки модуля "Универсальные списки" (Настройки > Настройки продукта > Настройки модулей > Универсальные списки) и на вкладке "Права доступа" разрешаем группе "Администраторы" управлять списками в нашем созданном типе инфоблока "Компании".

Настройки модуля Универсальные списки

Этот шаг обязателен, т.к. без него при размещении компонента наш тип инфоблока не появится в выпадающем списке в параметрах компонента.

3. Размещаем компонент

Создаем на сайте раздел, и размещаем в нем компонент "Универсальные списки".

Компонент Универсальные списки - визуальный редактор

В параметрах компонента выбираем наш тип инфоблока и включаем поддержку ЧПУ (в режиме не-ЧПУ лично мне не удалось заставить компонент работать).

Компонент Универсальные списки - параметры

Добавляем инфоблок (список)

После размещения компонента, мы увидим на странице панель с одной кнопкой "Добавить". С помощью нее мы и сможем добавить инфоблок.

Компонент Универсальные списки - Главная страница без инфоблоков

Нажимаем кнопку "Добавить". Откроется форма добавления инфоблока.

Компонент Универсальные списки - добавление инфоблока

На вкладке "Доступ" устанавливаем для группы "Зарегистрированные пользователи" право "Добавление", а для категории пользователей "Автор" - право "Изменение". Последнее даст возможность пользователю редактировать свои элементы. Если же установить для группы "Зарегистрированные пользователи" право "Изменение", то пользователь сможет редактировать все элементы инфоблока, а не только свои. Вместо группы "Зарегистрированные пользователи", можно также использовать категорию "Все авторизованные пользователи".

Компонент Универсальные списки - добавление инфоблока - права доступа

Примечание: инфоблок также можно добавить через административную часть битрикс, если включить расширенные права доступа.

После выполнения данных действий, пользователи группы "Зарегистрированные пользователи", увидят следующее на главной странице раздела:

Компонент Универсальные списки - главная страница для пользователя

При выборе инфоблока (списка) "Компании", пользователю будет доступен список его элементов.

Компонент Универсальные списки - список элементов для пользователя

При нажатии кнопки "Добавить компанию", откроется форма редактирования:

Компонент Универсальные списки - редактирование элемента для пользователя

Добавление полей

Интерфейс добавления полей один для собственно полей и свойств инфоблока. При этом можно задать собственное название для любого поля, как и в компоненте "Добавление элементов инфоблока".

Компонент Универсальные списки - список полей

Отправка уведомлений и утверждение

Отправка уведомлений администратору сайта и утверждение документов при работе с универсальными списками как правило осуществляется с помощью бизнес-процессов. Т.к. использовать стандартные бизнес-процессы в данном случае не представляется удобным, то придется создать свой бизнес-процесс. Можно также использовать вместо бизнес-процессов модуль "Документооборот", но настраивать инфоблок на работу с документооборотом придется через административную часть битрикс, т.к. в компоненте "Универсальные списки" такая возможность отсутствует).

Для использования бизнес-процессов со списком (инфоблоком), в настройках списка должна быть установлена галочка "Включить поддержку бизнес-процессов". Тогда для администратора в панели инструментов списка появится кнопка "Бизнес-процессы".

Компонент Универсальные списки - кнопка Бизнес-процессы

После нажатия на кнопку мы увидим список шаблонов бизнес-процессов.

Компонент Универсальные списки - шаблоны бизнес-процессов

Нажимаем кнопку "Создать последовательный бизнес-процесс". Откроется страница редактирования шаблона бизнес-процесса.

Это немного модифицированный стандартный бизнес-процесс "Утверждение по первому голосу". Т.к. стандартный механизм публикации использовать не удалось - при снятии с публикации, элементы не отображаются в списке (даже под админом), я использовал вместо блоков "Публикация"/"Снятие документа с публикации" блоки "Изменение документа" с простой активацией/деактивацией. Кроме того, вместо почтовых сообщений, я использовал сообщения соцсети.

В параметрах шаблона устанавливаем галочку "Автоматически запускать при добавлении".

Компонент Универсальные списки - редактирование шаблона бизнес-процесса

Если же установить галочку "Автоматически запускать при изменении", то процесс будет запускаться пользователем при изменении элемента. Либо можно создать для этого отдельные бизнес-процесс, который будет функционировать по другому сценарию, например, не деактивировать элемент, а просто отправлять уведомление редакторам сайта.

Примечание: имейте в виду, что если для группы пользователей не установлен доступ к списку (инфоблоку) хотя бы "Чтение", то эта группа не появится в диалоге выбора групп пользователей в дизайнере бизнес процессов, и вы не сможете, например, запрограммировать отправку уведомления этой группе.

Правка шаблона компонента

Правка шаблона компонента в нашем случае будет сводится в основном к упрощению и отключению лишнего функционала.

Например, чтобы изменить внешний вид списка по умолчанию (по умолчанию отображаются все колонки полей, цветовая схема - синяя), добавим в шаблон компонента lists.list в файл result_modifier.php, следующий код:


$aOptions CUserOptions::GetOption("main.interface.grid"$arResult["GRID_ID"], array());


if(!
$aOptions) {

   
$aOptions = array (
    
'views' => 
    array (
      
'default' => 
      array (
        
'name' => '<Представление по умолчанию>',
        
'columns' => 'NAME,BIZPROC',
        
'sort_by' => 'NAME',
        
'sort_order' => 'asc',
        
'page_size' => '20',
        
'saved_filter' => '',
      ),
    ),
    
'filters' => 
    array (
    ),
    
'current_view' => 'default',
    
'filter_rows' => 'list_section_id',
    
'theme' => 'grey',
   );
   
   
CUserOptions::SetOption("main.interface.grid"$arResult["GRID_ID"], $aOptions);
   
}
Данный код установит вывод только колонок "Название", "Бизнес-процессы", серую цветовую схему и пр. Если же пользователь уже выбирал колонки или что-то другое, его выбор не будет изменен.

В том же файле result_modifier.php убирем ссылку на бизнес-процесс в списке, оставляем только название. Само название колонки "Бизнес-процессы" меняем на "Статус". Таким образом в этой колонке будет отображаться статус бизнес-процесса, например, мы можем в самом бизнес-процессе устанавливать статусы "На модерации", "Опубликован", "Отклонен".

Чтобы убрать возможность запуска бизнес-процесса из контекстного меню, в том же файле вставляем код:


foreach($arResult["ELEMENTS_ROWS"] as  $i => $arRow) {


   
$arActions = Array();

   foreach(
$arRow["actions"] as $a => $arAction
      if(!
$arAction["MENU"]) $arActions[] = $arAction;

   
$arResult["ELEMENTS_ROWS"][$i]["actions"] = $arActions;
   
}

Теперь правим шаблон компонента lists.element.edit - полностью убираем вкладки "Бизнес-процессы" и "Разделы". Для первого достаточно найти в файле template.php конструкцию CModule::IncludeModule( "bizproc" ) и подставить рядом с ней " && false", для второго - найти и закомментировать строку:


array("id"=>"tab_se""name"=>$arResult["IBLOCK"]["SECTION_NAME"], "icon"=>"""fields"=>$arTabSection),


Итог

В целом использование модуля "Универсальные списки" для решения данной простой задачи не является оправданным и даже удобным (пришлось выполнять слишком много действий, не обошлось без правки шаблона компонента). Компонент "Добавление элементов инфоблока" гораздо лучше подходит для этого, если бы не одно но - этот компонент больше не поддерживается компанией 1С-Битрикс, и самые простые вещи приходится дорабатывать почти с нуля. Поэтому во многих случаях описанный метод может иметь преимущества.

Примечание: статья написана на основе опыта работы с модулем "Универсальные списки" версии 11.5.1

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью:
vladdis
27.12.2012 10:34:49
вот спасибо, особенно за шаблоны. у битрикса настолько убогая документация, а по теме вообще ничего стоящего нет
06.12.2019 00:17:29
Комментарий
Сергей, в принципе, не плохой способ, открывающий много интересного с точки зрения активности на сайте.
Есть ряд вопросов - если редактировать элемент через универсальные списки, пусть даже в админке присвоив разным разделам разные свойства, в форме редактирования в универсальных списках lists.element.edit, все равно выводятся все свойства, пока не могу понять можно ли их вообще как-то отключить, там внутри есть код вывода компонента main interface form, там все на переменных и как его переделать, пока остается вопросом. Есть какая-то информация об этом?
06.12.2019 01:20:00
Так по памяти не скажу, к сожалению.