ポートフォリオプラグインの使用をやめて、別の方向からアプローチすることにしました。これをここに投稿すべきか、新しいスレッドにすべきか分かりません。もしそうであれば、教えてください!
どなたか、これを見て私が何が間違っているのか(そしてできればなぜ、どうやって修正するのか)教えていただけますか?チュートリアルを読んだり、これを書いたり編集したりするのに何時間も費やしましたが、私は非常に初心者であり、次に何を試すべきか分からない状態になりました。
目標:特定のカテゴリのトピックのリストをユーザーの概要ページに表示すること。
このユースケースでは、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() in user.js modelから取得した行。表示しているユーザープロファイルのユーザー名を見つけて、彼が作成したトピックの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>