RSS feed

zafu tutorials

  1. create a skin
  2. html to zafu
  3. overview (mushrooms)
  4. RSS feed
rssIcon

Some users like to be informed of changes on your site through RSS syndication. Offering such a possibility is very simple in zena:

Let’s take the most common example: inform about new posts in a blog.

First you must create a template to display the list of recent posts in a format that feed readers can understand. You can choose between RSS and atom. In this example, we shall use RSS. The format is pretty straightforward: it’s an xml file with a list of dated entries.

Here is the zafu code:

<?xml version="1.0" encoding="utf-8"?>
<!-- generator="zena" -->
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  >
  <channel>
    <title><![CDATA[<r:show attr='v_title'/>]]></title>
    <description><![CDATA[<r:show attr='v_summary'/>]]></description>
    <link do='[url]'/>
    <lastBuildDate do='date' select='now' do='show' date='current_date' lang='en' format='%a, %d %b %Y %H:%M:%S %Z'/>
  	<pubDate do='date' select='now' do='show' date='current_date' lang='en' format='%a, %d %b %Y %H:%M:%S %Z'/>
  	<generator>http://zenadmin.org</generator>
    <language do='[v_lang]'/>
    <r:if test='id eq 1'><r:notes in='site' limit='20' order='log_at DESC' do='each'>
    <item>
      <title><![CDATA[<r:show attr='v_title'/>]]></title>
      <link do='[url]'/>
      <pubDate do='show' date='log_at' lang='en' format='%a, %d %b %Y %H:%M:%S %Z'/>
      <description><![CDATA[<r:icon do='img' mode='pv'/><r:summary/>]]></description>
    </item>
    </r:notes>
    <r:else><r:notes in='project' limit='20' order='log_at DESC' do='each'>
    <item>
      <title do='[v_title]'/>
      <link do='[url]'/>
      <pubDate do='show' date='log_at' lang='en' format='%a, %d %b %Y %H:%M:%S %Z'/>
      <description><![CDATA[<r:icon do='img' mode='pv'/><r:summary/>]]></description>
    </item>
    </r:notes></r:else></r:if>
  </channel>
</rss>

The code that actually fetches the latest posts is the ‘r:notes’ line:

<r:notes in='project' limit='20' order='log_at DESC'>

The rest is just to display information. The code is pretty simple and uses “show shortcuts” quite a lot. These shortcuts let you write do='[v_title]' instead of do='show' attr='v_title' to display the version’s title (attribute starts with v_). The other shortcut used is the “zazen shortcut” {v_summary} which displays the attribute but passes it to zazen (the textile parser).

The code above should be saved in a template with “rss” format and “Node” class scope. You can also import the rss template.

telling browsers about your feed

You must add a “link” tag inside the head of your project pages:

<link rel="alternate" type="application/rss+xml" do='project' set_title='[v_title]' name='rss_feed' format='rss' set_href='http://example.com[path]'/>

You should now see a sign in your browser indicating that there is an RSS feed available.

rssInSafariBar