登录  /  注册
首页 > php教程 > php手册 > 正文
Codeigniter Rss,网站地图,路由配置
php中文网
发布: 2016-06-13 10:55:08
原创
657人浏览过

_ _,今天在成果不错,完成了网站的三个功能,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.=" "

."<![CDATA[ ".xml_convert($xml->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.=" "

."<![CDATA[ ".xml_convert($xml->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><![CDATA[ 硅谷传奇投资人讲述初创企业家易犯的4大错误 ]]> </p> <p>

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

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



'xiuxiandou.com'



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><![CDATA[ 硅谷传奇投资人讲述初创企业家易犯的4大错误 ]]></p> <p>

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

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



'xiuxiandou.com'



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<$attr>" . $item[$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<$attr>" . $item[$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');

/**

 

来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学