jonahpup Posted December 27, 2007 Share Posted December 27, 2007 Hi there, I am wanting to use the existing code I have for displaying an RSS feed, however, I want to only display the last 3 items that were added to the feed on a particular page. I have it working so that it will display every item in the rss file at present, but dont know how to only show the last 3 items... ie: itemid=4, itemid=5 and itemid=6. here is my RSS xml code: <?xml version = "1.0"?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91"> <channel> <title>MANZ Torque Newsletters</title> <link>http://www.manz.org.nz</link> <description></description> <language>en-us</language> <item> <itemid>1</itemid> <title>March 2007</title> <link>http://www.domain.com/documents/March07.pdf</link> <description>Description... </description> </item> <item> <itemid>2</itemid> <title>June 2007</title> <link>http://www.domain.com/documents/June07.pdf</link> <description>Description... </description> </item> <item> <itemid>3</itemid> <title>September 2007</title> <link>http://www.domain.com/documents/September07.pdf</link> <description>This is the description for September 2007. </description> </item> <item> <itemid>4</itemid> <title>October 2007</title> <link>http://www.domain.com/documents/September07.pdf</link> <description>This is the description for October 2007. </description> </item> <item> <itemid>5</itemid> <title>November 2007</title> <link>http://www.domain.com/documents/September07.pdf</link> <description>This is the description for November 2007. </description> </item> <item> <itemid>6</itemid> <title>December 2007</title> <link>http://www.domain.com/documents/September07.pdf</link> <description>This is the description for December 2007. </description> </item> </channel> </rss> The code I am using to parse and display these items is: <?php class xItem { var $xTitle; var $xLink; var $xDescription; } // general vars $sTitle = ""; $sLink = ""; $sDescription = ""; $arItems = array(); $itemCount = 0; // ********* Start User-Defined Vars ************ // rss url goes here $uFile = "http://www.domain.com/newsletters.rss"; // descriptions (true or false) goes here $bDesc = true; // font goes here $uFont = "Verdana, Arial, Helvetica, sans-serif"; $uFontSize = "2"; // ********* End User-Defined Vars ************** function startElement($parser, $name, $attrs) { global $curTag; $curTag .= "^$name"; } function endElement($parser, $name) { global $curTag; $caret_pos = strrpos($curTag,'^'); $curTag = substr($curTag,0,$caret_pos); } function characterData($parser, $data) { global $curTag; // get the Channel information first global $sTitle, $sLink, $sDescription; $titleKey = "^RSS^CHANNEL^TITLE"; $linkKey = "^RSS^CHANNEL^LINK"; $descKey = "^RSS^CHANNEL^DESCRIPTION"; if ($curTag == $titleKey) { $sTitle = $data; } elseif ($curTag == $linkKey) { $sLink = $data; } elseif ($curTag == $descKey) { $sDescription = $data; } // now get the items global $arItems, $itemCount; $itemTitleKey = "^RSS^CHANNEL^ITEM^TITLE"; $itemLinkKey = "^RSS^CHANNEL^ITEM^LINK"; $itemDescKey = "^RSS^CHANNEL^ITEM^DESCRIPTION"; if ($curTag == $itemTitleKey) { // make new xItem $arItems[$itemCount] = new xItem(); // set new item object's properties $arItems[$itemCount]->xTitle = $data; } elseif ($curTag == $itemLinkKey) { $arItems[$itemCount]->xLink = $data; } elseif ($curTag == $itemDescKey) { $arItems[$itemCount]->xDescription = $data; // increment item counter $itemCount++; } } // main loop $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($uFile,"r"))) { die ("could not open RSS for input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); // write out the items ?> <table style="width: 80%; text-align: left;" align="center"> <?php for ($i=0;$i<count($arItems);$i++) { $txItem = $arItems[$i]; ?> <tr> <td><span style="font-size: large; font-weight: bold"><a href = "<?php echo($txItem->xLink); ?>"> <?php echo($txItem->xTitle); ?></a></span><br /> <?php echo($txItem->xDescription); ?><br /> </td> </tr> <?php } ?> </table> What do I need to alter, to tell it to only show the last 3 posts?? ie: if there are 25 posts, it will only show itemid=23, itemid=24, itemid=25... if there are 9 posts it will show itemid=7, itemid=8, itemid=9 etc... so as posts are added to the feed and the itemid increases it still only shows the last 3?? Can anyone help?? Thanks in advance... Chris Link to comment https://forums.phpfreaks.com/topic/83301-display-rss-feed/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.