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>之间加入以下代码

  1. <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行

  1.     $erp=$Fid_db[iftable][$fid];
  2.     $query = $db->query(“SELECT * FROM {$pre}article$erp WHERE fid=’$fid’ AND yz=1 ORDER BY aid DESC LIMIT 30”);
  3.     while($rs = $db->fetch_array($query)){
  4.         $rs[posttime]=date(“r”,$rs[posttime]);
  5. print<<<EOT
  6. <item>
  7.  <title><![CDATA[{$rs[title]}]]></title>
  8.  <description><![CDATA[{$rs[description]}]]></description>
  9.  <link><![CDATA[{$webdb[www_url]}$webdb[path]/bencandy.php?fid={$rs[fid]}&id={$rs[aid]}]]></link>

修改为

  1.     $erp=$Fid_db[iftable][$fid];
  2.     $query = $db->query(“SELECT * FROM {$pre}article$erp WHERE fid=’$fid’ AND yz=1 ORDER BY aid DESC LIMIT 30”);
  3.     while($rs = $db->fetch_array($query)){
  4.         $rs[posttime]=date(“r”,$rs[posttime]);
  5.         if($webdb[NewsMakeHtml]==1){
  6.             global $rsdb,$aid,$fidDB,$fid,$page;
  7.             $rsdb = $rs;
  8.             $aid  = $rs[aid];
  9.             $fid  = $rs[fid];
  10.             $page = 1;
  11.             $fidDB$db->get_one(“SELECT * FROM {$pre}sort WHERE fid=’$rs[fid]'”);
  12.             $array= get_html_url();
  13.             $showurl  = $array[showurl];
  14.         }else{
  15.             $showurl = replace_url(“$webdb[www_url]$webdb[path]/bencandy.php?fid={$rs[fid]}&id={$rs[aid]}” span>);  
  16.         }
  17.         $_fiddb[$fid]++;
  18. print<<<EOT
  19. <item>
  20.  <title><![CDATA[{$rs[title]}]]></title>
  21.  <description><![CDATA[{$rs[description]}]]></description>
  22.  <link><![CDATA[{$showurl}]]></link>

关于静态地址的获得参考了 admin/googlemap.php

3、首页输出全站内容

在首页fid为0,这时输出网站的栏目目录,而不是全站内容,这是绝对影响用户体验的。

还是打开do/rss.php,27行至37行

  1.     $query = $db->query(“SELECT * FROM {$pre}sort WHERE fup=0”);
  2.     while($rs = $db->fetch_array($query)){
  3. print<<<EOT
  4. <item>
  5.  <title><![CDATA[{$rs[name]}]]></title>
  6.  <description><![CDATA[]]></description>
  7.  <link><![CDATA[{$webdb[www_url]}{$webdb[path]}/list.php?fid={$rs[fid]}]]></link>
  8.  <author><![CDATA[{$rs[admin]}]]></author>
  9.  <category><![CDATA[{$rs[descrip]}]]></category>
  10.  <pubdate><![CDATA[{$time}]]></pubdate>

修改为

  1.     $query = $db->query(“SELECT * FROM {$pre}article WHERE yz=1 ORDER BY aid DESC LIMIT 30”);
  2.     while($rs = $db->fetch_array($query)){
  3.         $rs[posttime]=date(“r”,$rs[posttime]);
  4.         if($webdb[NewsMakeHtml]==1){
  5.             global $rsdb,$aid,$fidDB,$fid,$page;
  6.             $rsdb = $rs;
  7.             $aid  = $rs[aid];
  8.             $fid  = $rs[fid];
  9.             $page = 1;
  10.             $fidDB$db->get_one(“SELECT * FROM {$pre}sort WHERE fid=’$rs[fid]'”);
  11.             $array= get_html_url2();
  12.             $showurl  = $array[showurl];
  13.         }else{
  14.             $showurl = replace_url(“$webdb[www_url]$webdb[path]/bencandy.php?fid={$rs[fid]}&id={$rs[aid]}”);
  15.         }
  16. print<<<EOT
  17. <item>
  18.  <title><![CDATA[{$rs[title]}]]></title>
  19.  <description><![CDATA[{$rs[description]}]]></description>
  20.  <link><![CDATA[{$showurl}]]></link>
  21.  <author><![CDATA[{$rsdb[username]}]]></author>
  22.  &lt
    ;category><![CDATA[{$rsdb[keywords]}]]></category>
  23.  <pubdate><![CDATA[{$rs[posttime]}]]></pubdate>

4、在大分类中无法正常输出

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

2 thoughts to “PHP168 的 RSS 优化”

  1. 博主:你好!我按照你文章中写的进行了修改和设置,怎么首页上没有一点变化啊,找不到切入rss的任何信息。迷惑中,请帮我解答,谢谢!

回复 123 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注