Benutzerdefiniertes Benutzerfeld auf der Benutzerkontoseite anzeigen

Jemand möchte benutzerdefinierte Felder auf der Kontoseite (aus bestimmten Gründen mögen sie die Profilseite nicht).

Es scheint, als könnte ich das in einer Theme-Komponente umsetzen.

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/preferences/account.hbs#L207

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/preferences/profile.hbs#L24-L28

common/head_tag.html:

<script type="text/x-handlebars" data-template-name="/connectors/user-preferences-account/lc-ucf">
<div style="height: 25px; width: 25px;background: blue"></div>
<h3>Benutzerdefinierte Benutzerfelder für {{ model.username}}</h3>
Das sind die uf: {{model.user_fields}}.
{{log "DAS" model.user_fields}}
{{#each model.user_fields |uf|}}
{{log "DASDASDAS" this}}
  <div class="control-group">
    {{user-field field=uf.field value=value}}
  </div>
{{/each}}
<div class='clearfix'></div>
</script>

Ich scheine jedoch nicht auf die benutzerdefinierten Benutzerfelder zugreifen zu können.

Ich erhalte mein blaues Feld.

Ich sehe, dass ich auf model.username zugreifen kann.

In der Konsolenausgabe sehe ich:

THIS {3: "STEM Professional (industry)"}

Ich bin mir sicher, dass ich etwas Dummes mache, aber nachdem ich die hervorragende Entwickleranleitung für Themes mehrfach gelesen habe, bin ich ratlos.

Nun, ich mache wieder das, was ich tue: Ich poste über ein Problem, das ich zu lösen versuche..

Jetzt versuche ich, dasselbe Problem in einem Plugin zu lösen. Ich habe myplugin/assets/javascripts/discourse/connectors/preferences/account/user-custom-controls/my-stuff.hbs erstellt, und das hat einige Dinge auf der Seite hinzugefügt (genau wie zuvor!), und wieder weiß ich nicht, wie ich (1) die Daten bekomme und (2) Ember (?) mitteile, dass es das Feld aktualisieren soll, wenn das Formular gespeichert wird.

Ich denke jetzt, dass ich vielleicht account.js.es6 überschreiben oder erweitern muss und user_fields zu this.saveAttrNames hinzufügen muss, damit es weiß, dass es sie speichern soll, wenn sie aktualisiert werden, und auch Daten in userFields laden kann.

Ich habe bereits eine Reihe von Plugins untersucht, aber ich komme nicht ganz weiter.

Okay, ich habe es zum Laufen gebracht, aber es ist etwas knifflig.

Erstellen Sie eine Connector-Klasse mit diesem Code.

import { set } from "@ember/object";
import EmberObject from "@ember/object";

export default {
@discourseComputed("model.user_fields.@each.value")
  publicUserFields() {
    const siteUserFields = this.site.get("user_fields");
    if (!isEmpty(siteUserFields)) {
      const userFields = this.get("model.user_fields");
      return siteUserFields
        .filterBy("show_on_user_card", true)
        .sortBy("position")
        .map(field => {
          set(field, "dasherized_name", field.get("name").dasherize());
          const value = userFields ? userFields[field.get("id")] : null;
          return isEmpty(value) ? null : EmberObject.create({ value, field });
        })
        .compact();
    }
  },
}

Im Connector-Template:

{{#if publicUserFields}}
        <div class="card-row fifth-row">
          <div class="public-user-fields">
            {{#each publicUserFields as |uf|}}
              {{#if uf.value}}
                <div class="public-user-field {{uf.field.dasherized_name}}">
                  <span class="user-field-name">{{uf.field.name}}:</span>
                  <span class="user-field-value">{{uf.value}}</span>
                </div>
              {{/if}}
            {{/each}}
          </div>
        </div>
{{/if}}

@pfaffman Hat es funktioniert?

Ich hatte noch keine Gelegenheit, es auszuprobieren, aber ich vermute, dass es funktionieren wird. Es gibt so viel, das ich noch lernen muss. Vielen Dank für deine Großzügigkeit! Ich kann dir gar nicht genug danken, aber ich werde es versuchen, sobald ich es ausprobiere.