Hi I have found some php code to provide the last x post on my vb forum via the "external.php" / RSS file It all works OK but I have a couple of questions: 1: How do I limit it to (say) 5 posts - it seems to pull everything at the moment 2: In the description it pulls the forum, the poster and a very long date - how can I split this field up so I just get the poster? Thanks <?php $_item = array(); $_depth = array(); $_tags = array("dummy"); function initArray() { global $_item; $_item = array ("TITLE"=>"", "LINK"=>"", "DESCRIPTION"=>"", "URL"=>""); } function startElement($parser, $name){ global $_depth, $_tags, $_item; if (($name=="ITEM") || ($name=="CHANNEL") || ($name=="IMAGE")) { initArray(); } @$_depth[$parser]++; array_push($_tags, $name); } function endElement($parser, $name){ global $_depth, $_tags, $_item; array_pop($_tags); $_depth[$parser]--; switch ($name) { case "ITEM": echo "<li><a href=\"{$_item['LINK']}\">" . "{$_item['TITLE']}</a><BR><BR>\n"; // {$_item['DESCRIPTION']}</li><BR><BR>\n"; initArray(); break; } } function parseData($parser, $text){ global $_depth, $_tags, $_item; $crap = preg_replace ("/\s/", " ", $text); /* is the data just whitespace? if so, we don't want it! */ if ($crap) { $text = preg_replace ("/^\s+/", " ", $text); /* get rid of leading whitespace */ if (@$_item[$_tags[$_depth[$parser]]]) { $_item[$_tags[$_depth[$parser]]] .= $text; } else { $_item[$_tags[$_depth[$parser]]] = $text; } } } function parseRDF($file){ global $_depth, $_tags, $_item; $xml_parser = xml_parser_create(); initArray(); /* Set up event handlers */ xml_set_element_handler ($xml_parser, "startElement", "endElement"); xml_set_character_data_handler ($xml_parser, "parseData"); /* Open up the file */ $fp = fopen ($file, "r") or die ("Could not open $file 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))); } } fclose($fp); xml_parser_free($xml_parser); } parseRDF ("http://www. mydomain/forums/external.php"); ?> Code (markup):
I can't help you with your question but here is a link to some other scripts that you might be able to work with.
Here you go. I found this at vbwebmasters.com In external.php find: WHERE 1=1 $forumchoice AND thread.visible = 1 AND open <> 10 AND deletionlog.primaryid IS NULL ORDER BY thread.dateline DESC LIMIT 15 PHP: Change 15 to the number of your choice.
Here's my code: I would recommend running this a few times a day and outputting it to a static html file. That way you don't run this query every time you load a page with the code included. <? $server = 'server'; $login = 'loginname'; $pass = 'dbpassword'; $dbname = 'databasename'; $forumdomain = 'http://forums.yourdomain.com'; $ext = 'php'; $results = '5'; $link = mysql_connect($server, $login, $pass) or die('Error with Forum ' . mysql_error()); mysql_select_db($dbname) or die('Could not select database'); // Performing SQL query $query = 'SELECT title, threadid' . ' FROM `thread` ' . ' ORDER BY lastpost DESC ' . ' LIMIT '.$results; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // Printing results in HTML echo "<h4>Discussion Topics</h4>\n"; echo "<ul>\n"; $alter = "odd"; while ($row = mysql_fetch_assoc($result)) { echo "<li class=\"".$alter."\"><a href=\"".$forumdomain."/showthread.".$ext."?t=".$row['threadid']."\" target=_NEW>".$row['title']."</a></li>"; if($alter == "odd") $alter = "even"; else $alter = "odd"; } echo "</ul>\n"; // Free resultset mysql_free_result($result); // Closing connection mysql_close($link); ?> PHP: