Source for file rss.php

Documentation is available at rss.php

  1. <?php
  2. /**
  3.  * Using QueryPath to Generate an RSS feed.
  4.  *
  5.  * This file contains an example of how QueryPath can be used
  6.  * to generate an RSS feed.
  7.  *
  8.  * It uses two stubs -- one for the main RSS file, and one for an RSS entry --
  9.  * and it merges data into the stubs.
  10.  *
  11.  * The method exhibited here is one of the more primitive ways of templating
  12.  * information. See the {@link techniques.php techniques} example for multiple
  13.  * methods of looping. An even more advanced method would be to use the
  14.  * {@link QPTPL} library.
  15.  *
  16.  * @package Examples
  17.  * @author M Butcher <matt@aleph-null.tv>
  18.  * @license LGPL The GNU Lesser GPL (LGPL) or an MIT-like license.
  19.  */
  20.  
  21. require_once '../src/QueryPath/QueryPath.php';
  22.  
  23. // This is the stub RSS document.
  24. $rss_stub ='<?xml version="1.0"?>
  25. <rss version="2.0" 
  26.   xmlns:dc="http://purl.org/dc/elements/1.1/">
  27.   <channel>
  28.    <title></title>
  29.    <link></link>
  30.    <description></description>
  31.    <language>en</language>
  32.    <generator>QueryPath</generator>
  33.    </channel>
  34. </rss>
  35. ';
  36.  
  37. // This is the stub RSS element.
  38. $rss_item_stub '<?xml version="1.0"?>
  39. <item>
  40.   <title>Untitled</title>
  41.   <link></link>
  42.   <description>
  43.   </description>
  44.   <comments></comments>
  45.   <category></category>
  46.   <pubDate></pubDate>
  47.   <guid isPermaLink="false"></guid>
  48. </item>';
  49.  
  50. // Here are some dummy items. For the same of 
  51. // simplicity, we are just using a nested array. Of
  52. // course, this could be a database lookup or whatever.
  53. $items = array(
  54.   array(
  55.     'title' => 'Item 1',
  56.     'link' => 'http://example.com/item1',
  57.     'description' => '<strong>This has embedded <em>HTML</em></strong>',
  58.     'comments' => 'http://example.com/item1/comments',
  59.     'category' => 'Some Term',
  60.     'pubDate' => date('r'),
  61.     'guid' => '123456-789',
  62.   ),
  63.   array(
  64.     'title' => 'Item 2',
  65.     'link' => 'http://example.com/item2',
  66.     'description' => '<strong>This has embedded <em>HTML</em></strong>',
  67.     'comments' => 'http://example.com/item2/comments',
  68.     'category' => 'Some Other Term',
  69.     'pubDate' => date('r'),
  70.     'guid' => '123456-790',
  71.   ),
  72. );
  73.  
  74. // The main QueryPath, which holds the channel.
  75. $qp qp($rss_stub'title')
  76.   ->text('A QueryPath RSS Feed')
  77.   ->next('link')->text('http://example.com')
  78.   ->next('description')->text('QueryPath: Find your way.')
  79.   ->parent();
  80.  
  81. // For each element in the array above, we create a new 
  82. // QueryPath and then populate the XML fragment with data.
  83. foreach ($items as $item{
  84.   
  85.   // Begin with the stub RSS item, with title currently selected.
  86.   $qpi qp($rss_item_stub'title')
  87.     // Add a title.
  88.     ->text($item['title']
  89.     // Add a link. Note that we are giving no args to next() for the
  90.     // sake of simplicity.
  91.     ->next()->text($item['link'])
  92.     // Go to next element and add a description. Note that the text()
  93.     // call will automatically encode HTML. < will become &lt; and so on.
  94.     ->next()->text($item['description'])
  95.     // Go on down the list...
  96.     ->next()->text($item['comments'])
  97.     ->next()->text($item['category'])
  98.     ->next()->text($item['pubDate'])
  99.     ->next()->text($item['guid']);
  100.     
  101.   // Now we append it.
  102.   $qp->append($qpi->top());
  103. }
  104.  
  105. // If we were running this on a server, we would need to set the content
  106. // type:
  107. // header('Content-Type: application/rss+xml');
  108.  
  109. // Write the outpt as XML.
  110. $qp->writeXML();
  111. ?>

Documentation generated on Sun, 25 Jul 2010 16:09:12 -0500 by phpDocumentor 1.4.3