我在 http://www.phpbb.de/viewtopic.php?t=8036 找到一個 MOD
但新版只適用於 phpBB 2.0.4 以上
還好作者有保留舊版的 source
http://www.phpbb.de/rdf.phps
再修改一下就可以配合討論區的 UTF-8 了
拜託囉
下面程式碼,已經改好ㄌ,可以直接使用..
- 代碼: 選擇全部
<?php
/***************************************************************************
* rdf.php
* -------------------
* begin : Saturday, Mar 2, 2002
* copyright : (C) 2002 Matthijs van de Water
* Sascha Carlin
* email : matthijs@beryllium.net
* sc@itst.org
*
* $Id: rdf.php,v 1.2 2002/04/15 13:15:01 mvdwater Exp $
*
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
/***************************************************************************
*
* PHPBB 2.0 RDF CONTENT SYNDICATOR
* Shows last active topics RDF XML form
*
***************************************************************************
*
* Put this file in your phpBB2 directory.
* You can call this script without parameters, what will
* result in an RDF with the 10 latest posts from all your forums.
* You can specify the number of posts via the url parameter count:
*
* http://www.domain.com/phpBB2/rdf.php?count=50
*
* This will result in an RDF file with the latest 50 posts from
* all your forums.
*
* You can also specify to look only at a specified forum using the
* fid parameter:
*
* http://www.domain.com/phpBB2/rdf.php?fid=9
*
* This will result in an RDF file with the latest 10 posts from
* your forum with the id 9.
*
* You can also mix the paramters:
*
* http://www.domain.com/phpBB2/rdf.php?fid=5&count=3
*
* will show you the latest 3 posts from forum 5.
*
* THIS SCRIPT WILL ONLY SHOW POSTS FROM PUBLIC FORUMS
*
***************************************************************************/
// XML and nocaching headers
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
header ('Expires: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
header ('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header ('Content-Type: text/xml');
// Includes of phpBB scripts
define ('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
// If not set, set the output count to 10
$count = ( !isset($HTTP_GET_VARS['count']) ) ? 10 : intval($HTTP_GET_VARS['count']);
$count = ( $count == 0 ) ? 10 : $count;
// Zeichen
$chars = ( isset($HTTP_GET_VARS['chars']) ) ? intval($HTTP_GET_VARS['chars']) : 200;
if($chars<0 || $chars>500) $chars=500; //Maximum
$type = ( isset($HTTP_GET_VARS['type']) ) ? $HTTP_GET_VARS['type'] : 'latest';
$news = ( $type == 'news' );
// Create main board url (some code borrowed from functions_post.php)
$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
$viewtopic = ( $script_name != '' ) ? $script_name . '/viewtopic.' . $phpEx : 'viewtopic.'. $phpEx;
$index = ( $script_name != '' ) ? $script_name . '/index.' . $phpEx : 'index.'. $phpEx;
$server_name = trim($board_config['server_name']);
$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';
$index_url = $server_protocol . $server_name . $server_port . $index;
$viewtopic_url = $server_protocol . $server_name . $server_port . $viewtopic;
$rdf = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns=\"http://my.netscape.com/rdf/simple/0.9/\">
<channel>
<title>" . $board_config['sitename'] . " Forum</title>
<link>" . $index_url . "</link>
<description>" . $board_config['site_desc'] . "</description>
</channel>
";
$fid = ( isset($HTTP_GET_VARS['fid']) ) ? $HTTP_GET_VARS['fid'] : array();
if(!is_array($fid)) $fid = array($fid);
$fid_new = array();
for($i=0; $i<sizeof($fid); $i++)
{
if(intval($fid[$i]) > 0)
{
if(!in_array($fid[$i], $fid_new))
{
$fid_new[] = $fid[$i];
}
}
}
$fid = $fid_new;
$sql_where = ( sizeof($fid)>0 ) ? " AND f.forum_id IN (" . implode($fid, ", ") . ")" : " ";
$sql_orderby = $news ? 't.topic_time DESC' : 'p.post_time DESC';
$sql_post_id_field = $news ? 't.topic_first_post_id' : 't.topic_last_post_id';
// SQL statement to fetch active topics of public forums
$sql = "SELECT DISTINCT t.topic_id, t.topic_title, p.post_id, p.post_time, pt.post_text, pt.bbcode_uid, f.forum_name
FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . POSTS_TEXT_TABLE . " AS pt, " . FORUMS_TABLE . " AS f
WHERE
t.forum_id = f.forum_id
AND f.auth_view = " . AUTH_ALL . "
AND p.topic_id = t.topic_id
AND p.post_id = $sql_post_id_field
AND pt.post_id = p.post_id
$sql_where
ORDER BY $sql_orderby LIMIT $count";
$topics_query = $db->sql_query($sql);
//die($sql);
if ( !$topics_query )
{
die("Failed obtaining list of active topics");
}
else
{
$topics = $db->sql_fetchrowset($topics_query);
}
if ( count($topics) == 0 )
{
die("No topics found");
}
else
{
// $topics contains all interesting data
for ($i = 0; $i < count($topics); $i++)
{
if(isset($HTTP_GET_VARS['titlepattern']))
{
$title = $HTTP_GET_VARS['titlepattern'];
$title = str_replace('__DATE__', date("d.m.Y H:i", $topics[$i]['post_time']), $title);
$title = str_replace('__TITLE__', $topics[$i]['topic_title'], $title);
$title = str_replace('__FORUM__', $topics[$i]['forum_name'], $title);
}
else
{
$title = $topics[$i]['topic_title'];
}
//$title = "[" . date("d.m.Y H:i", $topics[$i]['post_time']) . "|" . $topics[$i]['forum_name'] . "] " . $topics[$i]['topic_title'];
$url = ($news) ? $viewtopic_url . "?" . POST_TOPIC_URL . "=" . $topics[$i]['topic_id'] : $viewtopic_url . "?" . POST_POST_URL . "=" . $topics[$i]['post_id'] . "#" . $topics[$i]['post_id'];
$message = $topics[$i]['post_text'];
$bbcode_uid = $topics[$i]['bbcode_uid'];
$message = strip_tags($message);
$message = preg_replace("/\[.*?:$bbcode_uid:?.*?\]/si", '', $message);
$message = preg_replace('/\[url\]|\[\/url\]/si', '', $message);
if($chars > 0) {
$message = ( strlen($message) > $chars ) ? substr($message, 0, ($chars - 4)) . ' ...' : $message;
}
$rdf .= "
<item>
<title>" . $title . "</title>
<link>" . $url . "</link>";
// <pubDate>" . date('r', $topics[$i]['post_time']) . "</pubDate>";
if($chars != 0 && strlen($message)>0) $rdf .= "
<description>" . $message . "</description>";
$rdf.="
</item>
";
}
}
// Create RDF footer
$rdf .= "
</rdf:RDF>";
// Output the RDF
echo $rdf;
?>