diff options
-rw-r--r-- | .themes/classic/source/_includes/custom/category_feed.xml | 28 | ||||
-rw-r--r-- | plugins/category_generator.rb | 36 |
2 files changed, 64 insertions, 0 deletions
diff --git a/.themes/classic/source/_includes/custom/category_feed.xml b/.themes/classic/source/_includes/custom/category_feed.xml new file mode 100644 index 00000000..616642fe --- /dev/null +++ b/.themes/classic/source/_includes/custom/category_feed.xml @@ -0,0 +1,28 @@ +--- +layout: nil +--- +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + + <title>{{ page.title | xml_escape }} | {{ site.title | xml_escape }}</title> + <title><![CDATA[{{ page.title }} | {{ site.title }}]]></title> + <link href="{{ site.url }}/{{ page.feed_url }}" rel="self"/> + <link href="{{ site.url }}/"/> + <updated>{{ site.time | date_to_xmlschema }}</updated> + <id>{{ site.url }}/</id> + <author> + <name><![CDATA[{{ site.author | strip_html }}]]></name> + {% if site.email %}<email><![CDATA[{{ site.email }}]]></email>{% endif %} + </author> + <generator uri="http://octopress.org/">Octopress</generator> + + {% for post in site.categories[page.category] limit: 5 %} + <entry> + <title type="html"><![CDATA[{{ post.title | cdata_escape }}]]></title> + <link href="{{ site.url }}{{ post.url }}"/> + <updated>{{ post.date | date_to_xmlschema }}</updated> + <id>{{ site.url }}{{ post.id }}</id> + <content type="html"><![CDATA[{{ post.content | expand_urls: site.url | markdownify | cdata_escape }}]]></content> + </entry> + {% endfor %} +</feed> diff --git a/plugins/category_generator.rb b/plugins/category_generator.rb index d9357bc8..bb5fd329 100644 --- a/plugins/category_generator.rb +++ b/plugins/category_generator.rb @@ -48,6 +48,35 @@ module Jekyll end + # The CategoryFeed class creates an Atom feed for the specified category. + class CategoryFeed < Page + + # Initializes a new CategoryFeed. + # + # +base+ is the String path to the <source>. + # +category_dir+ is the String path between <source> and the category folder. + # +category+ is the category currently being processed. + def initialize(site, base, category_dir, category) + @site = site + @base = base + @dir = category_dir + @name = 'atom.xml' + self.process(@name) + # Read the YAML data from the layout page. + self.read_yaml(File.join(base, '_includes/custom'), 'category_feed.xml') + self.data['category'] = category + # Set the title for this page. + title_prefix = site.config['category_title_prefix'] || 'Category: ' + self.data['title'] = "#{title_prefix}#{category}" + # Set the meta-description for this page. + meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: ' + self.data['description'] = "#{meta_description_prefix}#{category}" + + # Set the correct feed URL. + self.data['feed_url'] = "#{category_dir}/#{name}" + end + + end # The Site class is a built-in Jekyll class with access to global site config information. class Site @@ -63,6 +92,13 @@ module Jekyll index.write(self.dest) # Record the fact that this page has been added, otherwise Site::cleanup will remove it. self.pages << index + + # Create an Atom-feed for each index. + feed = CategoryFeed.new(self, self.source, category_dir, category) + feed.render(self.layouts, site_payload) + feed.write(self.dest) + # Record the fact that this page has been added, otherwise Site::cleanup will remove it. + self.pages << feed end # Loops through the list of category pages and processes each one. |