如何在用户头像下方显示数据?

I am trying to display some externally generated user data below the user’s avatar. Currently, the data is stored in a custom user field of type ‘text’ and the field is populated via an API call as well as during SSO.

Now I am trying to determine the best way to actually display the data. Actually, I’m trying to find any way to display the data. A plugin seems like the best option, but there is no plugin-outlet that can be used.

Can someone with more knowledge point me in the correct direction?

This should be your ticket for displaying the data:

api.decorateWidget('post-avatar:after', helper => {
    return helper.h('div', `TEST`);
});

You can find more info on that function in the plugin-api.js.es6. I imagine with some CSS you’d be able to get something close to what you want.

Thank you, that has certainly helped with displaying data in the correct location. Unfortunately it has also led me to another stumbling block.

From the helper.attrs, I can get the username and the user_id. Using this info, I then tried:

Discourse.User.findByUsername(helper.attrs.username).then((user)=>{
   let f1_val = user.user_fields[1];
   return helper.h('div', `${f1_val}`);
});

Aside from throwing an error, this method of data retrieval results in an API request for every post. Is there a way to access the information from the Ember side without requiring an API call?

Ah yeah, I ran into a similar issue when trying to tinker around with something for a theme. The answer I got was:

Since it sounds like you are able to use a plugin, I think you should be able to add the custom_field to the post serializer.

I’m pretty sure this topic will have some useful info and give you some good inspiration:

My knowledge on plugins is admittedly limited, so if anyone else reading has better advice, please chime in :slight_smile:

once again, thank you. Hopefully I can make some time this weekend to hack on my plugin.

For what it is worth, none of that helped me get the data :frowning: but I did manage to get the data without creating a plugin :smile:

That’s awesome!

Would you mind sharing the basic idea of what ended up working for you? I’m curious what you ended up going with and I’m sure others that happen upon this topic will appreciate the info as well :smiley:

Sure thing. Once I get data displaying better, I’ll be posting about my experience

为了在 Discourse 上存储自定义数据,我进入了“管理 > 自定义 > 用户字段”,并创建了一个自定义字段。我需要的数据是一个表示进度的百分数,因此我选择了“文本”作为字段类型。该字段的名称仅显示在用户的卡片和个人资料页面上,遗憾的是,无法通过程序化方式引用该字段的数据。

存储进度的字段是我创建的第三个自定义字段,因此“3”成为一个非常重要的数字。

通过 API,我编写了一个 curl 脚本(参考了 https://meta.discourse.org/t/api-cannot-update-user/63876/4)来用测试数据填充该字段。由于我要填充的字段是我创建的第三个字段,因此我的 curl 脚本中的数据行如下:

--data '{ "user_fields": { "3":"87" } }'

要显示该数据,需要进入“管理 > 设置 > 用户”,滚动到“公开用户自定义字段”选项,并将该字段加入白名单。由于该字段是第三个创建的,我必须将"user_field_3"加入白名单,而不是我实际给该字段起的名称。

此时,我编写了一个基本插件,内容如下:

import { withPluginApi } from 'discourse/lib/plugin-api';
export default {
  name: 'progress-indicator',
  initialize() {
    withPluginApi("0.8.23", api => {       
      api.decorateWidget('post-avatar:after', helper => {
        let progress = helper.attrs.userCustomFields['user_field_3'];
        let retString = helper.h("div.progress-wrapper",
          {style: 'border: 1px solid blue; width:100%;'}, 
          helper.h('div.progress-bar',{style: 'width:'+progress+'%; background-color: green; height: 10px;'})
        );
        return retString;
      });
    });
  }
};

最终输出结果