知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

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

发布时间:2015-05-27 19:29:17作者:知识屋

_ _,今天在成果不错,完成了网站的三个功能,RSS订阅,自动写网站地图,与路由的配置,好了,现在一 一记录下来.
 
 
 
 
一、路由配置
 
在未设定路由时,路径是这样的
 
 
[php] 
http://www.xiuxiandou.com/content/it/13533/硅谷传奇投资人讲述初创企业家易犯的4大错误   
                   
content =>controller,it=>method,13533=>id,硅谷传奇投资人讲述初创企业家易犯的4大错误=>title  
 
http://www.xiuxiandou.com/content/it/13533/硅谷传奇投资人讲述初创企业家易犯的4大错误
                 
content =>controller,it=>method,13533=>id,硅谷传奇投资人讲述初创企业家易犯的4大错误=>title
设置路由后,访问路径为:
 
 
 
[php] 
http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误  
 
http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误
其它的类似,路径配置为
 
 
 
[php] 
/*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";  
 
/*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]  
<?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(!emptyempty($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(!emptyempty($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;  
    }  
}  
 
<?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]  
<?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);  
    }  
}  
 
<?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);
    }
}
运行
 
 
 
[html]  
 
 
生成结果如下
 
 
 
[php]  
<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://up.2cto.com/2013/0301/20130301022546372.com/&' 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>  
....  
 
<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://up.2cto.com/2013/0301/20130301022546372.com/&' 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]  
<?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'] = emptyempty($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;  
    }  
}  
 
<?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(!emptyempty($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;        
    }  
}  
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜