CodeIgniter生成网站sitemap地图的方法
author:一佰互联 2019-04-29   click:166

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了。