---
title: "إضافة خلاصات Atom لكل وسم في Middleman"
description: "تعرّفوا على طريقة توليد خلاصات Atom/XML حسب الوسوم باستخدام Middleman."
canonical: https://oozou.com/ar/blog/adding-per-tag-atom-feeds-to-middleman-17
locale: ar
date: 2014-12-12
author: "OOZOU Team"
---

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

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

Published: 2014-12-12 · Author: OOZOU Team (Engineering) · 2 min read

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

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

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](http://middlemanapp.com/basics/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
```

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/ar/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
