[ОПЛАЧЕНО] Моя кнопка Темы в верхнем меню

Что вы хотите сделать?
Мне нужна кнопка в верхнем меню, похожая на posted, которая показывает все созданные вами сообщения, но не включает темы других пользователей, на которые вы отвечали (в отличие от posted).

Будет здорово, если бы я мог переименовать её в «Мои фото» в определённых категориях.

Это должно работать с плагином Topic Previews, чтобы результаты отображались с миниатюрами, что и делает приведённый ниже код.

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

Каков ваш бюджет в долларах США, который вы готовы предложить за эту задачу?
Я надеюсь, что код ниже можно использовать как отправную точку (это для кнопки, показывающей сообщения без ответов), и что это будет довольно простая задача, поэтому я предлагаю 100 долларов.

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

<!-- НЕОБХОДИМ ОТВЕТ -->
<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 = ['classifieds', 'workshops', 'staff', 'wiki','site-discussions', 'site-feedback', 'announcements', 'site-tips', 'site-support'];


    // Добавить активный класс кнопке "Требуется ответ"
    api.modifyClass('component:navigation-item', {
        active: Ember.computed("contentFilterMode", "filterMode", function () {
            let contentFilterMode = this.get('content').get('filterMode');
            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();
        }
    });

    Discourse.ExternalNavItem = Discourse.NavItem.extend({
        href: function () {
            return this.get('href');
        }.property("href")
    });

    Discourse.NavItem.reopenClass({
        buildList: function (category, args) {
            let list = this._super(category, args),
                tag = args.tagId,
                needsreplyHref;

            if (!category) { // категория отсутствует
                needsreplyHref = tag ? '/latest/' + search_query + '&tags=' + tag : '/latest/' + search_query; // если есть тег, построить href с тегом, иначе вернуться к представлению "Последние" и поисковому запросу
            }
            else if (excludeList.indexOf(category.slug) != -1) { // категория есть в списке исключений, ничего не делать
                return list; // вернуть список без создания пользовательского элемента навигации
            }
            else if (!category.parentCategory) { // не является подкатегорией
                needsreplyHref = tag ? '/c/' + category.slug + search_query + '&tags=' + tag : '/c/' + category.slug + search_query; // если есть тег, построить href с тегами и категорией, иначе вернуться к поисковому запросу и т.д.
            } else { // является подкатегорией
                needsreplyHref = tag ? '/c/' + category.parentCategory.slug + '/' + category.slug + search_query + '&tags=' + tag :
                    '/c/' + category.parentCategory.slug + '/' + category.slug + search_query; // если есть тег, построить href с тегами, подкатегорией и категорией, иначе вернуться к поисковому запросу и т.д.
            }
            list.push(Discourse.ExternalNavItem.create({href: needsreplyHref, name: 'needsreply'}));
            return list;
        }
    });
</script>
6 лайков

@merefield ты думаешь, это может как-то пересекаться с тем, чем мы занимаемся?

3 лайка

Да, очень вероятно. Дэвид, я добавлю вас в беседу.

4 лайка

Все еще ищу помощь по этому вопросу…

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.