欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2022-06-08 13:48:10
...
_ _,今天在成果不错,完成了网站的三个功能,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]

/**

* Rss

*/

class Rss{

public function write_rss($in_datas){

$CI=& get_instance();

$CI->load->helper('xml');

$CI->load->helper('text');

$xml_str=""

."";

if(!emptyempty($in_datas)){

$xml_str.=""

."

".$in_datas["feed_name"].""

.""

."".$in_datas["feed_url"].""

."".$in_datas["page_description"].""

."zh-cn "

."1"

."hourly "

."Copyright (C) Xiuxiandou.com. All rights reserved."

."http://www.xiuxiandou.com";

if(!emptyempty($in_datas["xml_datas"])){

foreach($in_datas["xml_datas"] as $k => $v){

foreach($v as $xml){

$xml_str.=" "

."

subject)."]]> "

."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject))).""

."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject))).""

."message, 600))."]]>"

."".date('Y-m-d h:i:s',$xml->dateline)." "

."$xml->url"

."";

}

}

}

$xml_str.="";

}

$xml_str.="";

return $xml_str;

}

}

/**

* Rss

*/

class Rss{

public function write_rss($in_datas){

$CI=& get_instance();

$CI->load->helper('xml');

$CI->load->helper('text');

$xml_str=""

."";

if(!empty($in_datas)){

$xml_str.=""

."

".$in_datas["feed_name"].""

.""

."".$in_datas["feed_url"].""

."".$in_datas["page_description"].""

."zh-cn "

."1"

."hourly "

."Copyright (C) Xiuxiandou.com. All rights reserved."

."http://www.xiuxiandou.com";

if(!empty($in_datas["xml_datas"])){

foreach($in_datas["xml_datas"] as $k => $v){

foreach($v as $xml){

$xml_str.=" "

."

subject)."]]> "

."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject))).""

."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject))).""

."message, 600))."]]>"

."".date('Y-m-d h:i:s',$xml->dateline)." "

."$xml->url"

."";

}

}

}

$xml_str.="";

}

$xml_str.="";

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);

}

}

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

http://www.xiuxiandou.com/free

休闲豆,IT资讯,IT电子书,游戏种子,电影BT RSS

zh-cn

1

hourly

Copyright (C) Xiuxiandou.com. All rights reserved.

http://www.xiuxiandou.com

<p> </p> <p></p>

http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误

http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误



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



Qualys 创始人兼 CEO 菲利普`科尔图特



  北京时间 2 月 25 日消息,据国外媒体报道,美国云计算安全公司…

]]>

2013-02-25 09:18:49

http://news.cnblogs.com/n/172129/

....

休闲豆 RSS

http://www.xiuxiandou.com/free

休闲豆,IT资讯,IT电子书,游戏种子,电影BT RSS

zh-cn

1

hourly

Copyright (C) Xiuxiandou.com. All rights reserved.

http://www.xiuxiandou.com

<p></p> <p></p>

http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误

http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创企业家易犯的4大错误



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



Qualys 创始人兼 CEO 菲利普`科尔图特



  北京时间 2 月 25 日消息,据国外媒体报道,美国云计算安全公司…

]]>

2013-02-25 09:18:49

http://news.cnblogs.com/n/172129/

....

3、网站地图

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

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

[php]

/**

* A class for generating XML sitemaps

*

* @author Philipp Dörner

* @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\n\t\t" . $item['loc'] . "\n";

$attributes = array("lastmod", "changefreq", "priority");

foreach($attributes AS $attr)

{

if(isset($item[$attr]))

{

$map .= "\t\t" . $item[$attr] . "$attr>\n";

}

}

$map .= "\t\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\n\t\t" . $url['loc'] . "\n";

if(isset($url['lastmod']))

{

$index .= "\t\t" . $url['lastmod'] . "\n";

}

$index .= "\t\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 "

" . $message . " after request:

\n
" . $reponse['request'] .  "
\n\n";

}

}

}

return $statuses;

}

}

/**

* A class for generating XML sitemaps

*

* @author Philipp Dörner

* @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\n\t\t" . $item['loc'] . "\n";

$attributes = array("lastmod", "changefreq", "priority");

foreach($attributes AS $attr)

{

if(isset($item[$attr]))

{

$map .= "\t\t" . $item[$attr] . "$attr>\n";

}

}

$map .= "\t\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\n\t\t" . $url['loc'] . "\n";

if(isset($url['lastmod']))

{

$index .= "\t\t" . $url['lastmod'] . "\n";

}

$index .= "\t\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 "

" . $message . " after request:

\n
" . $reponse['request'] .  "
\n\n";

}

}

}

return $statuses;

}

}

2、sitemap.php控制类,注意这里不要与libraries中的sitemaps.php同名,不然会报错的.

if(!defined('BASEPATH')) exit('No direct script access allowed');

/**

&nbsp