我们知道dedecms没有关于生成sitemap的功能,也没有类似和插件,我们只能自行去扩展这样的功能,如何在dedecms生成sitemap呢,下面我来介绍一下怎样实现。
一、我们在模板目录下制作一个sitemap.xml模板,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>/</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='10' type='top'}
<url>
<loc>[field:typelink /]</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
{/dede:channel}
{dede:arclist row=1000 orderby=pubdate}
<url>
<loc>[field:arcurl/]</loc>
<lastmod>[field:pubdate function=strftime('%Y-%m-%d',@me)/]</lastmod>
<changefreq>monthly</changefreq>
</url>
{/dede:arclist}
</urlset>
把完成的sitemap.xml模板放在我们模板目录下.
二 、在/plus/task 目录下存入generate_sitemap.php文件,内容如下:
<?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.'/default/sitemap.xml');
$html = $lv->PartView->GetResult();
file_put_contents('../../sitemap.xml',$html);
?>
三、网上很多人讲了存计dedecms计划任务中,但其中有个缺陷,就是触发程序生成问题,这里我们还是采取最优化的处理方法,向大家介绍一下服务器中的计划任务。
利用服务器中的crond服务来加载我们计划文件,打开crontab -e
输入 59 23 * * * curl /plus/task/generate_sitemap.php 表时每天23点59分来执行生成文件,每天sitemap.xml就会更新一次。
这是最稳妥的方法,建站,仿站找爱虎仿站,专业又稳妥。