لتخزين البيانات المخصصة على Discourse، ذهبت إلى Admin > Customize > User Fields وأنشأت حقلًا مخصصًا. البيانات التي أحتاجها هي نسبة مئوية تمثل التقدم، وقد اخترت “text” كنوع للحقل. يُعرض اسم الحقل فقط على بطاقة المستخدم وصفحته الشخصية، وللأسف لا يُستخدم للإشارة إلى بيانات الحقل برمجياً.
كان الحقل الذي يخزن التقدم هو الحقل المخصص الثالث الذي أنشأته، وبالتالي أصبح الرقم “3” رقمًا مهمًا جدًا.
باستخدام واجهة برمجة التطبيقات (API)، كتبت سكريبت curl (بمساعدة https://meta.discourse.org/t/api-cannot-update-user/63876/4) لملء الحقل ببيانات تجريبية. وبما أن الحقل الذي أردت ملؤه كان الحقل الثالث الذي أنشأته، فإن سطر البيانات في سكريبت curl هو:
--data '{ "user_fields": { "3":"87" } }'
أما لعرض البيانات، فقد تطلّب الأمر الذهاب إلى Admin > Settings > Users، والتمرير إلى خيار “public user custom fields” وإدراج الحقل في القائمة البيضاء. وبما أن الحقل كان الثالث الذي تم إنشاؤه، فقد اضطررت لإدراج “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;
});
});
}
};
والنتيجة النهائية
