Remplacer le champ personnalisé

create-account.hbs

{{#if userFields}}

            
            <div class='user-fields'>

              {{#each userFields as |f|}}

                {{user-field field=f.field value=f.value}}

              {{/each}}

            </div>

          {{/if}}

js

var siteSettings = Discourse.SiteSettings;
    console.log(siteSettings.forum_name);

complete = $(".user-field-" + siteSettings.forum_name);

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/controllers/create-account.js.es6#L239-L245

Comment vérifier le champ ?

{{#if f.field.name == complete }}  {{! ne fonctionne pas }}
  OK
{{/if}}

Définir l’entrée pour create-account.hbs

 var siteSettings = Discourse.SiteSettings;
          $('.control-label').each( function () {
  if($(this).text().trim() === siteSettings.forum_name) {
  const uuid ='lp'+(() => ([1e7]+-1e11).replace(/[018]/g,c => (c^crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c/4).toString(16)))();
var id = "user-" + $(this).parent().attr('id');
    var input = $('#' + id);
    input.val(uuid);
   // $(this).parent().hide()
  
    }
})

Cela ressemble à ceci

Rails.logger.warn(“#{params }”)
Cela ressemble à ceci

"user_fields" => <ActionController::Parameters {"1" => "true", "2" => ""}

“2” => “”
où se trouve le deuxième champ ?

Cela ne fonctionne pas car vous ne pouvez pas effectuer le calcul logique réel dans un modèle. Cela doit être géré dans le JavaScript correspondant par une propriété calculée. Assurez-vous de lire les guides officiels d’Ember (en veillant à sélectionner la même version que celle utilisée par Discourse) et examinez le code dans l’un des nombreux plugins populaires ici pour vous fournir des exemples.

Merci pour la réponse, je suis intéressé par des exemples provenant de plugins.

Voici un exemple de propriété calculée issue d’une PR que j’ai récemment soumise pour l’excellent plugin National Flags d’Ebsy : discourse-nationalflags/assets/javascripts/discourse/components/user-nationalflags-preferences.js.es6 at master · Ebsy/discourse-nationalflags · GitHub

En voici un autre (“showTimezones”) qui est effectivement utilisé pour masquer/afficher dans un modèle : https://github.com/paviliondev/discourse-team-timezones/blob/master/assets/javascripts/discourse/components/team-display.js.es6

Mais vous trouverez une multitude de modèles remarquables dans nos plugins : Pavilion · GitHub

Bonjour, j’ai trouvé comment remplacer l’action dans les contrôleurs.

exemple

import CreateAccount from 'discourse/controllers/create-account';
export default {

    name: 'Create-Account-Popup',
    initialize: function () {
        CreateAccount.reopen({
            actions: {
                createAccount() {
// mon code
                }
            }
        });
}

Comment ajouter votre @discourseComputed ?

Je fais comme dans l’exemple mais cela ne fonctionne pas

export default {
    name: 'Create-Account-Popup',
    
    @discourseComputed()
    ldapForgotPassword() {
        console.log('oublié !!');
        return this.siteSettings.forum_login_popup_use_ldap;
    },

C’est arrivé via @computed

        PreferencesAccount.reopen({
            @computed
            ldapForgotPassword() {
                console.log('oublié !!');
                return this.siteSettings.forum_login_popup_use_ldap;
            },

Vous devriez utiliser ceci pour éviter un avertissement du navigateur.

Il s’agit simplement d’une importation différente :

import discourseComputed from "discourse-common/utils/decorators";