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 | * |
||
17 | * @author M Butcher <[email protected]> |
||
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') |
||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
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 < 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 | ?> |
||
0 ignored issues
–
show
It is not recommended to use PHP's closing tag
?> in files other than templates.
Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore. A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever. ![]() |