Штатно распределения прав доступа по отдельным форумам в модуле grain.forum (Простой адаптивный форум) нет. На мой взгляд, это избыточный функционал для большинства сайтов, и это было бы излишним усложнением интерфейса. Если же вам нужно просто скрыть форумы, для этого существует галочка активности. Однако, если вам необходимо управлять правами доступа (видимостью) отдельных форумов, это можно сделать без вмешательства в программный код модуля или компонентов, используя события.
[spoiler]
Суть решения:
У каждого форума (и раздела) при создании заполняется поле привязки к сайту (SITE_ID). По умолчанию, туда записывается ID текущего сайта из константы SITE_ID, но само поле у форума называется так условно, туда можно записывать не только идентификатор сайта, но и любую другую строку, по которой можно осуществлять привязку форумов. Для этого можно использовать константу GRAIN_FORUM_SITE_ID, которая будет содержать нужный идентификатор, либо событие OnGlobalsGetForumFilter (добавлено в версии 2.5 модуля), в котором можно изменить исходный фильтр для форумов, который используется во всех компонентах. Т.к. в нашем примере будет использоваться массив для фильтрации по нескольким значениям поля SITE_ID, а константа содержать массив не может, то мы выбираем событие. После добавления форума, по событию \Grain\Forum\Forum::onAfterAdd мы создаем отдельную для форума группу пользователей, при включении в которую, они смогут видеть форум и сообщения в нем.
Функционал будет работать в отдельном разделе и будет включаться с помощью установки свойства страницы FORUM_ACCESS_EDITOR_GROUP_ID, значение которого должно будет содержать идентификатор группы пользователей - редакторов данного раздела. Редакторы, входящие в данную группу (а также администраторы), смогут видеть все форумы данного раздела (форумы, созданные не в данном разделе, в нем отображаться не будут).
На странице, где размещен комплексный компонент форума, установим свойство FORUM_ACCESS_EDITOR_GROUP_ID (саму группу редакторов сначала необходимо создать).
Подключим следующий код в файле /local/php_interface/init.php или /bitrix/php_interface/init.php, например, с помощью include (сам код необходимо разместить в отдельном файле).
См. также сниппеты "События ORM/хайлоадблоков" на сайте estrin.pw
[spoiler]
Суть решения:
У каждого форума (и раздела) при создании заполняется поле привязки к сайту (SITE_ID). По умолчанию, туда записывается ID текущего сайта из константы SITE_ID, но само поле у форума называется так условно, туда можно записывать не только идентификатор сайта, но и любую другую строку, по которой можно осуществлять привязку форумов. Для этого можно использовать константу GRAIN_FORUM_SITE_ID, которая будет содержать нужный идентификатор, либо событие OnGlobalsGetForumFilter (добавлено в версии 2.5 модуля), в котором можно изменить исходный фильтр для форумов, который используется во всех компонентах. Т.к. в нашем примере будет использоваться массив для фильтрации по нескольким значениям поля SITE_ID, а константа содержать массив не может, то мы выбираем событие. После добавления форума, по событию \Grain\Forum\Forum::onAfterAdd мы создаем отдельную для форума группу пользователей, при включении в которую, они смогут видеть форум и сообщения в нем.
Функционал будет работать в отдельном разделе и будет включаться с помощью установки свойства страницы FORUM_ACCESS_EDITOR_GROUP_ID, значение которого должно будет содержать идентификатор группы пользователей - редакторов данного раздела. Редакторы, входящие в данную группу (а также администраторы), смогут видеть все форумы данного раздела (форумы, созданные не в данном разделе, в нем отображаться не будут).
На странице, где размещен комплексный компонент форума, установим свойство FORUM_ACCESS_EDITOR_GROUP_ID (саму группу редакторов сначала необходимо создать).
|
Подключим следующий код в файле /local/php_interface/init.php или /bitrix/php_interface/init.php, например, с помощью include (сам код необходимо разместить в отдельном файле).
|
См. также сниппеты "События ORM/хайлоадблоков" на сайте estrin.pw
27.10.201719:3027.10.2017 19:30:05