Ich habe diesen Prozess gerade durchlaufen und dabei einige Versuche und Irrtümer erlebt, daher habe ich meine Erkenntnisse dokumentiert, um dem nächsten Entwickler zu helfen, der dies nachvollziehen muss.
Die Dinge, die ich benötigte:
-
Registrieren Sie Ihren benutzerdefinierten Feldtyp (meiner war boolean, Standard ist string)
# plugin.rb User.register_custom_field_type 'my_preference', :boolean -
Registrieren Sie, dass das benutzerdefinierte Feld von Benutzern bearbeitet werden kann. Die Syntax entspricht der von
params.permit(...)
# plugin.rb register_editable_user_custom_field :my_preference # Skalartyp (string, integer, etc.) register_editable_user_custom_field [:my_preference , my_preference : []] # Für Array-Typ register_editable_user_custom_field [:my_preference, my_preference : {}] # Für JSON-Typ -
Fügen Sie sie den Feldern hinzu, die mit dem CurrentUserSerializer serialisiert werden
# plugin.rb DiscoursePluginRegistry.serialized_current_user_fields << 'my_preference' -
Erstellen Sie eine Komponente, um Ihre Benutzerpräferenz anzuzeigen
// assets/javascripts/discourse/templates/components/my-preference.hbs <label class="control-label">Meine benutzerdefinierten Präferenzen!</label> {{preference-checkbox labelKey="my_plugin.preferences.key" checked=user.custom_fields.my_preference}} -
Verbinden Sie diese Komponente mit einem der Präferenz-Plugin-Ausgänge (meiner befand sich unter ‘interface’ in den Benutzerpräferenzen)
# assets/javascripts/discourse/connectors/user-preferences-interface/my-preference.hbs {{my-preference user=model}} -
Stellen Sie sicher, dass ‘benutzerdefinierte Felder’ auf diesem Präferenz-Tab gespeichert werden
import { withPluginApi } from 'discourse/lib/plugin-api' export default { name: 'post-read-email', initialize () { withPluginApi('0.8.22', api => { api.modifyClass('controller:preferences/emails', { actions: { save () { this.get('saveAttrNames').push('custom_fields') this._super() } } }) }) } }
Dieses Dokument wird versioniert – schlagen Sie Änderungen auf GitHub vor.
of course. Just add another. It’s been a long day. Thanks!