Модуль "Универсальные списки" - достаточно мощный и функциональный. Его можно с успехом использовать для предоставления пользователям сайта возможности добавлять и редактировать свои элементы инфолока в публичной части. Однако принцип работы с ним сильно отличается от того, к чему мы привыкли, работая, например, с компонентом "Добавление элементов инфоблока". Прежде всего это касается настройки прав доступа. В этой статье я расскажу как настроить модуль для выполнения задачи, аналогичной той, которая раньше решалась с помощью компонента "Добавление элементов инфоблока", т.е. чтобы пользователь мог добавлять элементы инфоблока, и редактировать элементы, но только добавленные им самим, с возможностью модерации редактором сайта.
[spoiler]
1. Создаем тип инфоблока
Т.к. комплексный компонент "Универсальные списки" (bitrix:lists) не работает с отдельными инфоблоками, cоздаем тип инфоблока "Компании".
2. Настраиваем тип инфоблока для работы с универсальными списками
Для этого заходим в настройки модуля "Универсальные списки" (Настройки > Настройки продукта > Настройки модулей > Универсальные списки) и на вкладке "Права доступа" разрешаем группе "Администраторы" управлять списками в нашем созданном типе инфоблока "Компании".
![Настройки модуля Универсальные списки](/upload/blog/cbd/universal-lists-module-settings.png)
Этот шаг обязателен, т.к. без него при размещении компонента наш тип инфоблока не появится в выпадающем списке в параметрах компонента.
3. Размещаем компонент
Создаем на сайте раздел, и размещаем в нем компонент "Универсальные списки".
![Компонент Универсальные списки - визуальный редактор](/upload/blog/3f1/universal-lists-visual-editor-mark.png)
В параметрах компонента выбираем наш тип инфоблока и включаем поддержку ЧПУ (в режиме не-ЧПУ лично мне не удалось заставить компонент работать).
![Компонент Универсальные списки - параметры](/upload/blog/1ce/universal-lists-component-parameters.png)
Добавляем инфоблок (список)
После размещения компонента, мы увидим на странице панель с одной кнопкой "Добавить". С помощью нее мы и сможем добавить инфоблок.
![Компонент Универсальные списки - Главная страница без инфоблоков](/upload/blog/dd4/universal-lists-component-no-iblocks.png)
Нажимаем кнопку "Добавить". Откроется форма добавления инфоблока.
![Компонент Универсальные списки - добавление инфоблока](/upload/blog/81f/universal-lists-add-iblock.png)
На вкладке "Доступ" устанавливаем для группы "Зарегистрированные пользователи" право "Добавление", а для категории пользователей "Автор" - право "Изменение". Последнее даст возможность пользователю редактировать свои элементы. Если же установить для группы "Зарегистрированные пользователи" право "Изменение", то пользователь сможет редактировать все элементы инфоблока, а не только свои. Вместо группы "Зарегистрированные пользователи", можно также использовать категорию "Все авторизованные пользователи".
![Компонент Универсальные списки - добавление инфоблока - права доступа](/upload/blog/953/universal-lists-add-iblock-rights.png)
Примечание: инфоблок также можно добавить через административную часть битрикс, если включить расширенные права доступа.
После выполнения данных действий, пользователи группы "Зарегистрированные пользователи", увидят следующее на главной странице раздела:
![Компонент Универсальные списки - главная страница для пользователя](/upload/blog/ab8/universal-lists-component-index-user.png)
При выборе инфоблока (списка) "Компании", пользователю будет доступен список его элементов.
![Компонент Универсальные списки - список элементов для пользователя](/upload/blog/2c1/universal-lists-component-user-list.png)
При нажатии кнопки "Добавить компанию", откроется форма редактирования:
![Компонент Универсальные списки - редактирование элемента для пользователя](/upload/blog/743/universal-lists-component-user-add-element.png)
Добавление полей
Интерфейс добавления полей один для собственно полей и свойств инфоблока. При этом можно задать собственное название для любого поля, как и в компоненте "Добавление элементов инфоблока".
![Компонент Универсальные списки - список полей](/upload/blog/665/universal-lists-list-settings-fields.png)
Отправка уведомлений и утверждение
Отправка уведомлений администратору сайта и утверждение документов при работе с универсальными списками как правило осуществляется с помощью бизнес-процессов. Т.к. использовать стандартные бизнес-процессы в данном случае не представляется удобным, то придется создать свой бизнес-процесс. Можно также использовать вместо бизнес-процессов модуль "Документооборот", но настраивать инфоблок на работу с документооборотом придется через административную часть битрикс, т.к. в компоненте "Универсальные списки" такая возможность отсутствует).
Для использования бизнес-процессов со списком (инфоблоком), в настройках списка должна быть установлена галочка "Включить поддержку бизнес-процессов". Тогда для администратора в панели инструментов списка появится кнопка "Бизнес-процессы".
![Компонент Универсальные списки - кнопка Бизнес-процессы](/upload/blog/8db/universal-lists-bizproc-button.png)
После нажатия на кнопку мы увидим список шаблонов бизнес-процессов.
![Компонент Универсальные списки - шаблоны бизнес-процессов](/upload/blog/1ef/universal-lists-bizproc-list.png)
Нажимаем кнопку "Создать последовательный бизнес-процесс". Откроется страница редактирования шаблона бизнес-процесса.
Это немного модифицированный стандартный бизнес-процесс "Утверждение по первому голосу". Т.к. стандартный механизм публикации использовать не удалось - при снятии с публикации, элементы не отображаются в списке (даже под админом), я использовал вместо блоков "Публикация"/"Снятие документа с публикации" блоки "Изменение документа" с простой активацией/деактивацией. Кроме того, вместо почтовых сообщений, я использовал сообщения соцсети.
В параметрах шаблона устанавливаем галочку "Автоматически запускать при добавлении".
![Компонент Универсальные списки - редактирование шаблона бизнес-процесса](/upload/blog/949/universal-lists-bizproc-template-edit.png)
Если же установить галочку "Автоматически запускать при изменении", то процесс будет запускаться пользователем при изменении элемента. Либо можно создать для этого отдельные бизнес-процесс, который будет функционировать по другому сценарию, например, не деактивировать элемент, а просто отправлять уведомление редакторам сайта.
Примечание: имейте в виду, что если для группы пользователей не установлен доступ к списку (инфоблоку) хотя бы "Чтение", то эта группа не появится в диалоге выбора групп пользователей в дизайнере бизнес процессов, и вы не сможете, например, запрограммировать отправку уведомления этой группе.
Правка шаблона компонента
Правка шаблона компонента в нашем случае будет сводится в основном к упрощению и отключению лишнего функционала.
Например, чтобы изменить внешний вид списка по умолчанию (по умолчанию отображаются все колонки полей, цветовая схема - синяя), добавим в шаблон компонента lists.list в файл result_modifier.php, следующий код:
Данный код установит вывод только колонок "Название", "Бизнес-процессы", серую цветовую схему и пр. Если же пользователь уже выбирал колонки или что-то другое, его выбор не будет изменен.
В том же файле result_modifier.php убирем ссылку на бизнес-процесс в списке, оставляем только название. Само название колонки "Бизнес-процессы" меняем на "Статус". Таким образом в этой колонке будет отображаться статус бизнес-процесса, например, мы можем в самом бизнес-процессе устанавливать статусы "На модерации", "Опубликован", "Отклонен".
Чтобы убрать возможность запуска бизнес-процесса из контекстного меню, в том же файле вставляем код:
Теперь правим шаблон компонента lists.element.edit - полностью убираем вкладки "Бизнес-процессы" и "Разделы". Для первого достаточно найти в файле template.php конструкцию CModule::IncludeModule( "bizproc" ) и подставить рядом с ней " && false", для второго - найти и закомментировать строку:
Итог
В целом использование модуля "Универсальные списки" для решения данной простой задачи не является оправданным и даже удобным (пришлось выполнять слишком много действий, не обошлось без правки шаблона компонента). Компонент "Добавление элементов инфоблока" гораздо лучше подходит для этого, если бы не одно но - этот компонент больше не поддерживается компанией 1С-Битрикс, и самые простые вещи приходится дорабатывать почти с нуля. Поэтому во многих случаях описанный метод может иметь преимущества.
Примечание: статья написана на основе опыта работы с модулем "Универсальные списки" версии 11.5.1
[spoiler]
1. Создаем тип инфоблока
Т.к. комплексный компонент "Универсальные списки" (bitrix:lists) не работает с отдельными инфоблоками, cоздаем тип инфоблока "Компании".
2. Настраиваем тип инфоблока для работы с универсальными списками
Для этого заходим в настройки модуля "Универсальные списки" (Настройки > Настройки продукта > Настройки модулей > Универсальные списки) и на вкладке "Права доступа" разрешаем группе "Администраторы" управлять списками в нашем созданном типе инфоблока "Компании".
![Настройки модуля Универсальные списки](/upload/blog/cbd/universal-lists-module-settings.png)
Этот шаг обязателен, т.к. без него при размещении компонента наш тип инфоблока не появится в выпадающем списке в параметрах компонента.
3. Размещаем компонент
Создаем на сайте раздел, и размещаем в нем компонент "Универсальные списки".
![Компонент Универсальные списки - визуальный редактор](/upload/blog/3f1/universal-lists-visual-editor-mark.png)
В параметрах компонента выбираем наш тип инфоблока и включаем поддержку ЧПУ (в режиме не-ЧПУ лично мне не удалось заставить компонент работать).
![Компонент Универсальные списки - параметры](/upload/blog/1ce/universal-lists-component-parameters.png)
Добавляем инфоблок (список)
После размещения компонента, мы увидим на странице панель с одной кнопкой "Добавить". С помощью нее мы и сможем добавить инфоблок.
![Компонент Универсальные списки - Главная страница без инфоблоков](/upload/blog/dd4/universal-lists-component-no-iblocks.png)
Нажимаем кнопку "Добавить". Откроется форма добавления инфоблока.
![Компонент Универсальные списки - добавление инфоблока](/upload/blog/81f/universal-lists-add-iblock.png)
На вкладке "Доступ" устанавливаем для группы "Зарегистрированные пользователи" право "Добавление", а для категории пользователей "Автор" - право "Изменение". Последнее даст возможность пользователю редактировать свои элементы. Если же установить для группы "Зарегистрированные пользователи" право "Изменение", то пользователь сможет редактировать все элементы инфоблока, а не только свои. Вместо группы "Зарегистрированные пользователи", можно также использовать категорию "Все авторизованные пользователи".
![Компонент Универсальные списки - добавление инфоблока - права доступа](/upload/blog/953/universal-lists-add-iblock-rights.png)
Примечание: инфоблок также можно добавить через административную часть битрикс, если включить расширенные права доступа.
После выполнения данных действий, пользователи группы "Зарегистрированные пользователи", увидят следующее на главной странице раздела:
![Компонент Универсальные списки - главная страница для пользователя](/upload/blog/ab8/universal-lists-component-index-user.png)
При выборе инфоблока (списка) "Компании", пользователю будет доступен список его элементов.
![Компонент Универсальные списки - список элементов для пользователя](/upload/blog/2c1/universal-lists-component-user-list.png)
При нажатии кнопки "Добавить компанию", откроется форма редактирования:
![Компонент Универсальные списки - редактирование элемента для пользователя](/upload/blog/743/universal-lists-component-user-add-element.png)
Добавление полей
Интерфейс добавления полей один для собственно полей и свойств инфоблока. При этом можно задать собственное название для любого поля, как и в компоненте "Добавление элементов инфоблока".
![Компонент Универсальные списки - список полей](/upload/blog/665/universal-lists-list-settings-fields.png)
Отправка уведомлений и утверждение
Отправка уведомлений администратору сайта и утверждение документов при работе с универсальными списками как правило осуществляется с помощью бизнес-процессов. Т.к. использовать стандартные бизнес-процессы в данном случае не представляется удобным, то придется создать свой бизнес-процесс. Можно также использовать вместо бизнес-процессов модуль "Документооборот", но настраивать инфоблок на работу с документооборотом придется через административную часть битрикс, т.к. в компоненте "Универсальные списки" такая возможность отсутствует).
Для использования бизнес-процессов со списком (инфоблоком), в настройках списка должна быть установлена галочка "Включить поддержку бизнес-процессов". Тогда для администратора в панели инструментов списка появится кнопка "Бизнес-процессы".
![Компонент Универсальные списки - кнопка Бизнес-процессы](/upload/blog/8db/universal-lists-bizproc-button.png)
После нажатия на кнопку мы увидим список шаблонов бизнес-процессов.
![Компонент Универсальные списки - шаблоны бизнес-процессов](/upload/blog/1ef/universal-lists-bizproc-list.png)
Нажимаем кнопку "Создать последовательный бизнес-процесс". Откроется страница редактирования шаблона бизнес-процесса.
Это немного модифицированный стандартный бизнес-процесс "Утверждение по первому голосу". Т.к. стандартный механизм публикации использовать не удалось - при снятии с публикации, элементы не отображаются в списке (даже под админом), я использовал вместо блоков "Публикация"/"Снятие документа с публикации" блоки "Изменение документа" с простой активацией/деактивацией. Кроме того, вместо почтовых сообщений, я использовал сообщения соцсети.
В параметрах шаблона устанавливаем галочку "Автоматически запускать при добавлении".
![Компонент Универсальные списки - редактирование шаблона бизнес-процесса](/upload/blog/949/universal-lists-bizproc-template-edit.png)
Если же установить галочку "Автоматически запускать при изменении", то процесс будет запускаться пользователем при изменении элемента. Либо можно создать для этого отдельные бизнес-процесс, который будет функционировать по другому сценарию, например, не деактивировать элемент, а просто отправлять уведомление редакторам сайта.
Примечание: имейте в виду, что если для группы пользователей не установлен доступ к списку (инфоблоку) хотя бы "Чтение", то эта группа не появится в диалоге выбора групп пользователей в дизайнере бизнес процессов, и вы не сможете, например, запрограммировать отправку уведомления этой группе.
Правка шаблона компонента
Правка шаблона компонента в нашем случае будет сводится в основном к упрощению и отключению лишнего функционала.
Например, чтобы изменить внешний вид списка по умолчанию (по умолчанию отображаются все колонки полей, цветовая схема - синяя), добавим в шаблон компонента lists.list в файл result_modifier.php, следующий код:
|
В том же файле result_modifier.php убирем ссылку на бизнес-процесс в списке, оставляем только название. Само название колонки "Бизнес-процессы" меняем на "Статус". Таким образом в этой колонке будет отображаться статус бизнес-процесса, например, мы можем в самом бизнес-процессе устанавливать статусы "На модерации", "Опубликован", "Отклонен".
Чтобы убрать возможность запуска бизнес-процесса из контекстного меню, в том же файле вставляем код:
|
Теперь правим шаблон компонента lists.element.edit - полностью убираем вкладки "Бизнес-процессы" и "Разделы". Для первого достаточно найти в файле template.php конструкцию CModule::IncludeModule( "bizproc" ) и подставить рядом с ней " && false", для второго - найти и закомментировать строку:
|
Итог
В целом использование модуля "Универсальные списки" для решения данной простой задачи не является оправданным и даже удобным (пришлось выполнять слишком много действий, не обошлось без правки шаблона компонента). Компонент "Добавление элементов инфоблока" гораздо лучше подходит для этого, если бы не одно но - этот компонент больше не поддерживается компанией 1С-Битрикс, и самые простые вещи приходится дорабатывать почти с нуля. Поэтому во многих случаях описанный метод может иметь преимущества.
Примечание: статья написана на основе опыта работы с модулем "Универсальные списки" версии 11.5.1
01.06.201218:3501.06.2012 18:35:49
Сергей, в принципе, не плохой способ, открывающий много интересного с точки зрения активности на сайте.
Есть ряд вопросов - если редактировать элемент через универсальные списки, пусть даже в админке присвоив разным разделам разные свойства, в форме редактирования в универсальных списках lists.element.edit, все равно выводятся все свойства, пока не могу понять можно ли их вообще как-то отключить, там внутри есть код вывода компонента main interface form, там все на переменных и как его переделать, пока остается вопросом. Есть какая-то информация об этом?