CodeIgniter生成网站sitemap地图的方法

前端技术 2023/09/09 PHP

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

复制代码 代码如下:

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

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

2.创建一个名为sitemapxml的模型

复制代码 代码如下:

<?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的模板

复制代码 代码如下:

<!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://aa.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://aa.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://aa.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://aa.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了。

本文地址:https://www.stayed.cn/item/24490

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。