مرحباً، هل يمكنك توضيح سؤالك الأصلي أكثر؟ ربما أسيء فهمه.
أعتقد أنك قد تحتاج إلى القيام بشيء مخصص، ولكن من الصعب التأكد من ذلك دون مزيد من التفاصيل.
هل ما تبحث عنه هو نموذج في منشور الموضوع، ويضيف علامات إلى الموضوع بناءً على محتوى النموذج؟ لأنه في هذه الحالة قد تتمكن من الاكتفاء بمكون سمة (Theme Component) بدلاً من ذلك.
مع تثبيت هذا المكون، يمكنك إضافة وصف نصي لكل وسم سيظهر في لافتة تُعرض عند تحديد الوسم نفسه. يقبل حقل النص HTML ويمكن تصميمه باستخدام CSS مخصص، لذا يمكنك القيام بالكثير به، ولكن إليك مثال بسيط جدًا حيث أقوم بتحرير وسم:
التحدي سيكون في تعديل هذا المكون بحيث يظهر ليس فقط في صفحة الوسم، ولكن في كل موضوع يستخدم هذا الوسم. لا أعرف مقدار العمل الذي قد يتطلبه ذلك، ولكن قد يكون لدى مبرمج أكثر خبرة (مثل Nate…) فكرة ما.
حسنًا، بما أنني فهمت سؤالك، سأقوم بتعديل عنوان هذا الموضوع لربما يلقي المزيد من الأشخاص نظرة عليه.
أتخيل أن الأمر سيتطلب عمل نسخة متفرعة (fork) من المكون لإنشاء إصدار جديد، وتحديد ما الذي يؤدي إلى ظهور الشريط في صفحة الوسم، وتغيير ذلك ليتم تشغيله أيضًا عند عرض المواضيع الموسومة.
قد تكون محظوظًا ويجد شخص ما أن هذا يبدو ممتعًا - وإلا فقد تحتاج إلى تحديد ميزانية للمشروع ونشر طلب في قسم Marketplace.
من الرائع جدًا أن تتولى هذا الأمر يا نيت. ليس لدي حاجة له بنفسي، ولكني كنت متحمسًا لتجربته. إنه يعمل بشكل رائع!
لكنني أرى مشكلة عند وجود علامات (tags) متعددة في موضوع ما. (ومن الصعب تخيل إدارة الأمور بعلامة واحدة فقط لكل موضوع.)
يتم فرز العلامات إما أبجديًا أو حسب الشعبية…
…لذا ليس لدى المؤلف سيطرة مباشرة على العلامة التي تظهر أولاً.
اعتقدت أن استخدام حرف غير أبجدي لبدء علامات العميل (~ClientName) قد يدفعها دائمًا إلى مقدمة القائمة. ينجح هذا في صفحة /tags - ولكن ليس في الموضوع، حيث تتجاهل قائمة العلامات حرف ~ ببساطة.
في موضوع من العام الماضي، يبدو أنه كان من الممكن إدراج بعض الأحرف غير الأبجدية بشكل غير مرئي لإجبار الترتيب: Invisible way to force display order of tags? ولكن يبدو أن هذا لا يعمل الآن. عندما أقوم بإنشاء علامة اليوم بفاصلة علوية أو فاصلة، يتم رفضها أو إزالتها بصمت. (لست متأكدًا من سبب قبول ~).
إعداد فرز العلامات الموضح أعلاه يؤثر على كل من صفحة /tags وقائمة العلامات في المواضيع - ولكن أعتقد أنه يجب عليهم استخدام خوارزمية أبجدية مختلفة؟
هممم… أفترض أن الأمر يعتمد حقًا على ما يرغب OP في القيام به. إذا كان هناك وسم واحد → موضوع واحد → مستخدم واحد، فسيعمل هذا. وإلا، سيتعين تقديم المزيد من المعلومات .
هممم… لست متأكدًا مما إذا كان هذا متوافقًا تمامًا مع المفهوم الأساسي لـ “لافتة الوسم” (tag banner)، حيث كان من المفترض أن تعرض معلومات الوسم في صفحة الوسم، ولكن هذا يعرض معلومات الوسم في المواضيع التي تحمل الوسم .
على صعيد منفصل، كانت هناك بعض التحديثات للمكون الرئيسي، لذا سأحتاج إلى محاولة تحديث النسخة المتفرعة (fork) أيضًا، ولكن لاحظ أن النسخة المتفرعة هي مجرد إثبات للمفهوم.
نعم، لا أعرف ما إذا كانت ستكون مفيدة على نطاق واسع بما يكفي لإضافة الميزات إلى المكون الإضافي الأصلي. قد يكون الإصدار المنفصل أو الملحق المسمى “Tagged Topic Banner” أكثر ملاءمة.
ولكن أعتقد أن الفائدة محدودة للغاية ما لم تكن هناك طريقة للمؤلف لتحديد العلامة الأساسية. الأشياء الوحيدة التي يمكنني التفكير فيها هي…
١.) حيلة مثل جعل الفرز الأبجدي يعامل حرفًا مثل ~ على أنه في أعلى القائمة.
اقترح AskBot نهجًا للمكون الإضافي الذي يقوم بالتصحيح البرمجي (monkey-patch)
# plugin.rb
after_initialize do
module ::CustomTagSort
def custom_tag_sort(tags)
tags.sort_by do |tag|
# يضع العلامات المسبوقة بـ ~ أولاً، ثم يفرز أبجديًا
[tag.name.start_with?("~") ? 0 : 1, tag.name.downcase]
end
end
end
# التصحيح البرمجي (Patch) في المُسلسِل/الطريقة التي تحسب visible_tags أو ما شابه
require_dependency 'topic_tags_mixin'
TopicTagsMixin.prepend(Module.new do
private
def all_tags
return @tags if defined?(@tags)
tags = topic.visible_tags(scope)
if SiteSetting.tags_sort_alphabetically
tags = ::CustomTagSort.custom_tag_sort(tags)
else
topic_count_column = Tag.topic_count_column(scope)
tags = tags.sort_by { |tag| tag.public_send(topic_count_column) }.reverse
end
@tags = tags
end
end)
end
٢.) أفضل من ذلك: ترتيب العلامات حسب ترتيب محدد لمجموعات العلامات.
البحث يظهر عددًا من المواضيع التي تطلب مزيدًا من التحكم في ترتيب العلامات، حيث غالبًا ما يكون ذلك مهمًا لأسباب مختلفة (الجنس → النوع، الشركة المصنعة → الطراز، إلخ) – ولكن تشير الردود إلى أن هذا سيتطلب قدرًا لا بأس به من العمل.