أضف حقل المستخدم المخصص إلى صفحة حساب المستخدم

يريد شخص ما حقول مخصصة للمستخدمين في صفحة الحساب (لأنهم لا يحبون صفحة الملف الشخصي لأسباب معينة).

يبدو أنني يجب أن أتمكن من القيام بذلك عبر مكون في القالب.

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>حقول مستخدم مخصصة لـ {{ model.username}}</h3>
هذا هو uf: {{model.user_fields}}.
{{log "THIS" model.user_fields}}
{{#each model.user_fields |uf|}}
{{log "THISTHISTHIS" this}}
  <div class="control-group">
    {{user-field field=uf.field value=value}}
  </div>
{{/each}}
<div class='clearfix'></div>
</script>

لا أستطيع أن أبدو قادرًا على الوصول إلى حقول المستخدم المخصصة، رغم ذلك.

أحصل على مربعي الأزرق.

أرى أنني أستطيع الوصول إلى model.username.

في سجل وحدة التحكم، أرى:

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

أنا متأكد من أنني أقوم بشيء تافه، لكن بعد قراءة دليل المطور للقوالب عدة مرات، أظل محيرًا.

حسنًا، أنا أقوم مرة أخرى بنفس الشيء الذي أفعله حيث أنشر عن مشكلة أحاول حلها..

الآن أحاول حل نفس المشكلة في إضافة. لقد أنشأت myplugin/assets/javascripts/discourse/connectors/preferences/account/user-custom-controls/my-stuff.hbs وأضيفت بعض العناصر إلى الصفحة (تمامًا كما من قبل!) ومرة أخرى لا أعرف كيف (1) أحصل على البيانات، (2) أخبر إمبر (?) أنه يجب عليه تحديث الحقل عند حفظ النموذج.

أعتقد الآن أنني ربما أحتاج إلى تجاوز أو إضافة إلى account.js.es6 وإضافة user_fields إلى this.saveAttrNames حتى يعرف حفظها إذا تم تحديثها وأيضًا جلب البيانات إلى userFields.

لقد تلمست في العديد من الإضافات، لكنني لم أستطع الحصول على ذلك تمامًا.

حسناً، لقد نجحت في جعله يعمل، لكنه معقد بعض الشيء.

أنشئ فئة موصل (connector class) بهذا الكود.

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

في قالب الموصل (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 هل نجح الأمر؟

لم أجد حتى الآن فرصة لتجربته، لكنني أتوقع أنه سيفعل. هناك الكثير مما لا يزال عليّ تعلمه. شكرًا جزيلاً لك على كرمك! لا يسعني الشكر لك بما يكفي، لكنني سأحاول ذلك لاحقًا عندما أجربه.