هل من الممكن إعادة تعيين عنوان URL للوحة المتصدرين يدويًا؟
على سبيل المثال، leaderboards/2 إلى leaderboards/1.
هل من الممكن إعادة تعيين عنوان URL للوحة المتصدرين يدويًا؟
على سبيل المثال، leaderboards/2 إلى leaderboards/1.
هل من الممكن منح نقاط للمستخدم كمكافأة إضافية؟ ![]()
قد ترغب في رؤية:
والذي يحتوي على طلب curl هذا بداخله:
curl --location 'https://my.discourse.com/admin/plugins/gamification/score_events' \
--header 'Api-Key: <your key>' \
--header 'Api-Username: <your username>' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "101",
"date": "2024-05-15",
"points": "-141",
"description": "Gamification point adjustment"
}'
لقد قمت بتفعيل هذه الإضافة في لوحة التحكم، لكن شريط علامات التبويب لم يعرض “Leaderboard” تلقائيًا، ولم تظهر عند إضافة قوائم جديدة. ما السبب؟ وأين يمكنني رؤية هذه القوائم؟
أعتقد أنه عليك إضافتها إلى الشريط الجانبي بنفسك
. لوحات الصدارة موجودة في /leaderboard و /leaderboard/2 و /leaderboard/3 وما إلى ذلك.
هل من الممكن إنشاء لوحة صدارة لفئة أو علامة معينة؟
تتصل لوحات الصدارة بالمجموعات. ولكن يمكنك تحديد الفئات التي تؤثر على جميع لوحات الصدارة في إعدادات التلعيب. يبدو أنها فكرة مثيرة للاهتمام لنقلها إلى لوحة الصدارة، على سبيل المثال، لوحة صدارة Support هنا في هذا المجتمع.
تم تقسيم منشورين إلى موضوع جديد: تقليل النقاط للمستخدمين الذين تم وضع علامة عليهم
هل هناك طريقة لاستبعادي من التصنيفات؟
نعم، أضف نفسك إلى مجموعة جديدة (سمّها ‘leaderboard-exclusion’ أو شيء من هذا القبيل) ثم استبعد المجموعة في إعدادات المكوّن الإضافي.
تعديل: سيتيح لك هذا أيضًا استبعاد أي شخص آخر بسهولة إذا أردت في مرحلة ما، عن طريق إضافته إلى نفس المجموعة. ![]()
شكراً جزيلاً. هذا منطقي.
بعد الترقية إلى الإصدار 2026.1.0، قمت بإنشاء لوحة صدارة شهرية جديدة، ثم ظهر خطأ عند الوصول إلى المسار التالي:
http://localhost:4200/admin/plugins/discourse-gamification/leaderboards
الخطأ هو كما يلي:
assert.js:40
Uncaught (in promise) Error: Assertion Failed: You attempted to update `_value` on `TrackedStorageImpl`, but it had already been used previously in the same computation. Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.
`_value` was first used:
- While rendering:
{{outlet}} for -top-level
-top-level
{{outlet}} for application
application
DiscourseRoot
{{outlet}} for admin
admin
{{outlet}} for adminPlugins
admin-plugins
{{outlet}} for adminPlugins.show
show
AdminPluginConfigPage
AdminPluginConfigArea
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards
adminPlugins.show.discourse-gamification-leaderboards
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards.index
discourse-gamification-leaderboards
DPageSubheader
(result of a `unknown` helper)
Stack trace for the update:
at TrackedArray._dirtyCollection2 (array.ts:163:13)
at Object.set (array.ts:126:15)
at Proxy.sort (<anonymous>)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.sortedLeaderboards (index.js:23:1)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.<anonymous> (handle-descriptor.js:67:17)
لقد حددت الملف الذي حدث فيه الخطأ على النحو التالي:
plugins/discourse-gamification/admin/assets/javascripts/discourse/controllers/admin-plugins/show/discourse-gamification-leaderboards/index.js
الكود المحدد:
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || [] // السطر 22
);
}
سبب الخطأ هو:
خطأ تأكيد إدارة الحالة التفاعلية في Ember.js (أو بتعبير أدق، نظام التتبع Glimmer)، والسبب الجوهري هو: في نفس دورة الحساب، تقوم أولاً بقراءة قيمة tracked (الحالة المتعقبة)، ثم تحاول تعديل هذه القيمة، وهذا النوع من العمليات “الاستخدام أولاً ثم التحديث” يسبب ارتباكًا منطقيًا أو حلقات لا نهائية أو مشاكل في الأداء، ولذلك يمنع Ember هذا السلوك مباشرة.
المشكلة الرئيسية:
Array.sort() يعدل المصفوفة الأصلية في مكانها، مما يؤدي إلى تحديث حالة leaderboards المتعقبة (@tracked).sortedLeaderboards) هي اشتقاق قيمة جديدة، وليس تعديل الحالة الأصلية؛ يجب أن تكون “دالة نقية” (بدون آثار جانبية، لا تعدل مصدر الإدخال).فيما يلي طريقة الإصلاح:
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
//leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
leaderboards?.slice().sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
);
}
لقطة الشاشة بعد الإصلاح:
ويبدو أن هذه المشكلة المماثلة ليست حالة معزولة. أخمن أنها مشكلة عدم توافق ناتجة عن ترقية emberjs. ومن ناحية أخرى، لم يتم تحديث العديد من الأماكن في الإضافات (plugins) لتتناسب مع هذا التغيير، لأن هذا العمل ليس بسيطًا كما يبدو.
السؤال: هل هناك تأخير في منح النقاط؟ على سبيل المثال، يقوم المستخدمون الجدد بأشياء تتطلب نقاطًا، مثل نشر موضوع جديد أو الإعجاب، ولكن نقاطهم لا تظهر. لقد قمت بتضمين مستوى الثقة 0 في الإعدادات، لذلك أفترض أنه مجرد تأخير في تخصيص النقاط؟ إذا كان الأمر كذلك، فكم مرة يتم الحساب والتحديث؟ شكرًا لك!