تطوير إضافات Discourse الجزء 3 - إضافة إعدادات مخصصة للموقع

You simply need to add a

config/locales/server.zh_CN.yml

file (and similar for any other locales you want to support) with the same English tokens but with language specific values and the plugin will use that instead of falling back to the English.

إعجابَين (2)

Thanks for helping! have a nice day!

3 إعجابات

I was looking how to create a site setting that validates a username, but found there’s a username type to do this. Here the list of site setting types we have today:

  • email
  • username
  • integer
  • regex
  • string
  • list
  • enum

Also, you can do custom validations for your plugin settings, it accepts a validator field that expects a Ruby class. You use it like this.

plugins:
  my_custom_username_validation:
    default: 'system'
    validator: 'UsernameSettingValidator'

You can check the UsernameSettingValidator class to see the interface of validators.

Cheers!

10 إعجابات

not working (

<a id="forgot-password-link" class="forgot-password" href="{{Discourse.SiteSettings.myplugin_link_forgot_password}}" target="_blank">Forgot password?</a>

settings.yml

plugins:
  myplugin_enabled:
    default: true
    client: true
  myplugin_link_forgot_password:
    default: ''
    client: true

upd:
working!!!
href="{{unbound siteSettings.myplugin_link_forgot_password}}"

how to display text html ?
not working {{unbound siteSettings.forum_text_for_admin}}

upd:
working in *.hbs {{{unbound siteSettings.forum_text_for_admin}}}

Again you need to use a Computed Property and format as safe html. This is EmberJS not vanilla JavaScript. You can’t put ‘code’ directly into templates. Read the ember guides.

إعجاب واحد (1)

already working with EmberJS

لدي هذا في settings.yml الخاص بي:

plugins:
  county_fence_enabled:
    default: false
    client: true
  county_fence_latrine_category:
    default: -1
    client: true

يظهر هذا في صفحة /admin/plugins الخاصة بي:

لا أفهم لماذا لا يوجد زر الإعدادات؟

أعتقد أنه بدلاً من الملحقات، من المفترض أن تكتب اسم الملحق county_fence.

إعجابَين (2)

لقد جربت ذلك أيضًا، دون أي فرق.

هذه الوثائق (بالإضافة إلى OP) تستخدم مفتاح plugins. في أماكن أخرى رأيت اسم المكون الإضافي مستخدمًا، كما قلت.

إعجاب واحد (1)

@bitmage في الواقع، قد أعرف السبب.

هل كتبت # name: County Fence في plugin.rb؟
إذا كان الأمر كذلك، يجب أن يكون الاسم هو نفسه اسم الدليل الخاص بك.

يمكن تجاوز اسم الإضافة من خلال الملف المحلي:

افترض أن لديك تنسيق الإعدادات التالي:

county_fence:
  county_fence_enabled: true
  ...

في client.en.yml:

en:
  admin_js:
    admin:
      site_settings:
        categories:
          county_fence: "County Fence"

تسبب تعيين القيمة الافتراضية إلى 0 بدلاً من -1 في ظهورها.

هل هناك أي طريقة لمعرفة أن نوعًا ما لم يتم اكتشافه بشكل صحيح؟

  1. YamlLoader يقوم بتحميل الملف.
  2. SiteSettingExtension calls setting() مع المعلمات التي تم إنشاؤها بواسطة YamlLoader
  3. …والتي تستدعي defaults.load_setting ولاحقًا type_supervisor.load_setting
  4. على الرغم من أن type_supervisor.load_setting لا يتم تمرير القيمة إليه مباشرة، إلا أنه يمكنه الوصول إلى القيم الافتراضية لأنها يتم تمريرها عند تهيئة TypeSupervisor عبر DefaultsProvider.
  5. بعد ذلك، تستدعي type_supervisor.load_setting get_data_type والتي تستدعي parse_value_type() والتي يجب أن تثير استثناء ArgumentError إذا لم يكن من الممكن اكتشاف النوع.

أعتقد أن هذه السلسلة بأكملها يتم استدعاؤها بواسطة load_settings في نموذج SiteSetting، ولا أرى أي معالجة استثناءات في أي مكان في المكدس. لكنني لا أرى أي مخرجات خطأ في سجل الخادم، أو في أي مكان آخر.

يبدو أنه يجب أن يكون هناك نوع من ملاحظات المستخدم أو سجل خطأ للإشارة إلى فشل إعداد في التحليل.

إذا فهمت، فأنت تقول إن استخدام -1 كقيمة افتراضية في إعداد يتسبب في عدم ظهور زر “الإعدادات”. هل يمكنك تكرار هذا السلوك في كل مرة؟

هذا غريب. لا أرى أي خطأ في إعداداتك، ولست متأكدًا من كيفية فشل التحليل. :thinking:

الآن بعد أن أصبح يعمل، يمكنني تغييره مرة أخرى إلى -1 وسيستمر في العمل.

لقد أسقطت قاعدة البيانات وأعدت تهيئتها وما زلت غير قادر على تكرار ذلك. :person_shrugging:

إعجاب واحد (1)

لقد قمت بنشر المكون الإضافي على موقعي المباشر باستخدام القيمة الافتراضية 0 فقط لكوني آمنًا. يعرض زر الإعدادات:

image

ولكن عندما أنقر عليه لا يتم عرض أي إعدادات:

سأقوم بتعطيل المكون الإضافي بينما أواصل استكشاف هذه المشكلة وإصلاحها.

حسنًا، أعتقد أنه في كلتا الحالتين (التطوير والإنتاج) كان ذلك بسبب عدم تطابق المجلد في دليل الإضافات مع county-fence. هذا هو السبب في عدم عرض الإعداد، وربما قد يسبب مشاكل أخرى أيضًا.

شكرًا لكم جميعًا!

إعجاب واحد (1)

ليس واضحًا بالنسبة لي. معظم الإضافات التي قمت بتثبيتها لا تستخدم plugins:، والتي تشمل الإضافات الرسمية والحديثة (وكذلك قالب الهيكل العظمي)

اعتقدت أن هذا الجزء كان يستخدم لتصفية الإعدادات، ولكن ربما أكون مخطئًا.

إعجاب واحد (1)

يا للاهتمام! اعتذر إذن.
ما سأقوله هو أنه غير ضروري، على ما يبدو.
لقد فقدتُ العدّ لعدد الإضافات التي قمت بتأليفها باستخدام plugins:

إعجاب واحد (1)

لتوسيع نطاق التوثيق:

يتوفر سرد كامل لأنواع إعدادات الموقع في كود type_supervisor.rb. فقط أعلاه يمكنك أيضًا رؤية المفاتيح الفرعية الصالحة التي يقبلها إعداد الموقع.

يمكن العثور على مثال أكثر تقدمًا يستخدم المزيد من هذه الخيارات في مكون سمة discourse-welcome-link. يجب أن تعمل هذه القيم نفسها داخل مكون إضافي، ولكن الملف سيكون بدلاً من ذلك في config/settings.yml.

3 إعجابات

هناك اختلافات بين أنواع المكونات الإضافية والمكونات.

لقد حاولت إنشاء جدول (يتوقع أخطاء طفيفة أو تجميعًا)

الفئة الوظيفة بناء جملة المكون الإضافي بناء جملة TC
الأنواع الأساسية سلسلة نصية type: string
min: ..
max: ..
regex: ..
secret: true/false
global
validator: اسم الفئة
type: string
min: ..
max: ..
-
-
-
-
نص متعدد الأسطر type: string
textarea: true
type: string
textarea: true
عدد صحيح type: integer
min: ..
max: ..
type: integer
min: ..
max: ..
عدد عشري type: float
min: ..
max: ..
type: float
min: ..
max: ..
قيمة منطقية type: bool type: bool
وقت type: time -
فارغ type: null -
أنواع الاختيار تعداد (قائمة منسدلة) type: enum
choices: [option1, option2]
enum: ..
type: enum
choices: [option1, option2]
فئة type: category -
لون type: color -
مجموعة type: group -
بريد إلكتروني type: email -
اسم مستخدم type: username -
أنواع القوائم قائمة عامة type: list
allow_any: true/false
type: list
قائمة بسيطة/مدمجة type: simple_list
أو
type: list
list_type: compact
list_type: simple
type: list
list_type: compact
list_type: simple
قائمة فئات type: category_list type: list
list_type: category
قائمة مجموعات type: group_list type: list
list_type: group
قائمة علامات type: tag_list type: list
list_type: tag
قائمة مجموعات علامات type: tag_group_list -
قائمة عناوين URL type: url_list -
قائمة مضيفين type: host_list -
قائمة قيم type: value_list -
قائمة رموز تعبيرية type: emoji_list -
أنواع الملفات تحميل type: upload type: upload
قائمة صور تم تحميلها type: uploaded_image_list -
قيد حجم الملف type: file_size_restriction
min: ..
max: ..
-
أنواع خاصة HTML (مهمل) type: html_deprecated -
كائنات JSON مهمل مهمل
كائنات - type: objects
5 إعجابات