كيف يمكنني منح شارة تلقائيًا للمستخدم عند زيارته لرابط داخل منتدى Discourse؟
مثل: https://myforum.example.com?special_access=true
ما رأيك في استخدام جدول topic_link_clicks؟
أعتقد أن لدي شارة يدوية قد تستفيد من هذا.
سأفكر في الأمر.
إذا كان رابطًا محددًا تمت مشاركته في منشور معين، أعتقد أن هذا سيكون مناسبًا:
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
LEFT JOIN topic_links tl ON tl.post_id = p.id
LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
AND tl.url = 'https://meta.discourse.org/'
AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id
ستحتاج إلى الحصول على post_id للمنشور المحدد الخاص بك من ملف JSON الخاص بالمنشور (أو إجراء بحث من خلال مستكشف البيانات)
أعتقد أن هذا يمكن أن ينجح.
أريد فقط منح هذه الشارة لأعضاء دورتنا.
هل هناك أي طريقة لإخفاء موضوع عن عامة الناس وجعله متاحًا فقط لمن ينقر عليه عبر رابط.
ثانيًا، كيف يمكن القيام بذلك باستخدام المكون الإضافي Dfata explorer؟
لست متأكدًا بنسبة 100% من أنني أتبع الطريقة التي تستخدمها لهذا؟ قد ترغب في التحقق من أنك لا تعقد الإعداد بشكل مفرط.
إذا لم يكن فحص JSON هو ما تفضله، فإن استعلام البحث عن post_id سيكون شيئًا كهذا:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
ثم يمكنك استخدام عنوان URL للمنشور لسحب معرف الموضوع ورقم المنشور لإدخالهما في مربعات المعلمات. على سبيل المثال: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (تجدر الإشارة إلى أن المنشور الأصلي هو دائمًا المنشور رقم 1، حتى لو لم يكن في رابط الموضوع)
في الواقع، هناك معلمة سحرية قد تجعل البحث عن post_id باستخدام مستكشف البيانات أسهل …
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
الصق عنوان URL ذي الصلة للمنشور في مربع المعلمة، وها أنت ذا - يظهر لك post_id ![]()
الخلفية الحمراء تجعلني أعتقد أنها ليست عنوان URL لمنشور كامل. إذا كان عنوان URL لموضوع، فأنت بحاجة إلى إضافة /1 في النهاية:
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
لقد نجح الأمر!
أفترض أن هذا يحتاج إلى الاستبدال بعنوان URL للمنشور بما في ذلك ‘/1’؟
يجب استبدال هذا الجزء بالرابط الذي ينقرون عليه داخل المنشور.
ويُعدّ post_id هو المنشور الذي تم لصق/مشاركة الرابط فيه.
أوه، فهمت، لذا لا توجد طريقة لمنح الشارة بمجرد زيارتهم لرابط المنشور؟
أعتقد أنه يجب أن يكون هناك، ولكن هذا سيكون استعلامًا مختلفًا.
هذا يمنح شارة للنقر على رابط معين في منشور منتدى معين.
إذا كنت ترغب في منح شارة لمستخدم يزور موضوعًا معينًا، أعتقد أنه سيكون:
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id
(استبدال ‘728’ بـ topic_id ذي الصلة)
حسنًا، لقد قمت بإعداده على النحو التالي:
ولكن عندما أقوم بزيارة المنشور المعني (بصفتي مسؤولاً)، لا أحصل على الشارة. هل أفعل شيئًا خاطئًا هنا؟
نظرًا لأنه يحتاج إلى مشغل التحديث اليومي، فسيتم منحه في المرة التالية التي يتم فيها تشغيل وظيفة منح الشارات اليومية. يمكنك تشغيل Jobs::BadgeGrant يدويًا من صفحة /sidekiq/scheduler إذا كنت ترغب في تسريع عملية التحقق.
كيف يمكنني جعله يحدث فورًا؟
المشغلات الوحيدة المتاحة هي:
- التحديث اليومي
- عندما يقوم مستخدم بتحرير أو إنشاء منشور
- عندما يتم تحرير مستخدم أو إنشاؤه
- عندما يتصرف مستخدم بشأن منشور
- عندما يتم تحرير مستخدم أو إنشاؤه
- عندما يغير مستخدم مستوى الثقة
للحصول على شارة فورية، ستحتاج إلى العمل ضمن قيود تلك الإجراءات. يمكنك قراءة المزيد في هذا الموضوع - Creating triggered custom badge queries
لقد فعلت هذا ولكن لم يتم منحها بعد.
نعم، تم تمكينه. دعني أجرب على ملف تعريف آخر. ربما لأنني المسؤول.
ثانياً، هل تقوم فقط بلصق رابط الموضوع في متصفحك؟
كونك مسؤولاً لا يُحدث فرقًا في هذا الأمر.
ستحتاج إلى زيارة الموضوع حتى يتم تسجيله في جدول topic_views الذي يعتمد عليه هذا الشعار.





