Codeigniter Rss,网站map,路由配置

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

    在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'] = '1963612630@qq.com';
            $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:c 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/" versi
    <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[
    <br/><p style="text-align: center;"> <br/><img src='http://images.cnitblog.com/news/157064/201302/25203708-11fdfe8cd4f345078a2cc3fba5886a40.jpg' title='xiuxiandou.com' alt='xiuxiandou.com' target='_blank'/> <br/> </p><br/> <br/><p align="center">Qualys 创始人兼 CEO 菲利普`科尔图特</p><br/> <br/><p>  北京时间 2 月 25 日消息,据国外媒体报道,美国云计算安全公司…
    ]]>
    </description>
    <pubdate>2013-02-25 09:18:49</pubdate>
    <author>http://news.cnblogs.com/n/172129/</author>
    </item>
    ....

     3、网站地图     

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

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

    <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
              
    /**
     * A class for generating XML sitemaps
     *
     * @author Philipp Dörner <pd@signalkraft.com>
     * @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


来源:http://www.xiuxiandou.com/blog-34.html


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