715 字4 分钟
PHP168 的 RSS 优化
RSS 目前还只能算是小众应用,随着 QQ 邮箱、QZone 阅读空间的推出,相信 RSS 订阅会被更多人接受并使用。在 Blog 程序中对 RSS 的依赖要大于 CMS 程序,RSS 订阅数量也作为 blogger 们衡量自己 blog 好坏的一个标准,CMS 程序一般对此没有过多的追求。
在 PHP168 中,开启了全站静态的情况下,RSS 输出中的地址仍然是动态地址。默认的模板中是没有加入 RSS 订阅的代码的,可能很多新手甚至不知道 PHP168 有 RSS 输出的功能。
本文将就以上问题对 PHP168 进行一些简单合理的优化。
1、在 PHP168 模板中加入 RSS 订阅的代码
打开 head.htm 模板,在 <head></head> 之间加入以下代码:
<link rel="alternate" type="application/rss+xml" title="RSS" href="$webdb[www_url]/do/rss.php?fid=$fid" />2、修改源文件达到输出静态 URL 的目的
打开 do/rss.php,找到 66 行至 74 行:
$erp = $Fid_db[iftable][$fid];$query = $db->query("SELECT * FROM {$pre}article$erp WHERE fid='$fid' AND yz=1 ORDER BY aid DESC LIMIT 30");while ($rs = $db->fetch_array($query)) { $rs[posttime] = date("r", $rs[posttime]);
print<<<EOT<item> <title><![CDATA[{$rs[title]}]]></title> <description><![CDATA[{$rs[description]}]]></description> <link><![CDATA[{$webdb[www_url]}$webdb[path]/bencandy.php?fid={$rs[fid]}&id={$rs[aid]}]]></link>修改为:
$erp = $Fid_db[iftable][$fid];$query = $db->query("SELECT * FROM {$pre}article$erp WHERE fid='$fid' AND yz=1 ORDER BY aid DESC LIMIT 30");while ($rs = $db->fetch_array($query)) { $rs[posttime] = date("r", $rs[posttime]);
if ($webdb[NewsMakeHtml] == 1) { global $rsdb, $aid, $fidDB, $fid, $page; $rsdb = $rs; $aid = $rs[aid]; $fid = $rs[fid]; $page = 1; $fidDB = $db->get_one("SELECT * FROM {$pre}sort WHERE fid='$rs[fid]'"); $array = get_html_url(); $showurl = $array[showurl]; } else { $showurl = replace_url("$webdb[www_url]$webdb[path]/bencandy.php?fid={$rs[fid]}&id={$rs[aid]}"); }
$_fiddb[$fid]++;
print<<<EOT<item> <title><![CDATA[{$rs[title]}]]></title> <description><![CDATA[{$rs[description]}]]></description> <link><![CDATA[{$showurl}]]></link>关于静态地址的获得参考了 admin/googlemap.php。
3、首页输出全站内容
在首页 fid 为 0,这时输出网站的栏目目录,而不是全站内容,这是绝对影响用户体验的。
还是打开 do/rss.php,27 行至 37 行:
$query = $db->query("SELECT * FROM {$pre}sort WHERE fup=0");while ($rs = $db->fetch_array($query)) {
print<<<EOT<item> <title><![CDATA[{$rs[name]}]]></title> <description><![CDATA[]]></description> <link><![CDATA[{$webdb[www_url]}{$webdb[path]}/list.php?fid={$rs[fid]}]]></link> <author><![CDATA[{$rs[admin]}]]></author> <category><![CDATA[{$rs[descrip]}]]></category> <pubdate><![CDATA[{$time}]]></pubdate>修改为:
$query = $db->query("SELECT * FROM {$pre}article WHERE yz=1 ORDER BY aid DESC LIMIT 30");while ($rs = $db->fetch_array($query)) { $rs[posttime] = date("r", $rs[posttime]);
if ($webdb[NewsMakeHtml] == 1) { global $rsdb, $aid, $fidDB, $fid, $page; $rsdb = $rs; $aid = $rs[aid]; $fid = $rs[fid]; $page = 1; $fidDB = $db->get_one("SELECT * FROM {$pre}sort WHERE fid='$rs[fid]'"); $array = get_html_url2(); $showurl = $array[showurl]; } else { $showurl = replace_url("$webdb[www_url]$webdb[path]/bencandy.php?fid={$rs[fid]}&id={$rs[aid]}"); }
print<<<EOT<item> <title><![CDATA[{$rs[title]}]]></title> <description><![CDATA[{$rs[description]}]]></description> <link><![CDATA[{$showurl}]]></link> <author><![CDATA[{$rsdb[username]}]]></author> <category><![CDATA[{$rsdb[keywords]}]]></category> <pubdate><![CDATA[{$rs[posttime]}]]></pubdate>4、在大分类中无法正常输出
还没有仔细研究,日后会给出合理解决方案。