用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5282|回复: 3
收起左侧

[Web] 用CodeIgniter创建网站sitemap地图

[复制链接]
发表于 2013-4-4 14:16:25 | 显示全部楼层 |阅读模式
本帖最后由 深深的呼吸 于 2013-4-4 14:18 编辑

本人用CodeIgniter建立了一个小型网站:http://101ban.sinaapp.com/,为了更好的搜索引擎收录,有必要给网站生成一个xml格式的sitemap地图,但是上网找了很多资料,都没发现好的教程,或者功能太过于繁杂。于是自己琢磨弄了一个简单的适合自己的方法,下面分享一下这个方法。

说明:在CodeIgniter环境下开发的程序,放到SAE运行。

1.建立了一个名为sitemap的控制器

PHP复制代码

<?php
if (!defined('BASEPATH'))
        exit ('No direct script access allowed');
 
class Sitemap extends CI_Controller{
        public function __construct() {
                parent :: __construct();
                $this->load->model('sitemapxml');      
        }
       
        function index(){
                $data['posts']=$this->sitemapxml->getArticle();
                $data['categorys']=$this->sitemapxml->getCategory();
                $this->load->view('sitemap.php',$data);
        }
}
[p=24, null, left]
复制代码

首先加载sitemapxml模型类,index方法调用两个方法,分别获取文章列表和类别列表,以在模板中输出。

2.创建一个名为sitemapxml的模型
PHP复制代码
 
<?php
class Sitemapxml extends CI_Model{
        public function __construct() {
                parent :: __construct();
                $this->load->database();
        }
       
        public function getArticle(){
                $this->db->select('ID,post_date,post_name');
                $this->db->order_by('post_date', 'desc');
                $result=$this->db->get('posts');
                return $result->result_array();
        }
       
        public function getCategory(){
                $this->db->select('c_sname');
                $result=$this->db->get('category');
                return $result->result_array();
        }
}
 
复制代码

模型里面定义两个方法,获取文章列表和类别列表。

3.创建一个名为sitemap.php的模板

PHP复制代码
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sitemap</title>
</head>
<body>
<?php
echo htmlspecialchars('<?xml version="1.0" encoding="utf-8"?>').'<br/>';
echo htmlspecialchars('<urlset>').'<br/>';
 
//首页单独写一个url
echo htmlspecialchars('<url>').'<br/>';
echo htmlspecialchars(' <loc>').'http://101ban.sinaapp.com'.htmlspecialchars('</loc>').'<br/>';
echo htmlspecialchars('<lastmod>').date('Y-m-d',time()).htmlspecialchars('</lastmod>').'<br/>';
echo htmlspecialchars('<changefreq>').'daily'.htmlspecialchars('</changefreq>').'<br/>';
echo htmlspecialchars('<priority>').'1'.htmlspecialchars('</priority>').'<br/>';
echo htmlspecialchars('</url>').'<br/>';
 
//类别页
foreach ($categorys as $category){
        echo htmlspecialchars('<url>').'<br/>';
        echo htmlspecialchars(' <loc>').'http://101ban.sinaapp.com/index.php/home/cat/'.$category['c_sname'].htmlspecialchars('</loc>').'<br/>';
        echo htmlspecialchars('<lastmod>').date('Y-m-d',time()).htmlspecialchars('</lastmod>').'<br/>';
        echo htmlspecialchars('<changefreq>').'weekly'.htmlspecialchars('</changefreq>').'<br/>';
        echo htmlspecialchars('<priority>').'0.8'.htmlspecialchars('</priority>').'<br/>';
        echo htmlspecialchars('</url>').'<br/>';
}
 
//文章页
foreach ($posts as $post){
        echo htmlspecialchars('<url>').'<br/>';
        echo htmlspecialchars(' <loc>').'http://101ban.sinaapp.com/index.php/home/details/'.$post['post_name'].htmlspecialchars('</loc>').'<br/>';
        echo htmlspecialchars('<lastmod>').date('Y-m-d',strtotime($post['post_date'])).htmlspecialchars('</lastmod>').'<br/>';
        echo htmlspecialchars('<changefreq>').'weekly'.htmlspecialchars('</changefreq>').'<br/>';
        echo htmlspecialchars('<priority>').'0.6'.htmlspecialchars('</priority>').'<br/>';
        echo htmlspecialchars('</url>').'<br/>';
}
 
//留言板
echo htmlspecialchars('<url>').'<br/>';
echo htmlspecialchars(' <loc>').'http://101ban.sinaapp.com/index.php/guest'.htmlspecialchars('</loc>').'<br/>';
echo htmlspecialchars('<lastmod>').date('Y-m-d',time()).htmlspecialchars('</lastmod>').'<br/>';
echo htmlspecialchars('<changefreq>').'weekly'.htmlspecialchars('</changefreq>').'<br/>';
echo htmlspecialchars('<priority>').'0.5'.htmlspecialchars('</priority>').'<br/>';
echo htmlspecialchars('</url>').'<br/>';
 
echo htmlspecialchars('</urlset>');
?>
</body>
</html>
 
复制代码

最重要的就是这个模板了,按照sitemap.xml的标准格式,从数据库中读取相关数据,用循环的方式自动生成这样的格式,页面上展示的是html形式的xml的内容。

然后再用一个很笨的方法,将生成的html文本(实际上就是xml文件的显示内容),复制到一个新建的sitemap.xml文件,格式化一下,保存,就产生了一个标准的sitemap.xml文件。因为要用的SAE部署应用,目录不支持写操作,只能这样上传了,隔一段时间这样弄一下就ok了。

附上已经做好的地址,可以打开看看效果。http://101ban.sinaapp.com/index.php/sitemap

关于sitemap.xml的标准格式,请参加本站另一篇文章:http://tanteng.sinaapp.com/2013/04/sitemap/

(小谈博客原创,转载请注明出处!http://tanteng.sinaapp.com/2013/04/codeigniter-create-sitemap/


评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2013-4-4 19:47:47 | 显示全部楼层
教你一个不用echo那么多的方法,写一个变量,把所有需要echo的东西都赋给它,最后输出这个变量就行了。
 楼主| 发表于 2013-4-5 13:13:32 | 显示全部楼层
Y无声息 发表于 2013-4-4 19:47
教你一个不用echo那么多的方法,写一个变量,把所有需要echo的东西都赋给它,最后输出这个变量就行了。
...

嗯,这是个办法
发表于 2013-4-8 01:09:31 CI中国手机版 | 显示全部楼层
很好很强大来自: iPhone客户端

本版积分规则