Привет! Я планирую использовать свой экземпляр Discourse для ролевой игры. Компонент темы «Портфолио пользователя» идеально подошёл бы для отображения материалов, которые пользователи присылают. В частности, я хочу видеть в профиле список персонажей пользователя, его лор-вкладов и сцен из РПГ.
Единственная проблема в том, что этот компонент темы поддерживает только одну категорию за раз. Я пробовал установить категорию в 0 для всех категорий и добавить несколько тегов, но из-за этого страница портфолио стала пустой. Поэтому я хотел бы отредактировать и установить несколько экземпляров этого компонента темы, чтобы создать отдельные страницы портфолио для разных типов контента.
Я попробовал скачать компонент темы, отредактировать файлы (например, заменив все вхождения portfolio на portfolio_2), а затем установил новую копию вместе с оригиналом, но ни один из них не работает.
Когда оба включены:
На карточке пользователя отображается только одна кнопка портфолио (portfolio_2)
В профиле пользователя отображается только одна кнопка портфолио (portfolio_2)
Страница portfolio_2 на профиле пользователя пустая
Возможно ли заставить это работать, или мне лучше отказаться от этой идеи?
Спасибо, это отличное место для поиска. Я думаю, что кнопка портфолио должна находиться в горизонтальном меню профиля (рядом с разделами «О себе», «Активность» и т. д.), но моя главная проблема заключается в следующем: если тегов несколько, я хочу иметь возможность фильтровать по тегу. То есть пользователи должны иметь возможность нажимать на кнопки, чтобы просматривать в портфолио только «персонажей» или «сцены» одновременно.
Возможно, в итоге я попробую собрать что-то подобное из этих двух компонентов темы, но сначала я ещё немного изучу вопрос. Если у кого-то есть дополнительные идеи, пожалуйста, поделитесь!
Я на 100% согласен, что это хорошее место для общего использования. Мой конкретный случай использования связан с сообществом, ориентированным на ролевые игры, где пользователи будут регулярно искать эту информацию. Поэтому я хочу, чтобы кнопки отслеживания персонажей и сцен были доступны с минимальным количеством кликов и были хорошо заметны. Я вовсе не хочу критиковать ваше решение!
Хорошо, я пошел по другому пути, не используя плагины для портфолио. Не уверен, стоит ли мне разместить это здесь или создать новую тему — если нужно, пожалуйста, дайте знать!
Может ли кто-нибудь взглянуть на это и сказать, что я делаю не так (и, надеюсь, почему и как это исправить)? Я потратил часы на часы, читая учебники, написывая код и внося правки, но я все еще новичок и дошел до точки, когда не знаю, что попробовать дальше.
Цель: отображать список тем из определенной категории на странице профиля пользователя.
В данном случае это форум для RPG, где пользователи создают персонажей для публикации историй. Я хочу, чтобы этот плагин показывал, каких персонажей создал пользователь, чтобы никому не пришлось далеко искать их. Все листы персонажей будут храниться в одном форуме. Поэтому я думаю, что мне просто нужно создать список тем, который получает темы от нужного пользователя и из нужного форума.
Вот моя попытка. Пока что заголовок списка тем (тема/ответы/активность) отображается в нужном месте, но сам список тем не заполняется.
<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>