Скрыть категории в зависимости от принадлежности к группе пользователей

Продолжение обсуждения из Как разделить форум на две основные части (общее/группы) и отображать только подкатегории, в которых я могу создать новый пост?:

Всем привет,

Вот компонент темы, который реализует идею, к которой я давно стремился, но я хотел бы получить ваши комментарии по коду, чтобы улучшить его, или ваши предложения.

Я не считаю код достаточно хорошим, поэтому не хочу рекомендовать его, пока он не будет проверен кем-то другим.

Что он делает

Скрывает с помощью CSS все темы, для которых у пользователя есть ограничение прав доступа к категории, на выбранных страницах.

Репозиторий

Ссылка на репозиторий
framagit.org/oca/discourse-theme-shroud-subcategories

Мотивация

У меня есть сообщество с множеством групп, и я хочу, чтобы люди мирно игнорировали то, что относится к другим группам, кроме их собственных. Я не хочу ограничивать доступ к контенту, я просто не хочу, чтобы он отображался на главной странице. Они должны иметь возможность получить к нему доступ, перейдя туда и выбрав эту категорию конкретно (например, чтобы узнать, о чём здесь обсуждают). Очевидно, подходящим инструментом была бы функция наблюдения/игнорирования, но поскольку для её настройки в интерфейсе требуется более двух кликов, никто в сообществе ею не пользуется. Некоторые улучшения на странице категории могли бы решить проблему, но они находятся за пределами моих навыков.

Поэтому я использую то, что достаточно просто для них: страницу группы. На одной и той же странице отображаются все группы, к которым они имеют доступ (свободно или нет), и их описание. Это идеально: им нужно просто кликнуть и выбрать их. Страница группы слишком скрыта для них (внутри «гамбургер-меню»), поэтому я мог бы разместить большую кнопку-ссылку на главной странице.

Теперь мне нужно связать членство в группе и отображение постов категории.

Как это работает

Использованный мной трюк заключался в настройке прав доступа к категории следующим образом:

  • все: чтение, запись
  • эта группа: создание сообщения, чтение, запись

Затем для каждой темы в списке проверяется, есть ли ограничение категории, и если да, то к элементу темы добавляется класс not-in-group.

Затем CSS добавляет display:none соответствующим образом.

Интерфейс

Администратор может выбрать страницы, на которых это поведение будет работать. Это не должно делаться на странице категории, потому что по определению именно там мы хотим получить доступ к контенту. На моём сайте все эти группы являются подкатегориями, скрытыми со страницы latest; мы получаем к ним доступ через страницу /c/groups/, поэтому используется именно эта страница.

Улучшения

  • Возможность выбора родительских категорий для отфильтрованных категорий (так что любая категория, которая не является дочерней по отношению к этой, будет защищена от пропуска)
  • Добавление тегов, чтобы если у темы есть этот тег, то она не будет удалена.
10 лайков

Для меня это не имеет смысла. Почему бы не использовать разрешения категорий, чтобы ограничить то, что видят группы?

4 лайка

Потому что я хочу, чтобы они могли видеть эти категории, но только если приложат усилия, чтобы добраться до них. Например, чтобы узнать, что обсуждается в этом конкретном проекте, до регистрации.

Но на главной странице я не хочу, чтобы их засыпали темами, которые им не интересны. Лучший способ — использовать функцию «подписаться/игнорировать», но это слишком сложно для них. Другой вариант — зарегистрироваться в группе, перейти на страницу категории, чтобы прочитать, что обсуждается, а затем выйти из группы. Для большинства это слишком много кликов, к тому же они не рискнут это сделать.

Последний вариант — настройка категории «исключить из последних», но она влияет на всех пользователей, даже на тех, кто подписан на эту категорию. С этим методом я получаю аналог «исключить из последних», но только для определённых пользователей и для всех нужных мне страниц.

Надеюсь, стало понятнее.

2 лайка

Эти улучшения реализованы.

4 лайка

Мне это очень интересно. Не могли бы вы показать пример или подсказать, где можно найти форум, где установлен этот компонент?

1 лайк

Кроме того, приводит ли фильтрация с помощью этого компонента к тому, что посты не отправляются в сводном письме? Потому что это было бы ПРЕВОСХОДНО.

1 лайк

Нет, не удаляет.
Это не лишает доступа к посту, а просто скрывает его с помощью CSS.
Темы всё ещё отправляются пользователю, но с инструкцией не отображать их.
Цель использования — не лишать доступа, а просто убрать пост с главной страницы (или любой другой выбранной страницы).

Извините, у меня нет установленной версии на форуме без авторизации, но вы можете задать вопросы здесь или в личных сообщениях.

2 лайка

Спасибо!

Что означает эта часть?

1 лайк

Если посмотреть исходный код страницы, то информация о теме отправляется. Однако компонент темы приказывает её игнорировать.

1 лайк

Это работает «только» с отображением элементов при просмотре. Это не функция отключения звука или игнорирования. Однако я считаю это решение очень интересным для некоторых случаев использования. Поздравляю @oca с этой работой!

2 лайка

Я внимательно это изучу. Ещё раз спасибо!

1 лайк

Привет! Я установил этот компонент темы, но теперь у меня возникли проблемы с его настройкой. Когда я пытаюсь выбрать теги и отфильтрованные категории, мои не отображаются. Например, у нас точно есть тег «faq», но мне не везёт — я не могу его выбрать. Я также пробовал просто вводить тег вручную, но это тоже не работает.

2 лайка

Включены ли у вас теги в панели управления? Они находятся в разделе «Настройки/Теги». Первое поле вверху списка тегов предназначено для их включения. После этого созданные вами теги должны начать работать.

1 лайк

Да, теги включены.

1 лайк

Параметр настройки не знает, какие теги существуют. Вам нужно указать имя тега здесь, нажать create: 'faq', и тогда имя тега будет выбрано. Вы можете выбрать столько тегов, сколько необходимо; достаточно любого из них, чтобы снять скрытие публикации.

Будьте внимательны: если ваша учётная запись имеет права администратора, то она обладает полным доступом ко всем категориям. Однако скрытие категории определяется тем, может ли учётная запись фактически создать новую публикацию. Ваша может, поэтому ваша учётная запись сможет видеть все публикации везде. Чтобы протестировать компонент, я рекомендую создать тестовую учётную запись и посмотреть то же самое, что видит обычный пользователь.

2 лайка

Спасибо. Я думаю, что мне удалось заставить это работать, и я очень рад узнать, как всё пойдёт. Моя признательность за вашу работу.

2 лайка

Можно ли сделать исключение для людей, которые отслеживают категорию?

1 лайк