이 플러그인에 대한 여러분의 생각을 듣고 싶습니다. 저는 방문자의 관심사에 따라 홈페이지에 표시할 새 주제를 선택할 수 있게 해주는 플러그인을 개발 중입니다. 아이디어를 적어두고 이 단계를 설계해 보았지만, 아직 직접 테스트해 보지는 않았습니다.
plugin.rb
# plugins/custom_homepage/plugin.rb
# frozen_string_literal: true
# name: custom-homepage
# about: Customizes the homepage to show topics based on user interests
# version: 0.1
# authors: MHAT
# url: https://domain.com
enabled_site_setting :custom_homepage_enabled
after_initialize do
# 초기화 후 실행될 코드
end
// plugins/custom_homepage/assets/javascripts/discourse/initializers/custom-homepage.js.es6
import { withPluginApi } from 'discourse/lib/plugin-api';
export default {
name: 'custom-homepage',
initialize(container) {
withPluginApi('0.8', api => {
api.modifyClass('component:topic-list', {
didInsertElement() {
this._super(...arguments);
if (this.currentUser) {
this.loadUserInterests();
}
},
loadUserInterests() {
const userId = this.currentUser.id;
fetch(`/u/${userId}/preferences/interests`)
.then(response => response.json())
.then(data => {
this.set('topics', this.sortTopicsByInterests(this.topics, data.interests));
});
},
sortTopicsByInterests(topics, interests) {
return topics.sort((a, b) => {
const aScore = interests.includes(a.category_id) ? 1 : 0;
const bScore = interests.includes(b.category_id) ? 1 : 0;
return bScore - aScore;
});
}
});
});
}
};
# plugins/custom_homepage/config/locales/server.en.yml
en:
site_settings:
custom_homepage_enabled: "Enable Custom Homepage"
user:
preferences:
interests: "Interests"
# plugins/custom_homepage/config/discourse_plugin.yml
enabled_site_setting: custom_homepage_enabled
설정용 HTML
<script type="text/x-handlebars" data-template-name="/connectors/user-preferences/interests">
<div class="control-group">
<label class="control-label">{{i18n 'user.preferences.interests'}}</label>
<div class="controls">
{{input value=currentUser.custom_fields.interests class="form-control"}}
</div>
</div>
</script>
# plugins/custom_homepage/plugin.rb
after_initialize do
User.register_custom_field_type('interests', :string)
add_to_serializer(:current_user, :interests) do
object.custom_fields['interests']
end
end
피드백과 개선 제안에 감사드립니다.
저는 태국 사람입니다. 영어 실력이 그렇게 뛰어나지 않아 보일 수 있습니다. 디스코urses 개발을 하면서 영어를 배우려고 노력했습니다.