نحن نستخدم Topic List Previews (legacy) مع البطاقات في صفحتنا الرئيسية. بالأمس، اضطررنا إلى إعادة بناء مثيلنا لأسباب لا علاقة لها بـ TPL. كنا على علم بتغيير نظام خلفي لتصغير الصور في نواة Discourse، وكنا نعلم أن الترقية قد تسبب مشاكل مع الصور المصغرة. ومع ذلك، كان لا بد من القيام بذلك.
على أي حال، بعد إعادة البناء (بما في ذلك ترقية Postgres)، اختفت جميع الصور المصغرة القادمة من oneboxes. لا مشكلة، أعيدنا خبز جميع المنشورات، ثم عادت معظم الصور المصغرة للظهور (جيد) لكن ليس جميعها (مثير للاهتمام وسيء). أعيدنا خبز عدد قليل من المنشورات مرة أخرى احتياطًا، لكن هناك بعض المنشورات المتبقية التي لن تحصل على صورتها المصغرة في الصفحة الرئيسية حتى لو تم عرض oneboxes دون مشاكل في صفحة الموضوع الخاصة بها.
كانت بعض الصور المصغرة الخاصة بـ YouTube oneboxes مفقودة في الصفحة الرئيسية (فقط بعضها)، ثم، بعد زيارة صفحة الموضوع، ستظهر بشكل سحري في الصفحة الرئيسية. ومع ذلك…
كما تم الاتفاق، أصبحت منطقية إنشاء الصور المصغرة مدمجة الآن في النواة.
ما كان على TLP القيام به لم يعد ضروريًا إلى حد كبير.
للمرجعية، المعايير الأساسية للإدراج هي التالية:
def extract_images_for_post
# جميع الصور التي تحتوي على سمة src
@doc.css("img[src]") -
# ناقص الرموز التعبيرية
@doc.css("img.emoji") -
# ناقص الصور داخل الاقتباسات
@doc.css(".quote img") -
# ناقص أيقونات مواقع onebox
@doc.css("img.site-icon") -
# ناقص صور رموز onebox
@doc.css("img.onebox-avatar") -
# ناقص صور onebox الصغيرة (الصور الكبيرة هي .aspect-image-full-size)
@doc.css(".onebox .aspect-image img")
end
يقوم TLP بتعديل هذا قليلاً، ولكن فقط لتوسيع نطاقه. أود التخلي عن هذا التجاوز بالكامل إذا أمكن:
def extract_images_for_post
# جميع الصور التي تحتوي على سمة src
@doc.css("img[src]") -
# ناقص الرموز التعبيرية
@doc.css("img.emoji") -
# ناقص الصور داخل الاقتباسات
@doc.css(".quote img") -
# ناقص أيقونات مواقع onebox
@doc.css("img.site-icon") -
# ناقص صور رموز onebox
@doc.css("img.onebox-avatar") #معايير أوسع من نواة Discourse
end
كما ترون، أنا أقوم بتقليل عدد الاستثناءات من خلال السماح بصور onebox الصغيرة كما عرّفتها النواة.
بدلاً من الحفاظ على هذا في TLP، سيكون من الجيد الحصول على توافق في الآلات وتكافؤ عبر حالات الاستخدام، حتى لا أضطر إلى الحفاظ على هذا في الإضافة على الإطلاق.
أود فقط أن أقول أن المصغرات السابقة لروابط Soundcloud المدمجة (oneboxes) كانت تقدم نتائج ممتازة، وهذا التراجع مزعج حقًا لموقع يركز على الموسيقى مثل موقعنا.
لا يزعجني إذا فاتنا بعض المصغرات لفيديوهات YouTube هنا وهناك.
أنا فضولي لمعرفة كيف سيتطور هذا الأمر. أتفق على أن الهدف هو ضبط عملية إنشاء المصغرات في نواة Discourse بدقة للوصول إلى أفضل أرضية مشتركة بين المتطلبات والرغبات العديدة. شكرًا للجميع الذين يعملون على هذا.
بمجرد إلقاء نظرة، لا أعتقد أن هذا صندوق يوتيوب واحد. أشك في أن شخصًا ما استخدم كود تضمين يوتيوب خام في المنشور. إذا حوّلتّه إلى صندوق واحد، يجب أن تعمل الصورة المصغرة.
هل كان هذا يعمل سابقًا مع إضافة TLP القديمة؟ صناديق Soundcloud هي إطارات مضمنة (iframes)، لذا أجد صعوبة في تخيل كيف يمكننا استخراج صورة مصغرة منها، حتى مع تحديث معايير اختيارنا. @merefield، هل كانت لإضافة TLP منطق مخصص لـ Soundcloud في مكان ما؟
نعم، كان هناك منطق مخصص يتعلق بـ oneboxes، رغم أن هذا لم يكن مخصصًا حصريًا لـ SoundCloud:
if @has_oneboxes
cooked = PrettyText.cook(@post.raw)
if img
## نحتاج إلى شيء أكثر تحديدًا لتحديد الصورة
img_id = img
src = img.attribute("src").to_s
img_id = src.split('/').last.split('.').first if src
end
prior_oneboxes = []
Oneboxer.each_onebox_link(cooked) do |url, element|
if !img || (img && cooked.index(element).to_i < cooked.index(img_id).to_i)
html = Nokogiri::HTML::fragment(Oneboxer.cached_preview(url))
prior_oneboxes = html.css('img')
end
end
if prior_oneboxes.any?
prior_oneboxes = prior_oneboxes.reject do |html|
class_str = html.attribute('class').to_s
class_str.include?('site-icon') || class_str.include?('avatar')
end
if prior_oneboxes.any? && validate_image_for_previews(prior_oneboxes.first)
img = prior_oneboxes.first
end
end
end
لم يحدث تغيير فوري. بعد إعادة بناء HTML، لم يحدث تغيير فوري أيضًا، لكنني ذهبت للتحقق من Sidekiq ورأيت مهمة مرتبطة مجدولة. بعد انتظار 4 دقائق بصبر، أصبحت الصورة المصغرة متاحة الآن وتُعرض في الصفحة الرئيسية. شكرًا لك @david على الرد السريع如此، وفي يوم الأحد أيضًا!
بالتأكيد. للأسف، لم أقوم بتصوير أي لقطة شاشة. كانت الصفحة الرئيسية تعرض الصورة على يسار العنصر المدمج تلقائيًا.