Issues (146)

examples/rss.php (2 issues)

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
The method text() does not exist on QueryPath\Query. It seems like you code against a sub-type of QueryPath\Query such as QueryPath\DOMQuery. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

77
  ->next('link')->/** @scrutinizer ignore-call */ text('http://example.com')
Loading history...
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
?>
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.

Loading history...