Мне удалось продвинуться довольно далеко, изучив Custom Top Navigation Links.
<script type="text/discourse-plugin" version="0.8.18">
if (I18n.translations.en) {
I18n.translations.en.js.filters.needsreply = {title: "Требуется ответ", help: "Неответленные темы"};
}
// НАСТРОЙТЕ ЭТИ ЗНАЧЕНИЯ
// Установите поисковый запрос
let search_query = '?max_posts=1';
// Исключите определенные категории из отображения пункта меню «Требуется ответ»
let excludeList = ['pitches', 'weekly-recap', 'staff'];
api.addNavigationBarItem({
name: "needsreply",
displayName:"Требуется ответ",
title: "Требуется ответ",
href: "/latest" + search_query
});
// Добавить активный класс кнопке «Требуется ответ»
api.modifyClass('component:navigation-item', {
active: Ember.computed("contentFilterMode", "filterMode", function () {
let contentFilterMode = this.get('content').get('filterMode');
console.log(window.location.search.split('&')[0], search_query.split('&')[0])
if (window.location.search && window.location.search.split('&')[0] === search_query.split('&')[0]) {
return contentFilterMode === "needsreply";
} else {
return this._super(contentFilterMode, this.get('filterMode'));
}
}),
});
// Удалить фильтр max_posts и фильтр тегов
api.modifyClass('controller:discovery/topics', {
resetParams: function () {
this.setProperties({max_posts: null});
this.setProperties({tags: null});
this._super();
}
});
</script>
Единственная часть, в которой я пока не разобрался, — это как получить доступ к текущей категории в этом скрипте.
В исходном коде Discourse.NavItem позволяет получить доступ к текущей категории. Исходя из этого кода, мы динамически изменяем поведение ссылки (скрываем её или меняем href так, чтобы она отображала только сообщения в этой категории).
Может ли кто-нибудь предложить решение для внедрения текущей категории в скрипт выше, чтобы я мог настраивать поведение ссылки в зависимости от категории, которую просматривает пользователь?