Ich möchte hören, was Sie zu diesem Plugin sagen. Ich arbeite an einem Plugin, das es Besuchern ermöglicht, je nach ihren Interessen ein neues Thema auf der Homepage anzuzeigen. Ich habe die Idee aufgeschrieben und diesen Schritt gezeichnet, aber ich habe noch nicht damit herumgespielt.
plugin.rb
# plugins/custom_homepage/plugin.rb
# frozen_string_literal: true
# name: custom-homepage
# about: Passt die Homepage an, um Themen basierend auf Benutzerinteressen anzuzeigen
# version: 0.1
# authors: MHAT
# url: https://domain.com
enabled_site_setting :custom_homepage_enabled
after_initialize do
# nach der Initialisierung auszuführender Code
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: "Benutzerdefinierte Homepage aktivieren"
user:
preferences:
interests: "Interessen"
# plugins/custom_homepage/config/discourse_plugin.yml
enabled_site_setting: custom_homepage_enabled
HTML für Einstellungen
<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
Vielen Dank für Ihr Feedback und Ihre Verbesserungsvorschläge.
Ich bin Thai. Meine Englischkenntnisse sind vielleicht nicht besonders gut. Ich habe versucht, sie während der Entwicklung von Discourse zu lernen.