Je viens de passer par ce processus et j’ai rencontré de nombreux essais et erreurs, alors j’ai décidé de documenter mes découvertes pour aider le prochain développeur qui passera par là.
Les éléments dont j’avais besoin :
-
Enregistrer votre type de champ personnalisé (le mien était booléen, la valeur par défaut est une chaîne)
# plugin.rb User.register_custom_field_type 'my_preference', :boolean -
Enregistrer que le champ personnalisé doit être modifiable par les utilisateurs. La syntaxe correspond à celle de
params.permit(...)
# plugin.rb register_editable_user_custom_field :my_preference # Type scalaire (string, integer, etc.) register_editable_user_custom_field [:my_preference , my_preference : []] # Pour le type tableau register_editable_user_custom_field [:my_preference, my_preference : {}] # Pour le type json -
Les ajouter aux champs sérialisés avec le CurrentUserSerializer
# plugin.rb DiscoursePluginRegistry.serialized_current_user_fields << 'my_preference' -
Créer un composant pour afficher vos préférences utilisateur
// assets/javascripts/discourse/templates/components/my-preference.hbs <label class="control-label">Mes préférences personnalisées !</label> {{preference-checkbox labelKey="my_plugin.preferences.key" checked=user.custom_fields.my_preference}} -
Connecter ce composant à l’un des emplacements de plugin de préférences (le mien se trouvait sous ‘interface’ dans les préférences utilisateur)
# assets/javascripts/discourse/connectors/user-preferences-interface/my-preference.hbs {{my-preference user=model}} -
S’assurer que les « champs personnalisés » sont enregistrés dans l’onglet des préférences
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() } } }) }) } }
Ce document est sous contrôle de version - proposez des modifications sur GitHub.
of course. Just add another. It’s been a long day. Thanks!