简单生活
返回文章列表
715 字4 分钟

PHP168 的 RSS 优化

设计开发#PHP168

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、在大分类中无法正常输出

还没有仔细研究,日后会给出合理解决方案。

历史留言归档

2
静态只读归档
1
123
博主:你好!我按照你文章中写的进行了修改和设置,怎么首页上没有一点变化啊,找不到切入rss的任何信息。迷惑中,请帮我解答,谢谢!
C
crusher
rss 在seo方便怎么应用呀<br/>