Ho appena seguito questo processo e ho riscontrato diverse prove ed errori, quindi ho pensato di documentare i miei risultati per aiutare il prossimo sviluppatore che si imbatterà in questa situazione.
Le cose di cui avevo bisogno:
-
Registrare il tuo tipo di campo personalizzato (il mio era booleano, l’impostazione predefinita è stringa)
# plugin.rb User.register_custom_field_type 'my_preference', :boolean -
Registrare che il campo personalizzato dovrebbe essere modificabile dagli utenti. La sintassi corrisponde a quella di
params.permit(...)
# plugin.rb register_editable_user_custom_field :my_preference # Tipo scalare (stringa, intero, ecc.) register_editable_user_custom_field [:my_preference , my_preference : []] # Per il tipo array register_editable_user_custom_field [:my_preference, my_preference : {}] # Per il tipo json -
Aggiungerli ai campi serializzati con CurrentUserSerializer
# plugin.rb DiscoursePluginRegistry.serialized_current_user_fields << 'my_preference' -
Creare un componente per visualizzare le tue preferenze utente
// assets/javascripts/discourse/templates/components/my-preference.hbs <label class="control-label">Le mie preferenze personalizzate!</label> {{preference-checkbox labelKey="my_plugin.preferences.key" checked=user.custom_fields.my_preference}} -
Collegare quel componente a una delle aperture (outlets) del plugin delle preferenze (la mia era sotto ‘interfaccia’ nelle preferenze utente)
# assets/javascripts/discourse/connectors/user-preferences-interface/my-preference.hbs {{my-preference user=model}} -
Assicurarsi che i ‘campi personalizzati’ vengano salvati nella scheda delle preferenze
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() } } }) }) } }
Questo documento è sottoposto a controllo versione: suggerisci modifiche su GitHub.
of course. Just add another. It’s been a long day. Thanks!