Есть ли способ «скрыть» подкатегории из списков тем и вместо этого отображать родительские категории под заголовком темы?
Мой желаемый результат — корневая категория с n подкатегориями. Эти подкатегории не должны отображаться на фронтенде. Они используются только для ограничения доступа к сообщениям в зависимости от членства в группах.
В списке тем я хочу отображать родительскую категорию под заголовком темы вместо подкатегории.
Я думал об использовании тегов, но, к сожалению, я не могу ограничить доступ к темам таким образом.
Однако, если вы хотите, чтобы это происходило только для конкретной родительской категории, потребуется добавить дополнительную логику. Я не знаю, какой способ будет рекомендуемым для этого — регистрация хелпера Handlebars?
Другой подход может заключаться в том, чтобы всегда отображать ссылки и на категорию, и на родительскую категорию, а затем скрывать ненужные с помощью CSS.
Родительские категории отсутствуют в шаблоне по умолчанию, так что да, полагаю, вам придётся изменить шаблон. По крайней мере, я не знаю более лёгкого способа этого добиться.
В настройках сайта нет опции для изменения шаблонов, я отправлю вам код, чтобы вы могли его опробовать, через личные сообщения.
В целом, следует избегать полной замены шаблонов, так как они требуют поддержки: если обновление Discourse нарушает работу вашей темы, вам придется сравнивать версии (diff) и проверять, что изменилось.
Вместо этого лучше отступить на шаг назад и изменить данные, передаваемые в шаблон.
topic-list-item — это компонент Ember, поэтому вы можете использовать api.modifyClass, чтобы внести нужные изменения.
Например, вот фрагмент кода, который отображает значок родительской категории в темах подкатегорий под заголовком. Если тема находится в основной категории, этот код не окажет никакого эффекта.
Я отредактировал приведенный выше фрагмент, чтобы отразить это изменение. Всё, что вам нужно сделать, — добавить идентификаторы родительских категорий в массив targetCategoryIds. Идентификатор категории можно найти, посетив страницу категории и проверив URL.
https://meta.discourse.org/c/support/6
«6» в конце приведенного выше URL — это идентификатор категории «Поддержка» здесь, на Meta.
@Johani Где именно мне нужно вставить этот фрагмент кода?
Я пытался вставить его в </head> и в часть заголовка компонента моей темы, где я храню все свои CSS-стили. Но тогда список тем обрезается ровно в том месте, где должен быть показан первый затронутый топик из подкатегории.
Да, была проблема с тем, как была настроена категория, которую я упустил локально. Я отредактировал фрагмент кода выше, и теперь он должен работать.
Приведённый выше фрагмент позволяет указать категории, для которых это должно работать. Если вы хотите, чтобы это работало для всех категорий, используйте что-то вроде этого.