Множественные установки пользовательского портфолио

Привет! Я планирую использовать свой экземпляр Discourse для ролевой игры. Компонент темы «Портфолио пользователя» идеально подошёл бы для отображения материалов, которые пользователи присылают. В частности, я хочу видеть в профиле список персонажей пользователя, его лор-вкладов и сцен из РПГ.

Единственная проблема в том, что этот компонент темы поддерживает только одну категорию за раз. Я пробовал установить категорию в 0 для всех категорий и добавить несколько тегов, но из-за этого страница портфолио стала пустой. Поэтому я хотел бы отредактировать и установить несколько экземпляров этого компонента темы, чтобы создать отдельные страницы портфолио для разных типов контента.

Я попробовал скачать компонент темы, отредактировать файлы (например, заменив все вхождения portfolio на portfolio_2), а затем установил новую копию вместе с оригиналом, но ни один из них не работает.

Когда оба включены:

  1. На карточке пользователя отображается только одна кнопка портфолио (portfolio_2)
  2. В профиле пользователя отображается только одна кнопка портфолио (portfolio_2)
  3. Страница portfolio_2 на профиле пользователя пустая

Возможно ли заставить это работать, или мне лучше отказаться от этой идеи?

Эта функция появилась в Предпросмотре списков тем. Вы также можете попробовать её.

В TLP вы также можете указать включение портфолио по тегу.

что позволит вам выбирать темы из нескольких категорий.

Спасибо, это отличное место для поиска. Я думаю, что кнопка портфолио должна находиться в горизонтальном меню профиля (рядом с разделами «О себе», «Активность» и т. д.), но моя главная проблема заключается в следующем: если тегов несколько, я хочу иметь возможность фильтровать по тегу. То есть пользователи должны иметь возможность нажимать на кнопки, чтобы просматривать в портфолио только «персонажей» или «сцены» одновременно.

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

Это нормально, но логически она находится в наилучшем месте для общего случая: это фильтр всей активности, как и другие «срезы».

Но конечно, посмотрите на исходный код и делайте что хотите! :computer: :rocket:

Я на 100% согласен, что это хорошее место для общего использования. Мой конкретный случай использования связан с сообществом, ориентированным на ролевые игры, где пользователи будут регулярно искать эту информацию. Поэтому я хочу, чтобы кнопки отслеживания персонажей и сцен были доступны с минимальным количеством кликов и были хорошо заметны. Я вовсе не хочу критиковать ваше решение!

О, не волнуйтесь. Я не воспринял это так.

Да, я вижу практическую пользу в вашем случае. Пора переходить к индивидуальному решению!

Хорошо, я пошел по другому пути, не используя плагины для портфолио. Не уверен, стоит ли мне разместить это здесь или создать новую тему — если нужно, пожалуйста, дайте знать!

Может ли кто-нибудь взглянуть на это и сказать, что я делаю не так (и, надеюсь, почему и как это исправить)? Я потратил часы на часы, читая учебники, написывая код и внося правки, но я все еще новичок и дошел до точки, когда не знаю, что попробовать дальше.

Цель: отображать список тем из определенной категории на странице профиля пользователя.
В данном случае это форум для RPG, где пользователи создают персонажей для публикации историй. Я хочу, чтобы этот плагин показывал, каких персонажей создал пользователь, чтобы никому не пришлось далеко искать их. Все листы персонажей будут храниться в одном форуме. Поэтому я думаю, что мне просто нужно создать список тем, который получает темы от нужного пользователя и из нужного форума.

Я использовал следующие ссылки в качестве основы:

https://meta.discourse.org/t/add-a-featured-topic-list-to-your-discourse-homepage/132949

Вот моя попытка. Пока что заголовок списка тем (тема/ответы/активность) отображается в нужном месте, но сам список тем не заполняется.

<script type="text/discourse-plugin" version="0.8">
  const ajax = require('discourse/lib/ajax').ajax;
  const Topic = require('discourse/models/topic').default;
  const User = require('discourse/models/user').default;
  // Нужны ajax, Topic и User

  api.registerConnectorClass('above-user-summary-stats', 'character-list', {
    // above-user-summary-stats — это выход плагина, character-list — имя пользовательского компонента

    setupComponents(args, component) {

        const store = getOwner(this).lookup("service:store");

        return ajax(userPath(`/topics/created-by/${this.username_lower}.json`)).then(function (result) {
        // строки взяты из summary() в модели user.js; пытаюсь найти имя пользователя профиля, который мы просматриваем, чтобы получить доступ к JSON тем, созданных этим пользователем

            let characterList = [];
            // пустой массив для добавления тем

            result.topic_list.topics.forEach.category_id(4)(function(topic){
            // только темы из нужной категории

            // примерно здесь в уроке Криса были строки для связывания пользователей с темой. Я их пропустил, потому что мне не нужно отображать пользователей, кроме автора темы, вместе с темой. Это важно?
            //topic.posters.forEach(function(poster){
                //poster.user = $.grep(featuredUsers, function(e){ return e.id == poster.user_id; })[0];
              //});

                characterList.push(Topic.create(topic));
                // добавить темы в список

            });

            component.set('characterList', characterList);
            // Настроить компонент с темами из массива

        }); // конец ajax


    } // конец setupComponents

  });
</script>

<script type="text/x-handlebars" data-template-name="/connectors/above-user-summary-stats/character-list">

      <div class="custom-character-list-wrapper">
        {{topic-list topics=characterList showPosters=false}}
      </div>

</script>