OOZOU
تواصلوا معنا
العودة إلى المدونة

إضافة خلاصات Atom لكل وسم في Middleman

تعرّفوا على طريقة توليد خلاصات Atom/XML حسب الوسوم باستخدام Middleman.

12 ديسمبر 2014
دقيقتان للقراءة
إضافة خلاصات Atom لكل وسم في Middleman

قررنا اليوم إضافة خلاصات (feeds) خاصة بكل وسم إلى مدونتنا. وقد أثبت Middleman أنه مرن بما يكفي ليجعل ذلك سهلًا إلى حد كبير.

حين بدأنا، كان لدينا سؤالان رئيسيان:

  1. كيف نصل إلى الوسوم في config.rb، علمًا بأن المقالات الجديدة قد تضيف وسومًا جديدة في أي وقت؟
  2. كيف نولّد الملف الخاص بكل تصنيف؟

استغرقنا بعض الوقت لنجد إجابة السؤال الأول، لكن اتضح أن الـ callback المسمى ready، الذي يُنفَّذ بعد بقية config.rb، هو بالضبط ما نحتاج إليه:

ready do
  blog.tags.each do |tag, posts|
    proxy "/tags/#{tag}/feed.xml",
          "/tag.xml",
          locals: { tag: tag, posts: posts },
          ignore: true,
          layout: false
  end
end
lang-ruby

أما النقطة الثانية فكان حلها أسهل بكثير: نستخدم dynamic_pages في Middleman لتمرير الطلب (proxy) إلى قالب Atom (tag.xml.builder)، مع تمرير كل وسم والمقالات المرتبطة به كمتغيرات محلية (locals). ويضمن الخيار ignore: true ألا يحاول Middleman بناء القالب نفسه.

وإليكم الـ builder بكامل روعته:

xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
  site_url = "http://blog.oozou.com/"
  xml.title "The Oozou Blog — #{tag.capitalize}"
  xml.subtitle "We handcraft beautiful Web and Mobile apps"
  xml.id URI.join(site_url, tag_path(tag))
  xml.link "href" => URI.join(site_url, tag_path(tag))
  xml.link "href" => URI.join(site_url, current_page.path), "rel" => "self"
  xml.updated(blog.articles.first.date.to_time.iso8601) unless blog.articles.empty?
  xml.author { xml.name "Oozou" }

  posts.first(10).each do |article|
    xml.entry do
      xml.title article.title
      xml.link "rel" => "alternate", "href" => URI.join(site_url, article.url)
      xml.id URI.join(site_url, article.url)
      xml.published article.date.to_time.iso8601
      xml.updated File.mtime(article.source_file).iso8601
      xml.author article.data.author
      xml.avatar article.data.avatar
      xml.content article.body, "type" => "html"
    end
  end
end
lang-ruby

Related Articles

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

تصميم البرمجيات عملية ممتعة لكنها معقدة، تتطلب الإبداع والتفكير المنطقي ومهارات حل المشكلات.

اقرأوا المزيد
مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

يتطور المشهد الرقمي بسرعة، وعلى الشركات أن تتكيّف لتواكب الطلب المتزايد على السرعة والكفاءة والمعالجة في الوقت الفعلي.

اقرأوا المزيد
مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

يتطور قطاع التجزئة بوتيرة غير مسبوقة بفضل الذكاء الاصطناعي (AI) والواقع المعزّز (AR) وتقنيات التحوّل الرقمي. فلم تعد المتاجر التقليدية مجرد أماكن لبيع المنتجات، بل أصبحت متاجر ذكية وتفاعلية.

اقرأوا المزيد

Have a Project in Mind?

Let's discuss how we can help bring your ideas to life with our expertise in web and mobile development.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد