两种方法实现Dedecms地图制作 生成sitemap.xml方法

2018/05/2513:58:43两种方法实现Dedecms地图制作 生成sitemap.xml方法已关闭评论 792

本文说的地图是网站的XML地图。

版本一

在模板目录制作以下页面,名称:sitemap.xml。

<?xml version="1.0" encoding="UTF-8"?><!--声明xml格式-->
<?xml-stylesheet type="text/xsl" href="sitemap.xsl"?>  <!--使用的xml模板,作用是浏览器打开也可以加上css样式让xml显示更好看-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">   <!--sitemap协议版本-->
<url>
<loc>http://www.baibo8.com/</loc>
<lastmod>{dede:arclist row=1 titlelen=24 orderby=pubdate}[field:pubdate function=strftime('%Y-%m-%d',@me)/]{/dede:arclist}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
{dede:channel row='23' type='top'}
<url>
<loc>[field:typelink /]</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
{/dede:channel}
{dede:arclist row=2000 orderby=pubdate}
<url>
<loc>[field:arcurl/]</loc>
<lastmod>[field:pubdate function=strftime('%Y-%m-%d',@me)/]</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
{/dede:arclist}
</urlset>

每天更新:
织梦后台-生成-HTML更新-更新主页HTML
选择模板:jncmb/sitemap.xml,主页位置:../sitemap.xml

或者

每日手动执行更新,http://www.yourdomain.com/plus/task.php?client=js

手动写一个计划任务执行文件,将该文件命名为generate_sitemap.php,放在/plus/task目录里,文件的内容如下:

<?php

//定时生成网站地图

require_once(dirname(__FILE__).'/../../include/common.inc.php');
include(DEDEINC."/arc.listview.class.php"); 
$lv = new ListView();

//解析模板到字符串

$lv->PartView = new PartView($lv->TypeID,false);

$lv->PartView->SetTypeLink($lv->TypeLink);

$lv->PartView->SetTemplet(DEDETEMPLATE.'/jncmb/sitemap.xml');

$html = $lv->PartView->GetResult();

file_put_contents('../../sitemap.xml',$html);

 

还是出现问题:
访问域名/sitemap.xml是空白网页,而查看源代码是正确的,不知什么原因。

版本二

采用后台单页生成xml地图

1. 在后台核心->频道模型->单页文档管理中,增加一个页面,我们可以称之为XML网站地图,内容如下图所示,点击保存。
2. {style}目录下(默认是templets/default/目录,根据自己的模板路径),创建一个sitemap.xml文件,内容如下:

{dede:php}  
 echo '<?xml version="1.0" encoding="utf-8"?>'. "\r\n";   
 echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 
{/dede:php}  
  <url>    <loc>{dede:global.cfg_basehost/}</loc>  
    <lastmod> {dede:arclist row=1 titlelen=24 orderby=pubdate} [field:pubdate function=strftime('%Y-%m-%d',@me)/]{/dede:arclist} </lastmod>  
    <priority>1.0</priority>  
  </url>  

{dede:channel row='23' type='top'}
<url>
<loc>[field:typelink /]</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
{/dede:channel}

{dede:php}  
$dsql->SetQuery('select id, typename from arctype where reid=0');  
$dsql->Execute(1);  
while($row=$dsql->GetArray(1))  
{  
  $dsql->SetQuery('select id, typename from arctype where reid='. $row['id']);  
  $dsql->Execute(2);  
  while($row2=$dsql->GetArray(2))  
  {  
    $dsql->SetQuery('select * from arctype where reid='.$row2['id']);  
    $dsql->Execute(3);  
    while($row3=$dsql->GetObject(3))  
    {  
      $typelink = GetTypeUrl($row3->id,MfTypedir($row3->typedir),$row3->isdefault,$row3->defaultname,$row3->ispart,$row3->namerule2,$row3->moresite,$row3->siteurl,$row3->sitepath);   
      echo "<url>\r\n";  
      echo '    <loc>http://www.baibo8.com'. $typelink. "</loc>\r\n";  
      echo '    '. "\r\n";  
      echo '    '. "\r\n";  
      echo "  </url>";  
    }  
  }  
}    
{/dede:php}  
{dede:arclist orderby=pubdate row='10000'}   
<url>    
<loc>[field:arcurl/]</loc>  
<lastmod>[field:pubdate function="GetDateTimeMK(@me)"/]</lastmod>  
<changefreq>monthly</changefreq>  
<priority>0.8</priority>
</url>  
{/dede:arclist}  

{dede:sql sql='Select filename, uptime from sgpage where filename != "sitemap.xml" AND filename != "404.html"'}  
<url>    
<loc>[field:filename/]</loc>  
<lastmod>[field:uptime function=strftime('%Y-%m-%d',@me)/]</lastmod>  
<changefreq>monthly</changefreq>  
<priority>0.4</priority>  
</url>  
{/dede:sql}    
</urlset> 

到此,以上两种方法都能实现网站的xml地图制作,访问自己的域名查看,www.yourdomain.com/sitemap.xml。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin