Aggiungi il campo personalizzato dell'utente alla pagina dell'account utente

Qualcuno vuole campi personalizzati per gli utenti nella pagina dell’account (non gli piace la pagina del profilo per motivi personali).

Sembra che dovrei poterlo fare in un componente del tema.

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>Campi utente personalizzati per {{ model.username}}</h3>
Questo è uf: {{model.user_fields}}.
{{log "QUESTO" model.user_fields}}
{{#each model.user_fields |uf|}}
{{log "QUESTOQUESTOQUESTO" this}}
  <div class="control-group">
    {{user-field field=uf.field value=value}}
  </div>
{{/each}}
<div class='clearfix'></div>
</script>

Non riesco comunque ad accedere ai campi personalizzati dell’utente.

Vedo la mia casella blu.

Vedo che posso accedere a model.username.

Nel log della console vedo:

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

Sono sicuro di star facendo qualcosa di sciocco, ma dopo aver letto più volte l’eccellente Guida per sviluppatori ai temi, sono bloccato.

Bene, sto di nuovo facendo la cosa in cui pubblico su un problema che sto cercando di risolvere..

Ora sto cercando di risolvere lo stesso problema in un plugin. Ho creato myplugin/assets/javascripts/discourse/connectors/preferences/account/user-custom-controls/my-stuff.hbs e questo ha aggiunto del contenuto alla pagina (proprio come prima!) e ancora una volta non so come (1) ottenere i dati, (2) dire a Ember (?) che deve aggiornare il campo quando il modulo viene salvato.

Penso che ora forse debba sovrascrivere o aggiungere a account.js.es6 e aggiungere user_fields a this.saveAttrNames in modo che sappia salvarli se vengono aggiornati e anche ottenere i dati in userFields.

Ho dato un’occhiata a un bel po’ di plugin, ma non riesco proprio a capire come fare.

Ok, ce l’ho fatta funzionare ma è un po’ complicata.

Crea una classe connector con questo codice.

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();
    }
  },
}

Nel template del connector,

{{#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 ha funzionato?

Non ho ancora avuto la possibilità di provarlo, ma credo che lo sarà. C’è così tanto che devo ancora imparare. Grazie mille per la tua generosità! Non posso ringraziarti abbastanza, ma ci proverò tra un po’, quando lo proverò.