在admin项目的Tpl目录下default目录里的SiteMap_index.html文件:
网站地图生成XML
网站地图管理
-
- 生成楼盘网站地图:
-
- 生成资讯网站地图:
在admin项目的Action目录下SiteMapAction.class.php文件:
assign("cityArr", $cityArr);
}
//生成楼盘地图
public function buildingXML(){
include(BASE_PATH."Public/Lang/".C("DEFAULT_LANG")."/citys.php"); //获取城市的数组
$fnArr = createXML('building');
//分页
$fnArr = $this->array_page($fnArr);
$html = '';
foreach($fnArr as $key=>$val){
if($key == 0){
$html .= '- 生成全站楼盘总地图成功:'.WWWURL.'/'.$val.'
';
}else{
$city = preg_replace('/[^0-9]/i','',$val);
$html .= '- 生成'.$cityArr[$city].'楼盘地图成功:'.WWWURL.'/'.$val.'
';
}
}
$html .= '
'.$this->page.'';
exit($html);
}
//生成资讯地图
public function newsXML(){
$categoryArr = $this->categoryArr();
$fnArr = createXML('news');
//分页
$fnArr = $this->array_page($fnArr);
$html = '';
foreach($fnArr as $key=>$val){
if($key == 0){
$html .= '- 生成全站资讯总地图成功:'.WWWURL.'/'.$val.'
';
}else{
$categoryId = preg_replace('/[^0-9]/i','',$val);
$html .= '- 生成'.$categoryArr[$categoryId].'资讯地图成功:'.WWWURL.'/'.$val.'
';
}
}
$html .= '
'.$this->page.'';
exit($html);
}
function categoryArr(){
//一级分类
$categoryM=M("NewsCategory");
$categoryIdList=$categoryM->field("id,title")->where("level=1")->select();
foreach($categoryIdList as $key=>$val) {
$NewsCategoryArr[$val['id']] = $val['title'];
}
return $NewsCategoryArr;
}
//数组分页
/**
* array $array 数组
* integer $showCount 每页的记录数
*------------------------------
* return array 返回数组
*/
function array_page($array,$listRows = 12,$showCount = 4){
$p = C('VAR_PAGE');
$url = $_SERVER['REQUEST_URI']."/".$p."/";
$page = !empty($_GET[C('VAR_PAGE')])?$_GET[C('VAR_PAGE')]:1;
$upRow = $page-1;
$downRow = $page+1;
$linkPage = "";
$totalPage = (int)count($array);
$pagetotal = ceil($totalPage/$listRows); //总页数
if($page <= ceil(($showCount)/2)){
$minpg = 1;
$maxpg = $showCount+1;
if($maxpg >= $pagetotal) $maxpg = $pagetotal + 1;
}elseif($page > ceil(($showCount)/2) && $page < ($pagetotal - ceil($showCount/2))){
$minpg = $page - ceil(($showCount)/2) + 1;
$maxpg = $page + ceil(($showCount)/2) + 1;
if($maxpg >= $pagetotal) $maxpg = $pagetotal;
}elseif($page >=$pagetotal - ceil(($showCount)/2)){
$minpg = $pagetotal - ($showCount-1);
if($minpg == 1) $minpg = 2;
$maxpg = $pagetotal + 1;
}
$linkPage .= " ".$totalPage." 条记录 ".$page."/".$pagetotal." 页 ";
if($pagetotal == 1){
$linkPage .= " 1 ";
}else{
if($page > 1){
$linkPage .= " 第一页";
$linkPage .= " 上一页";
}
for($i = $minpg; $i < $maxpg; $i++){
if($page == $i){
$linkPage .= " ". $i ."";
}else{
$linkPage .= " $i";
}
}
if($page < $pagetotal){
$linkPage .= " 下一页";
$linkPage .= " 最后一页";
}
}
if($listRows < $totalPage) {
if($page <= 1 || empty($page)) {
$page = 0;
} else {
$page = intval($page) - 1;
}
$array = array_slice($array,$page*$listRows,$listRows,true);
}
$this->page = $linkPage;
if(1 == $pagetotal) $this->page = '';
return $array;
}
}
?>
在admin项目的Common目录下common.php文件:
/**
* 生成xml文件
* string $fn 要生成的文件名(包括扩展名)
* string $type 标识是楼盘还是资讯等其他的
* building -- 楼盘
* news -- 新闻资讯
* $integer $isFlag 是否全部生成
* $integer $category 分类或城市的ID
*/
function createXML($type,$isFlag=1,$category=0){
if($type == 'building'){ //楼盘
$model = M('BuildingBase');
$list = $model->field('city as Numbers')->where('status >= 5')->order('city asc')->group('city')->findAll();
$url = WWWURL;
}else if($type == 'news'){ //资讯
$model = M('News');
$list = $model->field('categoryId as Numbers')->where('status >= 5')->order('categoryId asc')->group('categoryId')->findAll();
$url = WWWURL;
}
$fn = 'sitemap.xml';
$fp = "./xml/";
//生成一级全部
$isExist = searchFile($fp,$fn);
if($isExist == 'no'){ //没找到sitemap.xml文件
modeXMl($list,$url,$type,$isExist,$fp,$fn);
}else if($isExist == 'yes'){ //找到sitemap.xml文件且只修改相应的部分
$doc = new DOMDocument();
$doc->load( './xml/'.$fn );
$root = $doc -> documentElement;
$books = $doc->getElementsByTagName( "sitemap" );
if($isFlag == 1){
$count_book = $books->length;
for($i = 0; $i < $count_book; $i++){
if($books->item(0)->getAttribute('name') == $type){
$book = $books->item(0);
$root->removeChild($book);
}
}
$doc->save('./xml/'.$fn);
modeXMl($list,$url,$type,$isExist,$fp,$fn);
}else if($isFlag == 0){
foreach( $books as $book ){
if($book->getAttribute('id') == $category && $book->getAttribute('name') == $type){
$book->getElementsByTagName( "lastmod" )->item(0)->nodeValue=date('Y-m-d',time());
}
}
$doc->save('./xml/'.$fn);
}
}
$fnArr = array();
$fnArr[0] = $fn;
//生成二级xml
if($isFlag == 1){ //生成二级全部
foreach($list as $key=>$val){
$fnArr[$key+1] = createSubXML($model,$val['Numbers'],$type,$fp);
}
}else if($isFlag == 0){ //生成二级的单个
$fnArr[0] = createSubXML($model,$category,$type,$fp);
return;
}
return $fnArr;
}
/**
* 生成分类xml
* string $model 数据库模型
* integer $category 分类或城市的ID
* string $type 标识是楼盘还是资讯等其他的
* building -- 楼盘
* news -- 新闻资讯
*/
function createSubXML($model,$category,$type,$fp){
$fn = '';
if($type == 'building'){ //楼盘
$subList = $model->field('id as Numbers')->where('status >= 5 and city='.$category)->order('id desc')->findAll();
$url = WWWURL . "/building/";
$extension = '';
}else if($type == 'news'){ //资讯
$subList = $model->field('id as Numbers')->where('status >= 5 and categoryId='.$category)->order('id desc')->findAll();
$url = NEWSURL . "/article/";
$extension = '.html';
}
$fn = $type.$category.".xml";
modeSubXMl($subList,$url,$type,$extension,$fp,$fn);
return $fn;
}
/**
* 创建文件夹
* string $path 文件路径(不包括文件名)
*/
function _mkdirm($path)
{
if (!file_exists($path))
{
_mkdirm(dirname($path));
mkdir($path, 0777);
}
}
/**
* 写入文件
* string $fp 文件路径(不包括文件名)
* string $fn 文件名(包括扩展名)
* string $content 写入的内容
*/
function writeFile($fp,$fn,$content){
if(!empty($fp)) _mkdirm($fp);
$fp .= $fn;
$fpen = fopen($fp, "w");
fwrite($fpen, $content);
fclose($fpen);
}
//检查上传文件的目录里是否已存在同名的上传文件
function searchFile($path,$file){
$file_array=array(); //存放文件名数组
$folder_array=array(); //存放目录名数组
$all_array=array(); //存放全部路径的数组
if(is_dir($path)){ //检查文件目录是否存在
$H = @ opendir($path);
while(false !== ($_file=readdir($H))){
//检索目录
if(is_dir($path."/".$_file) && $_file != "." && $_file!=".." && $_file!=="Thumbs.db"){
if(eregi('/'.$file,'/'.$_file)){
array_push($folder_array,$path."/".$_file);
}
searchFile($path."/".$_file,$file);
//检索文件
}elseif(is_file($path."/".$_file) && $_file!="." && $_file!=".." && $_file!=="Thumbs.db"){
//$_file = auto_charset($_file,'utf-8','gbk');
if(eregi('/'.$file,'/'.$_file)){
array_push($file_array,$path."/".$_file);
return 'yes'; //文件存在
}
}
}
//$this->all_array["folder"]=$this->folder_array;
//$this->all_array["file"]=$this->file_array;
closedir($H);
return 'no'; //不存在
}elseif(is_file($path)){
if(eregi($file,$path)){
//$this->all_array["file"]=$path;
return 'yes'; //文件存在
} else {
return 'no'; //文件不存在
}
}else{
return 'no'; //文件不存在
}
}
/**
* xml第一级模板生成
* array $array 需要生成的数组
* string $url 生成后里面的url链接
* string $type 标识是楼盘还是资讯等其他的
* building -- 楼盘
* news -- 新闻资讯
* string $fp 文件路径(不包括文件名)
* string $fn 文件名称(包括扩展名).
*/
function modeXMl($array,$url,$type,$isExist,$fp = './xml/',$fn = 'sitemap.xml'){
if($isExist == 'no'){
$doc = new DOMDocument('1.0', 'utf-8'); // 声明版本和编码
$doc -> formatOutput = true; //格式XML输出
$sitemapindex = $doc->createElement('sitemapindex'); //创建一个标签
$xmlns = $doc->createAttribute('xmlns'); //创建一个属性
$xmlnsVal = $doc->createTextNode('http://www.google.com/schemas/sitemap/0.9');
$xmlns -> appendChild($xmlnsVal); //继承属性
$sitemapindex -> appendChild($xmlns); //继承属性内容
}else if($isExist == 'yes'){
$doc = new DOMDocument();
$doc->load( $fp.$fn );
$sitemapindex = $doc->getElementsByTagName( "sitemapindex" )->item(0);
}
foreach($array as $key=>$val){
$sitemap = $doc->createElement('sitemap'); //创建一个标签
$name = $doc->createAttribute('name'); //创建一个属性
$nameVal = $doc->createTextNode($type); //设置属性内容
$name -> appendChild($nameVal); //继承属性
$id = $doc->createAttribute('id'); //创建一个属性
$idVal = $doc->createTextNode($val['Numbers']); //设置属性内容
$id -> appendChild($idVal); //继承属性
$sitemap -> appendChild($name); //继承属性内容
$sitemap -> appendChild($id); //继承属性内容
$loc = $doc->createElement('loc'); //创建一个标签
$locContent = $doc->createTextNode($url."/".$type.$val['Numbers'].".xml"); //设置标签内容
$loc -> appendChild($locContent); //继承标签内容
$lastmod = $doc->createElement('lastmod'); //创建一个标签
$lastmodCon = $doc->createTextNode(date('Y-m-d',time())); //设置标签内容
$lastmod -> appendChild($lastmodCon); //继承标签内容
$sitemap -> appendChild($loc); //继承子类
$sitemap -> appendChild($lastmod); //继承子类
$sitemapindex -> appendChild($sitemap); //继承子类
}
if($isExist == 'no'){
$doc -> appendChild($sitemapindex); //继承子类
}
if(!empty($fp)) _mkdirm($fp);
$doc -> save($fp.$fn); // 生成保存为XML
}
/**
* xml第二级模板生成
* array $array 需要生成的数组
* string $url 生成后里面的url链接
* string $type 标识是楼盘还是资讯等其他的
* building -- 楼盘
* news -- 新闻资讯
* string $fp 文件路径(不包括文件名)
* string $fn 文件名称(包括扩展名)
*/
function modeSubXMl($array,$url,$type,$extension = '',$fp = './xml/',$fn = 'sitemap.xml'){
$doc = new DOMDocument('1.0', 'utf-8'); // 声明版本和编码
$doc -> formatOutput = true; //格式XML输出
$urlset = $doc->createElement('urlset'); //创建一个标签
$xmlns = $doc->createAttribute('xmlns'); //创建一个属性
$xmlnsVal = $doc->createTextNode('http://www.google.com/schemas/sitemap/0.9');
$xmlns -> appendChild($xmlnsVal); //继承属性
$urlset -> appendChild($xmlns); //继承属性内容
for($i = 1; $i <= 3; $i++){
switch($i){
case 1:
$tUrl = WWWURL;
break;
}
$urlXML = $doc->createElement('url'); //创建一个标签
$loc = $doc->createElement('loc'); //创建一个标签
$locContent = $doc->createTextNode($tUrl); //设置标签内容
$loc -> appendChild($locContent); //继承标签内容
$urlXML -> appendChild($loc); //继承子类
$urlXML -> appendChild($lastmod); //继承子类
$urlset -> appendChild($urlXML); //继承子类
}
foreach($array as $key=>$val){
$urlXML = $doc->createElement('url'); //创建一个标签
$name = $doc->createAttribute('name'); //创建一个属性
$nameVal = $doc->createTextNode($type); //设置属性内容
$name -> appendChild($nameVal); //继承属性
$id = $doc->createAttribute('id'); //创建一个属性
$idVal = $doc->createTextNode($val['Numbers']); //设置属性内容
$id -> appendChild($idVal); //继承属性
$urlXML -> appendChild($name); //继承属性内容
$urlXML -> appendChild($id); //继承属性内容
$loc = $doc->createElement('loc'); //创建一个标签
$locContent = $doc->createTextNode($url.$val['Numbers'].$extension); //设置标签内容
$loc -> appendChild($locContent); //继承标签内容
$urlXML -> appendChild($loc); //继承子类
$urlXML -> appendChild($lastmod); //继承子类
$urlset -> appendChild($urlXML); //继承子类
}
$doc -> appendChild($urlset); //继承子类
if(!empty($fp)) _mkdirm($fp);
$doc -> save($fp.$fn); // 生成保存为XML
}