Codeigniter Rss,网站地图,路由配置

 _ _,今天在成果不错,完成了网站的三个功能,RSS订阅,自动写网站地图,与路由的配置,好了,现在一 一记录下来.


一、路由配置

在未设定路由时,路径是这样的

http://www.xiuxiandou.com/content/it/13533/硅谷传奇投资人讲述初创企业家易犯的4大错误
              
content =>controller,it=>method,13533=>id,硅谷传奇投资人讲述初创企业家易犯的4大错误=>title
设置路由后,访问路径为:


http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误
其它的类似,路径配置为


/*sitemap使用*/
$route['content-(:any)-(:num)'] = "content/$1/$2";
/*前台页面显示路由*/
$route['content-(:any)-(:num)-(:any)'] = "content/$1/$2/$3";
             
/*RSS订阅路由*/
$route['feed-rss-(:any)'] = "feed/rss/$1";
/*博客路由*/
$route['blog-(:num)-(:any)'] = "blog/blogview/$1/$2";
$route['blog-blogtypes-(:any)']="blog/blogtypes/$1";
             
/**留言**/
$route['me'] = "indexs/me";
/**模板**/
$route["template"]="indexs/template";
/**今日更新**/
$route["indexs-(:any)"]="indexs/$1";

二、RSS

  1.      在libraries目录下创建Rss.php文件,主要负责生成RSS格式的数据内容

<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Rss
 */
class Rss{
                 
    public function write_rss($in_datas){
            $CI=& get_instance();
            $CI->load->helper('xml');
            $CI->load->helper('text');
             
            $xml_str="<?xml version='1.0' encoding='UTF-8'?>"
                    ."<rss version='2.0' xmlns:content='http://purl.org/rss/1.0/modules/content/'  xmlns:wfw='http://wellformedweb.org/CommentAPI/' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:sy='http://purl.org/rss/1.0/modules/syndication/'    xmlns:slash='http://purl.org/rss/1.0/modules/slash/'    >";
            if(!empty($in_datas)){
                    $xml_str.="<channel>"
                                ."<title>".$in_datas["feed_name"]."</title>"
                                ."<atom:link href='".$in_datas["feed_url"]."' rel='self' type='application/rss+xml' />"
                                ."<link>".$in_datas["feed_url"]."</link>"
                                ."<description>".$in_datas["page_description"]."</description>"
                                ."<language>zh-cn</language> "
                                ."<sy:updateFrequency>1</sy:updateFrequency>"
                                ."<sy:updatePeriod>hourly</sy:updatePeriod> "
                                ."<dc:rights>Copyright (C) Xiuxiandou.com. All rights reserved.</dc:rights>"
                                ."<generator>http://www.xiuxiandou.com</generator>";
                                if(!empty($in_datas["xml_datas"])){
                                    foreach($in_datas["xml_datas"] as $k => $v){
                                        foreach($v as $xml){
                                            $xml_str.=" <item>"
                                                    ."<title><![CDATA[ ".xml_convert($xml->subject)."]]> </title>"
                                                    ."<link>".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject)))."</link>"
                                                    ."<guid>".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject)))."</guid>"
                                                    ."<description><![CDATA[".character_limiter(xml_convert($xml->message, 600))."]]></description>"
                                                    ."<pubdate>".date('Y-m-d h:i:s',$xml->dateline)."</pubdate>  "
                                                    ."<author>$xml->url</author>"
                                                    ."</item>";
                                        }
                                    }
                                }
                    $xml_str.="</channel>";
                            
            }
            $xml_str.="</rss>";
           return $xml_str;
    }
}

2、RSS控制类

<?php
if(!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 2013-2-25:RSS订阅
 */
class Feed  extends CI_Controller{
    public function index(){
        $it=$this->mcom_model->query_Bywhere(mymsg::BT_ITINFO,array("riqi"=>$this->mytool->get_ymd()));
        $game=$this->mcom_model->query_Bywhere(mymsg::BT_GAME,array("riqi"=>$this->mytool->get_ymd()));
        $blog=$this->mcom_model->query_Bywhere(mymsg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd()));
        $movie=$this->mcom_model->query_Bywhere(mymsg::BT_MOVIE,array("riqi"=>$this->mytool->get_ymd()));
        $book=$this->mcom_model->query_Bywhere(mymsg::BT_BOOK,array("riqi"=>$this->mytool->get_ymd()));
        $in_datas["xml_datas"]=array("it"=>$it,"game"=>$game,"blog"=>$blog,"movie"=>$movie,"book"=>$book);
        $this->_comm($in_datas);
    }
    public function rss(){
       $this->load->helper('xml');
       $this->load->helper('text');
       $key= $this->uri->segment(3);
       $db_table= $key=="it"?"bt_itinfo":"bt_$key";
       $table_exist=$this->mcom_model->table_exists($db_table);
       if($table_exist){
          $in_datas["xml_datas"]=array($key=>$this->mcom_model->query_Bywhere($db_table,array("riqi"=>$this->mytool->get_ymd())));
          $this->_comm($in_datas);
       }else{
         show_404();
       }
    }
                 
    private function _comm($in_datas){
        $in_datas['feed_name'] = "休闲豆 RSS";  
        $in_datas['feed_url'] = base_url()."free";  
        $in_datas['page_description'] = '休闲豆,IT资讯,IT电子书,游戏种子,电影BT RSS';  
        $in_datas['creator_email'] = '[email protected]'; 
        $in_datas['page_language']="zh-zn"; 
        $out_datas["xml"]=$this->rss->write_rss($in_datas);
        header("Content-Type: text/xml");
        $this->load->view("rss",$out_datas);
    }
}
运行

http://www.xiuxiandou.com/feed
生成结果如下

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
<channel>
<title>休闲豆 RSS</title>
<atom:link href="http://www.xiuxiandou.com/free" rel="self" type="application/rss+xml"/>
<link>http://www.xiuxiandou.com/free</link>
<description>休闲豆,IT资讯,IT电子书,游戏种子,电影BT RSS</description>
<language>zh-cn</language>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updatePeriod>hourly</sy:updatePeriod>
<dc:rights>Copyright (C) Xiuxiandou.com. All rights reserved.</dc:rights>
<generator>http://www.xiuxiandou.com</generator>
<item>
<title>
<![CDATA[ 硅谷传奇投资人讲述初创企业家易犯的4大错误 ]]>
</title>
<link>
http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误
</link>
<guid>
http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误
</guid>
<description>
<![CDATA[
&lt;br/&gt;&lt;p style=&quot;text&#45;align: center;&quot;&gt; &lt;br/&gt;&lt;img src=&apos;http://images.cnitblog.com/news/157064/201302/25203708&#45;11fdfe8cd4f345078a2cc3fba5886a40.jpg&apos; title=&apos;xiuxiandou.com&apos; alt=&apos;xiuxiandou.com&apos; target=&apos;_blank&apos;/&gt; &lt;br/&gt; &lt;/p&gt;&lt;br/&gt; &lt;br/&gt;&lt;p align=&quot;center&quot;&gt;Qualys 创始人兼 CEO 菲利普`科尔图特&lt;/p&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;  北京时间 2 月 25 日消息,据国外媒体报道,美国云计算安全公司&#8230;
]]>
</description>
<pubdate>2013-02-25 09:18:49</pubdate>
<author>http://news.cnblogs.com/n/172129/</author>
</item>
....

三、网站地图

       网站地图主要根据sitemaps.xml协议拼写的XML,协议地址:http://www.sitemaps.org/protocol.html

       在网站上找到一个封装sitemaps的类,地址为:http://signalkraft.com/google-sitemaps-for-codeigniter

       1、加载libraries目录下的sitemaps.php类,内容如下

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
       
/**
 * A class for generating XML sitemaps
 *
 * @author Philipp Dörner <[email protected]>
 * @version 0.7
 * @access public
 * @package sitemaps
 */
class Sitemaps
{
    var $items = array();
       
    function Sitemaps()
    {
        $CI =& get_instance();
               
        $CI->config->load('sitemaps');
    }
       
    /**
     * Adds a new item to the urlset
     *
     * @param array $new_item
     * @access public
     */
    function add_item($new_item)
    {
        $this->items[] = $new_item;
    }
       
    /**
     * Adds an array of items to the urlset
     *
     * @param array $new_items array of items
     * @access public
     */
    function add_item_array($new_items)
    {
        $this->items = array_merge($this->items, $new_items);
    }
       
    /**
     * Generates the sitemap XML data
     *
     * @param string $file_name (optional) if file name is supplied the XML data is saved in it otherwise returned as a string
     * @param bool $gzip (optional) compress sitemap, overwrites config item 'sitemaps_gzip'
     * @access public
     * @return string
     */
    function build($file_name = null, $gzip = NULL)
    {
        $CI =& get_instance();
        $map = $CI->config->item('sitemaps_header') . "\n";
       
        foreach($this->items as $item)
        {
            $item['loc'] = htmlentities($item['loc'], ENT_QUOTES);
            $map .= "\t<url>\n\t\t<loc>" . $item['loc'] . "</loc>\n";
       
            $attributes = array("lastmod", "changefreq", "priority");
       
            foreach($attributes AS $attr)
            {
                if(isset($item[$attr]))
                {
                    $map .= "\t\t<$attr>" . $item[$attr] . "</$attr>\n";
                }
            }
       
            $map .= "\t</url>\n\n";
        }
       
        unset($this->items);
       
        $map .= $CI->config->item('sitemaps_footer');
       
        if( ! is_null($file_name))
        {
            $fh = fopen($file_name, 'a');//w
            fwrite($fh, $map);
            fclose($fh);
       
            if($CI->config->item('sitemaps_filesize_error') && filesize($file_name) > 1024 * 1024 * 30)
            {
                show_error('Your sitemap is bigger than 10MB, most search engines will not accept it.');
            }
       
            if($gzip OR (is_null($gzip) && $CI->config->item('sitemaps_gzip')))
            {
                $gzdata = gzencode($map, 9);
                $file_gzip = str_replace("{file_name}", $file_name, $CI->config->item('sitemaps_gzip_path'));
                $fp = fopen($file_gzip, "a");//w
                fwrite($fp, $gzdata);
                fclose($fp);
       
                // Delete the uncompressed sitemap
                unlink($file_name);
       
                return $file_gzip;
            }
       
            return $file_name;
        }
        else
        {
            return $map;
        }
    }
       
    /**
     * Generate a sitemap index file pointing to other sitemaps you previously built
     *
     * @param array $urls array of urls, each being an array with at least a loc index
     * @param string $file_name (optional) if file name is supplied the XML data is saved in it otherwise returned as a string
     * @param bool $gzip (optional) compress sitemap, overwrites config item 'sitemaps_gzip'
     * @access public
     * @return string
     */
    function build_index($urls, $file_name = null, $gzip = null)
    {
        $CI =& get_instance();
        $index = $CI->config->item('sitemaps_index_header') . "\n";
       
        foreach($urls as $url)
        {
            $url['loc'] = htmlentities($url['loc'], ENT_QUOTES);
            $index .= "\t<sitemap>\n\t\t<loc>" . $url['loc'] . "</loc>\n";
       
            if(isset($url['lastmod']))
            {
                $index .= "\t\t<lastmod>" . $url['lastmod'] . "</lastmod>\n";
            }
       
            $index .= "\t</sitemap>\n\n";
        }
       
        $index .= $CI->config->item('sitemaps_index_footer');
       
        if( ! is_null($file_name))
        {
            $fh = fopen($file_name, 'w');
            fwrite($fh, $index);
            fclose($fh);
       
            if($CI->config->item('sitemaps_filesize_error') && filesize($file_name) > 1024 * 1024 * 10)
            {
                show_error('Your sitemap index is bigger than 10MB, most search engines will not accept it.');
            }
       
            if($gzip OR (is_null($gzip) && $CI->config->item('sitemaps_index_gzip')))
            {
                $gzdata = gzencode($index, 9);
                $file_gzip = str_replace("{file_name}", $file_name, $CI->config->item('sitemaps_index_gzip_path'));
                $fp = fopen($file_gzip, "w");
                fwrite($fp, $gzdata);
                fclose($fp);
       
                // Delete the uncompressed sitemap index
                unlink($file_name);
       
                return $file_gzip;
            }
       
            return $file_name;
        }
        else
        {
            return $index;
        }
    }
       
    /**
     * Notify search engines of your updates sitemap
     *
     * @param string $url_xml absolute URL of your sitemap, use Codeigniter's site_url()
     * @param array $search_engines array of search engines to ping, see config file for notes
     * @access public
     * @return array HTTP reponse codes
     */
    function ping($url_xml, $search_engines = NULL)
    {
        $CI =& get_instance();
       
        if(is_null($search_engines))
        {
            $search_engines = $CI->config->item('sitemaps_search_engines');
        }
       
        $statuses = array();
       
        foreach($search_engines AS $engine)
        {
            $status = 0;
            if($fp = @fsockopen($engine['host'], 80))
            {
                $engine['url'] = empty($engine['url']) ? "/ping?sitemap=" : $engine['url'];
       
                $req =  'GET ' . $engine['url'] .
                        urlencode($url_xml) . " HTTP/1.1\r\n" .
                        "Host: " . $engine['host'] . "\r\n" .
                        $CI->config->item('sitemaps_user_agent') .
                        "Connection: Close\r\n\r\n";
                fwrite($fp, $req);
                while( ! feof($fp))
                {
                    if(@preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m))
                    {
                        $status = intval($m[1]);
                        break;
                    }
                }
                fclose($fp);
            }
       
            $statuses[] = array("host" => $engine['host'], "status" => $status, "request" => $req);
        }
       
        if($CI->config->item('sitemaps_log_http_responses') OR $CI->config->item('sitemaps_debug'))
        {
            foreach($statuses AS $reponse)
            {
                $message = "Sitemaps: " . $reponse['host'] . " responded with HTTP status " . $reponse['status'];
       
                if($CI->config->item('sitemaps_log_http_responses'))
                {
                    $level = $reponse['status'] == 200 ? 'debug' : 'error';
                    log_message($level, $message);
                }
       
                if($CI->config->item('sitemaps_debug'))
                {
                    echo "<p>" . $message . " after request:</p>\n<pre>" . $reponse['request'] .  "</pre>\n\n";
                }
            }
        }
       
        return $statuses;
    }
}
 2、sitemap.php控制类,注意这里不要与libraries中的sitemaps.php同名,不然会报错的.

<?php
if(!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 2013-2-25:网站地图
 */
class Sitemap  extends CI_Controller{
          
    public function index(){
        $file_name =$this->write_xml();
        redirect(site_url($file_name));
    }
    public function write_xml(){
        $it=$this->mcom_model->query_Bywhere(mymsg::BT_ITINFO,array("riqi"=>$this->mytool->get_ymd()));
        $game=$this->mcom_model->query_Bywhere(mymsg::BT_GAME,array("riqi"=>$this->mytool->get_ymd()));
        $blog=$this->mcom_model->query_Bywhere(mymsg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd()));
        $movie=$this->mcom_model->query_Bywhere(mymsg::BT_MOVIE,array("riqi"=>$this->mytool->get_ymd()));
        $book=$this->mcom_model->query_Bywhere(mymsg::BT_BOOK,array("riqi"=>$this->mytool->get_ymd()));
        $in_datas["xml_datas"]=array("it"=>$it,"game"=>$game,"blog"=>$blog,"movie"=>$movie,"book"=>$book);
        $file_name="sitemap.xml";
        if(!empty($in_datas["xml_datas"])){
            foreach($in_datas["xml_datas"] as $k => $v){
                foreach($v as $xml){
                    $item = array(
                        "loc" => site_url("content-$k-$xml->id"),
                        "lastmod" => date('Y-m-d',$xml->dateline),
                        "changefreq" => "hourly",
                        "priority" => "0.8"
                    );
                    $this->sitemaps->add_item($item);
                }
                      
            }
            $file_name = $this->sitemaps->build("sitemap.xml");
        } 
        return $file_name;       
    }
}
3、运行地址

http://www.xiuxiandou.com/sitemap




-----------广告区

休闲豆,IT资讯,IT新闻资讯,电影BT下载,高清电影下载,电影下载,单机游戏下载,游戏下载,电子书下载,电子书PDF下载


你可能感兴趣的:(CodeIgniter,rss,网站地图,路由配置)