Модуль "Универсальные списки" - достаточно мощный и функциональный. Его можно с успехом использовать для предоставления пользователям сайта возможности добавлять и редактировать свои элементы инфолока в публичной части. Однако принцип работы с ним сильно отличается от того, к чему мы привыкли, работая, например, с компонентом "Добавление элементов инфоблока". Прежде всего это касается настройки прав доступа. В этой статье я расскажу как настроить модуль для выполнения задачи, аналогичной той, которая раньше решалась с помощью компонента "Добавление элементов инфоблока", т.е. чтобы пользователь мог добавлять элементы инфоблока, и редактировать элементы, но только добавленные им самим, с возможностью модерации редактором сайта.
[spoiler]
1. Создаем тип инфоблока
Т.к. комплексный компонент "Универсальные списки" (bitrix:lists) не работает с отдельными инфоблоками, cоздаем тип инфоблока "Компании".
2. Настраиваем тип инфоблока для работы с универсальными списками
Для этого заходим в настройки модуля "Универсальные списки" (Настройки > Настройки продукта > Настройки модулей > Универсальные списки) и на вкладке "Права доступа" разрешаем группе "Администраторы" управлять списками в нашем созданном типе инфоблока "Компании".
Этот шаг обязателен, т.к. без него при размещении компонента наш тип инфоблока не появится в выпадающем списке в параметрах компонента.
3. Размещаем компонент
Создаем на сайте раздел, и размещаем в нем компонент "Универсальные списки".
В параметрах компонента выбираем наш тип инфоблока и включаем поддержку ЧПУ (в режиме не-ЧПУ лично мне не удалось заставить компонент работать).
Добавляем инфоблок (список)
После размещения компонента, мы увидим на странице панель с одной кнопкой "Добавить". С помощью нее мы и сможем добавить инфоблок.
Нажимаем кнопку "Добавить". Откроется форма добавления инфоблока.
На вкладке "Доступ" устанавливаем для группы "Зарегистрированные пользователи" право "Добавление", а для категории пользователей "Автор" - право "Изменение". Последнее даст возможность пользователю редактировать свои элементы. Если же установить для группы "Зарегистрированные пользователи" право "Изменение", то пользователь сможет редактировать все элементы инфоблока, а не только свои. Вместо группы "Зарегистрированные пользователи", можно также использовать категорию "Все авторизованные пользователи".
Примечание: инфоблок также можно добавить через административную часть битрикс, если включить расширенные права доступа.
После выполнения данных действий, пользователи группы "Зарегистрированные пользователи", увидят следующее на главной странице раздела:
При выборе инфоблока (списка) "Компании", пользователю будет доступен список его элементов.
При нажатии кнопки "Добавить компанию", откроется форма редактирования:
Добавление полей
Интерфейс добавления полей один для собственно полей и свойств инфоблока. При этом можно задать собственное название для любого поля, как и в компоненте "Добавление элементов инфоблока".
Отправка уведомлений и утверждение
Отправка уведомлений администратору сайта и утверждение документов при работе с универсальными списками как правило осуществляется с помощью бизнес-процессов. Т.к. использовать стандартные бизнес-процессы в данном случае не представляется удобным, то придется создать свой бизнес-процесс. Можно также использовать вместо бизнес-процессов модуль "Документооборот", но настраивать инфоблок на работу с документооборотом придется через административную часть битрикс, т.к. в компоненте "Универсальные списки" такая возможность отсутствует).
Для использования бизнес-процессов со списком (инфоблоком), в настройках списка должна быть установлена галочка "Включить поддержку бизнес-процессов". Тогда для администратора в панели инструментов списка появится кнопка "Бизнес-процессы".
После нажатия на кнопку мы увидим список шаблонов бизнес-процессов.
Нажимаем кнопку "Создать последовательный бизнес-процесс". Откроется страница редактирования шаблона бизнес-процесса.
Это немного модифицированный стандартный бизнес-процесс "Утверждение по первому голосу". Т.к. стандартный механизм публикации использовать не удалось - при снятии с публикации, элементы не отображаются в списке (даже под админом), я использовал вместо блоков "Публикация"/"Снятие документа с публикации" блоки "Изменение документа" с простой активацией/деактивацией. Кроме того, вместо почтовых сообщений, я использовал сообщения соцсети.
В параметрах шаблона устанавливаем галочку "Автоматически запускать при добавлении".
Если же установить галочку "Автоматически запускать при изменении", то процесс будет запускаться пользователем при изменении элемента. Либо можно создать для этого отдельные бизнес-процесс, который будет функционировать по другому сценарию, например, не деактивировать элемент, а просто отправлять уведомление редакторам сайта.
Примечание: имейте в виду, что если для группы пользователей не установлен доступ к списку (инфоблоку) хотя бы "Чтение", то эта группа не появится в диалоге выбора групп пользователей в дизайнере бизнес процессов, и вы не сможете, например, запрограммировать отправку уведомления этой группе.
Правка шаблона компонента
Правка шаблона компонента в нашем случае будет сводится в основном к упрощению и отключению лишнего функционала.
Например, чтобы изменить внешний вид списка по умолчанию (по умолчанию отображаются все колонки полей, цветовая схема - синяя), добавим в шаблон компонента 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. Настраиваем тип инфоблока для работы с универсальными списками
Для этого заходим в настройки модуля "Универсальные списки" (Настройки > Настройки продукта > Настройки модулей > Универсальные списки) и на вкладке "Права доступа" разрешаем группе "Администраторы" управлять списками в нашем созданном типе инфоблока "Компании".
Этот шаг обязателен, т.к. без него при размещении компонента наш тип инфоблока не появится в выпадающем списке в параметрах компонента.
3. Размещаем компонент
Создаем на сайте раздел, и размещаем в нем компонент "Универсальные списки".
В параметрах компонента выбираем наш тип инфоблока и включаем поддержку ЧПУ (в режиме не-ЧПУ лично мне не удалось заставить компонент работать).
Добавляем инфоблок (список)
После размещения компонента, мы увидим на странице панель с одной кнопкой "Добавить". С помощью нее мы и сможем добавить инфоблок.
Нажимаем кнопку "Добавить". Откроется форма добавления инфоблока.
На вкладке "Доступ" устанавливаем для группы "Зарегистрированные пользователи" право "Добавление", а для категории пользователей "Автор" - право "Изменение". Последнее даст возможность пользователю редактировать свои элементы. Если же установить для группы "Зарегистрированные пользователи" право "Изменение", то пользователь сможет редактировать все элементы инфоблока, а не только свои. Вместо группы "Зарегистрированные пользователи", можно также использовать категорию "Все авторизованные пользователи".
Примечание: инфоблок также можно добавить через административную часть битрикс, если включить расширенные права доступа.
После выполнения данных действий, пользователи группы "Зарегистрированные пользователи", увидят следующее на главной странице раздела:
При выборе инфоблока (списка) "Компании", пользователю будет доступен список его элементов.
При нажатии кнопки "Добавить компанию", откроется форма редактирования:
Добавление полей
Интерфейс добавления полей один для собственно полей и свойств инфоблока. При этом можно задать собственное название для любого поля, как и в компоненте "Добавление элементов инфоблока".
Отправка уведомлений и утверждение
Отправка уведомлений администратору сайта и утверждение документов при работе с универсальными списками как правило осуществляется с помощью бизнес-процессов. Т.к. использовать стандартные бизнес-процессы в данном случае не представляется удобным, то придется создать свой бизнес-процесс. Можно также использовать вместо бизнес-процессов модуль "Документооборот", но настраивать инфоблок на работу с документооборотом придется через административную часть битрикс, т.к. в компоненте "Универсальные списки" такая возможность отсутствует).
Для использования бизнес-процессов со списком (инфоблоком), в настройках списка должна быть установлена галочка "Включить поддержку бизнес-процессов". Тогда для администратора в панели инструментов списка появится кнопка "Бизнес-процессы".
После нажатия на кнопку мы увидим список шаблонов бизнес-процессов.
Нажимаем кнопку "Создать последовательный бизнес-процесс". Откроется страница редактирования шаблона бизнес-процесса.
Это немного модифицированный стандартный бизнес-процесс "Утверждение по первому голосу". Т.к. стандартный механизм публикации использовать не удалось - при снятии с публикации, элементы не отображаются в списке (даже под админом), я использовал вместо блоков "Публикация"/"Снятие документа с публикации" блоки "Изменение документа" с простой активацией/деактивацией. Кроме того, вместо почтовых сообщений, я использовал сообщения соцсети.
В параметрах шаблона устанавливаем галочку "Автоматически запускать при добавлении".
Если же установить галочку "Автоматически запускать при изменении", то процесс будет запускаться пользователем при изменении элемента. Либо можно создать для этого отдельные бизнес-процесс, который будет функционировать по другому сценарию, например, не деактивировать элемент, а просто отправлять уведомление редакторам сайта.
Примечание: имейте в виду, что если для группы пользователей не установлен доступ к списку (инфоблоку) хотя бы "Чтение", то эта группа не появится в диалоге выбора групп пользователей в дизайнере бизнес процессов, и вы не сможете, например, запрограммировать отправку уведомления этой группе.
Правка шаблона компонента
Правка шаблона компонента в нашем случае будет сводится в основном к упрощению и отключению лишнего функционала.
Например, чтобы изменить внешний вид списка по умолчанию (по умолчанию отображаются все колонки полей, цветовая схема - синяя), добавим в шаблон компонента 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, там все на переменных и как его переделать, пока остается вопросом. Есть какая-то информация об этом?