| <?php |
| |
| #***************************************************************************** |
| # |
| # newstohtml.php |
| # |
| # Author: 15022010 |
| # Last updated: 2007-05-29 |
| # |
| # Description: Function to generate html from news.xml. Borrowed heavily from |
| # eclipse.org-common/rss.php. |
| # |
| # |
| #**************************************************************************** |
| |
| /* |
| * This function returns a String containing the HTML representing |
| * the contents of the file provided. Only the name of the file containing |
| * the news content and the title are required. |
| * |
| * $file_name - name of the file containing the news data. This |
| * file is specified in terms the operating system will understand |
| * (i.e. a file name, not a URL) |
| * |
| * $title - the title that will go on the header |
| * |
| * $rss_url - If provided, an "RSS" link will be rendered. When clicked |
| * the user will be sent to this URL. Use this to provide the user with |
| * a way to access the RSS file directly (so they can use it in their |
| * favourite news reader. Defaults to false meaning that no "RSS" link |
| * be rendered. |
| * |
| * $more_url - If provided, a "More" link will be rendered. When clicked |
| * the user will be sent to this URL. This is intended to be used to send |
| * the user to more information about the news feed. If you're displaying |
| * a 'short' format of the news, you might use this to provide a link to |
| * a 'long' format version of the same information. Defaults to "false" |
| * meaning that no "More" link will be rendered. |
| * |
| * $add_permalink - If provided, an href is generated. This intended to be a |
| * permanant link to the news item. Anchors of the form 'permalink<number>' |
| * are always generated in reverse order that the items are encountered. |
| * If $more_url is specified, the href will be of the form |
| * 'more_url#permalink<number>' and the more_url is assumed to be the page |
| * with the permanant copy of the same feed. Otherwise the link will be to |
| * the same page. |
| * |
| * $format - either 'long' or 'short'. Currently toggles whether |
| * or not the description is shown (shown only if set to 'long'). Defaults |
| * to 'long'. |
| * |
| * $count - the maximum number of entries displayed. Defaults to 1000. |
| * Note that no sorting is done; items are displayed as they occur in the |
| * file. |
| * |
| */ |
| |
| function news_to_html($file_name, $title, $rss_url=false, $more_url=false, $add_permalink=true, $format='long', $count=1000) { |
| |
| $xml = simplexml_load_file($file_name); |
| |
| if (!in_array($format, array ('short', 'long'))) { |
| $format = 'short'; |
| } |
| |
| //$html = "<h3>"; |
| $html = ""; |
| |
| // Add the RSS image on the right |
| if ($rss_url) { |
| $html .= "<a href=\"$rss_url\"><img src=\"/images/rss.gif\" align=\"right\" title=\"RSS Feed\" alt=\"[RSS]\" /></a>"; |
| } |
| |
| // Add the title of the channel |
| $html .= "$title"; |
| // If we're displaying short format, provide a link to |
| // show news in long format. |
| if ($more_url) |
| $html .= " <a href=\"$more_url\"><img src=\"/images/more.gif\" title=\"More...\" alt=\"[More]\" /></a>"; |
| |
| //$html .= "</h3>"; |
| |
| $html .= "<ul class=\"midlist\">"; |
| $item_count = count($xml->item); |
| |
| foreach ($xml->item as $item) { |
| if ($count == 0) break; |
| $html .= "<li>"; |
| // set up anchors and links. We go in reverse order of xml item feed. |
| $anchor = "permalink${item_count}"; |
| $permalink = "${more_url}#${anchor}"; |
| $html .= "<a name=\"$anchor\" />"; |
| if ($item['title']) { |
| $link = $item['link'] ? $item['link'] : $permalink; |
| $html .= "<a href=\"$link\" target=\"_blank\">" . $item['title'] . "</a>"; |
| $html .= " "; |
| } |
| // Get date in UTC. |
| $date = date("M d, Y", strtotime($item['date'] . "+00:00")); |
| $date = str_replace(" ", " ", $date); |
| $html .= "Posted $date"; |
| if ($add_permalink) { |
| $html .= " | <a href=\"$permalink\">Permalink</a>"; |
| } |
| if ($format == 'long') { |
| // Get item as xml and replace <item> tags with <p> leaving else untouched. |
| $item_xml = $item->asXML(); |
| $item_xml = preg_replace('/<item.*?>/', '<p>', $item_xml); |
| $item_xml = preg_replace('/<\/item>/', '</p>', $item_xml); |
| $html .= $item_xml; |
| } |
| $html .= "</li>"; |
| $count--; |
| $item_count--; |
| } |
| $html .= "</ul>"; |
| |
| return $html; |
| } |
| ?> |