Продолжение обсуждения из Как разделить форум на две основные части (общее/группы) и отображать только подкатегории, в которых я могу создать новый пост?:
Всем привет,
Вот компонент темы, который реализует идею, к которой я давно стремился, но я хотел бы получить ваши комментарии по коду, чтобы улучшить его, или ваши предложения.
Я не считаю код достаточно хорошим, поэтому не хочу рекомендовать его, пока он не будет проверен кем-то другим.
Что он делает
Скрывает с помощью CSS все темы, для которых у пользователя есть ограничение прав доступа к категории, на выбранных страницах.
Репозиторий
Ссылка на репозиторий
framagit.org/oca/discourse-theme-shroud-subcategories
Мотивация
У меня есть сообщество с множеством групп, и я хочу, чтобы люди мирно игнорировали то, что относится к другим группам, кроме их собственных. Я не хочу ограничивать доступ к контенту, я просто не хочу, чтобы он отображался на главной странице. Они должны иметь возможность получить к нему доступ, перейдя туда и выбрав эту категорию конкретно (например, чтобы узнать, о чём здесь обсуждают). Очевидно, подходящим инструментом была бы функция наблюдения/игнорирования, но поскольку для её настройки в интерфейсе требуется более двух кликов, никто в сообществе ею не пользуется. Некоторые улучшения на странице категории могли бы решить проблему, но они находятся за пределами моих навыков.
Поэтому я использую то, что достаточно просто для них: страницу группы. На одной и той же странице отображаются все группы, к которым они имеют доступ (свободно или нет), и их описание. Это идеально: им нужно просто кликнуть и выбрать их. Страница группы слишком скрыта для них (внутри «гамбургер-меню»), поэтому я мог бы разместить большую кнопку-ссылку на главной странице.
Теперь мне нужно связать членство в группе и отображение постов категории.
Как это работает
Использованный мной трюк заключался в настройке прав доступа к категории следующим образом:
- все: чтение, запись
- эта группа: создание сообщения, чтение, запись
Затем для каждой темы в списке проверяется, есть ли ограничение категории, и если да, то к элементу темы добавляется класс not-in-group.
Затем CSS добавляет display:none соответствующим образом.
Интерфейс
Администратор может выбрать страницы, на которых это поведение будет работать. Это не должно делаться на странице категории, потому что по определению именно там мы хотим получить доступ к контенту. На моём сайте все эти группы являются подкатегориями, скрытыми со страницы latest; мы получаем к ним доступ через страницу /c/groups/, поэтому используется именно эта страница.
Улучшения
- Возможность выбора родительских категорий для отфильтрованных категорий (так что любая категория, которая не является дочерней по отношению к этой, будет защищена от пропуска)
- Добавление тегов, чтобы если у темы есть этот тег, то она не будет удалена.
