在Dedecms CMS中,生成网站地图的操作相对简单:进入后台—生成—HTML更新—更新网站地图,系统会在data目录下生成sitemap.html文件。
然而,这种方式存在明显缺点:
1、生成的地图过于简单,sitemap.html中仅包含网站栏目列表,缺乏文章列表内容。
2、sitemap.html默认生成于data文件夹内,而出于安全考虑,data文件夹通常被设置为禁止访问。
因此,我们的优化目标是让sitemap.html不仅包含文章列表,还能生成到网站根目录。
以Dedecms 5.7为例,网站地图模板sitemap.htm位于/templets/plus/目录。即使在sitemap.htm中添加了文章列表相关标签,也无法调用文章列表。这是因为makehtml_map.php无法解析Dedecms的相关调用标签。我们需要对其进行修改,使其支持任意标签调用。
以下是具体的修改步骤:
(1)将
require_once(DEDEINC."/dedetag.class.php");
改为
require_once(DEDEINC."/arc.partview.class.php");
(2)将
$dtp = new DedeTagParse();
$dtp->LoadTemplet($tmpfile);
$dtp->SaveTo($cfg_basedir.$murl);
改为
$dtp = new PartView();
$GLOBALS['_arclistEnv'] = 'index';
$dtp->SetTemplet($tmpfile);
$dtp->SaveToHtml($cfg_basedir.$murl);
(3)注释掉
$dtp->Clear();
改为
//$dtp->Clear();
(4)将第26行
$murl = $cfg_cmspath."/data/sitemap.html";
$tmpfile = $cfg_basedir.$cfg_templets_dir."/plus/sitemap.htm";
改为
$murl = $cfg_cmspath."/sitemap.html";
$tmpfile = $cfg_basedir.$cfg_templets_dir."/".$cfg_df_style."/sitemap.htm";
最后需要注意的是,我们将
$cfg_basedir.$cfg_templets_dir."/plus/sitemap.htm";
改为
$cfg_basedir.$cfg_templets_dir."/".$cfg_df_style."/sitemap.htm";
这样做的目的是将网站地图模板从固定的/plus/目录移至网站模板所在目录,便于自定义编辑。
测试发现,这种方法生成的网站地图文章列表没有分页效果,因此建议设置较大的文章显示数量。以下是一个简单的模板示例:
网站地图/{dede:global.cfg_webname/}
返回首页
———栏目列表———
{dede:global name='maplist'/}
———文章列表———
{dede:arclist typeid='' orderby='pubdate' row='999999' }
- [field:title/]
{/dede:arclist}
通过上述方法,我们可以显著提升Dedecms CMS网站地图的功能性与SEO表现。