لقد مررتُ مؤخرًا بهذه العملية وشهدتُ الكثير من التجربة والخطأ، لذا قررتُ توثيق نتائجي لمساعدة المطور التالي الذي سيعبر هذا الطريق.
الأشياء التي احتجتُ إليها:
-
تسجيل نوع الحقل المخصص الخاص بك (كان لديّ من نوع boolean، بينما الافتراضي هو string)
# plugin.rb User.register_custom_field_type 'my_preference', :boolean -
تسجيل أن الحقل المخصص يجب أن يكون قابلاً للتعديل من قبل المستخدمين. يتطابق بناء الجملة مع
params.permit(...)
# plugin.rb register_editable_user_custom_field :my_preference # نوع قياسي (string, integer, إلخ.) register_editable_user_custom_field [:my_preference , my_preference : []] # لنوع المصفوفة register_editable_user_custom_field [:my_preference, my_preference : {}] # لنوع json -
إضافتها إلى الحقول المسلسلة مع CurrentUserSerializer
# plugin.rb DiscoursePluginRegistry.serialized_current_user_fields << 'my_preference' -
إنشاء مكون لعرض تفضيلات المستخدم الخاصة بك
// assets/javascripts/discourse/templates/components/my-preference.hbs <label class="control-label">تفضيلاتي المخصصة!</label> {{preference-checkbox labelKey="my_plugin.preferences.key" checked=user.custom_fields.my_preference}} -
ربط هذا المكون بأحد منافذ الإضافات الخاصة بالتفضيلات (كان لديّ تحت ‘interface’ في تفضيلات المستخدم)
# assets/javascripts/discourse/connectors/user-preferences-interface/my-preference.hbs {{my-preference user=model}} -
التأكد من حفظ ‘الحقول المخصصة’ في تبويب التفضيلات هذا
import { withPluginApi } from 'discourse/lib/plugin-api' export default { name: 'post-read-email', initialize () { withPluginApi('0.8.22', api => { api.modifyClass('controller:preferences/emails', { actions: { save () { this.get('saveAttrNames').push('custom_fields') this._super() } } }) }) } }
هذا المستند يخضع لنظام التحكم بالإصدارات - يُرجى اقتراح التغييرات على GitHub.
of course. Just add another. It’s been a long day. Thanks!