Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First attempt at creating per-category Atom feeds. #201

Merged
merged 2 commits into from
Oct 16, 2011
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .themes/classic/source/_includes/custom/category_feed.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
layout: nil
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

<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>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had to add markdownify here to get my content rendered properly. This confounds me, since the other templates that I've looked at didn't have to do this.

</entry>
{% endfor %}
</feed>
36 changes: 36 additions & 0 deletions plugins/category_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,35 @@ def initialize(site, base, category_dir, category)

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
Expand All @@ -63,6 +92,13 @@ def write_category_index(category_dir, category)
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.
Expand Down