자, 그래서 포트폴리오 플러그인을 사용하는 대신 다른 방향으로 시도해 봤습니다. 이 내용을 여기에 게시하는 것이 맞는지, 아니면 새 스레드를 여는 것이 좋을지 모르겠어요. 새 스레드가 더 좋다면 알려주세요!
누군가 이 코드를 살펴봐서 제가 어디를 잘못하고 있는지(그리고 hopefully 왜 그런지 / 어떻게 고칠 수 있는지) 알려줄 수 있을까요? 몇 시간 동안 튜토리얼을 읽고, 코드를 작성하고 수정해 왔지만, 저는 초보자가 한참이라 다음에 뭘 시도해야 할지 막막한 상태입니다.
목표: 특정 카테고리의 토픽 목록을 사용자의 요약 페이지에 표시하는 것입니다.
이 사용 사례는 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) {
// user.js 모델의 summary()에서 가져온 줄; 현재 보고 있는 사용자 프로필의 사용자명을 찾아 그들이 생성한 토픽의 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>