我们做了一个网站,里面大概有三四千个栏目,栏目里面还分一二三级栏目。在做xml网站地图时,需要把网站所有的栏目都列出来。之前用的代码是:
<?xml version="1.0" encoding="utf-8"?>
<urlset>
{dede:channel typeid='483' row='2000'}<url>
<loc>[field:typelink/]</loc>
<lastmod>2014-12-26</lastmod>
<changefreq>dAIly</changefreq>
<priority>0.8</priority>
</url>
{/dede:channel}
......
</urlset>
这样要手动指定很多栏目的ID,无法读出一二三级的栏目,相当低麻烦,本来想找另外一个标签,可以一下子把所有的一二三级栏目都调取出来,但没找到。
最终我找了标签cattree来实现:
<?xml version="1.0" encoding="utf-8"?>
<urlset>
{dede:cattree typeid='483' catid='483' /}{/dede:cattree}
{dede:cattree typeid='264' catid='264' /}{/dede:cattree}
......
</urlset>
这样只需要指定网站所有的一级栏目ID,工作瞬间轻松99%。
由于标签cattree读取出来的内容,包含带有dl dt等html结构代码,因此还要去修改。
找到文件includetaglibcattree.lib.php,看文件底部。
$row['typelink'] = GetOneTypeUrlA($row);
$revalue .= "<dl class='cattree'>\n";
$revalue .= "<dt><a href='{$row['typelink']}'>{$row['typename']}</a></dt>\n";
cattreeListSon($row['id'], $revalue);
$revalue .= "</dl>\n";
这个输出的三级栏目的样式
$row['typelink'] = GetOneTypeUrlA($row);
$thisv .= " <dl class='cattree'>\n";
$thisv .= " <dt><a href='{$row['typelink']}'>{$row['typename']}</a></dt>\n";
cattreeListSon($row['id'], $thisv);
$thisv .= " </dl>\n";
这个输出的二级栏目的样式
if($thisv!='') $revalue .= " <dd>\n$thisv </dd>\n";
这个输出的二级栏目下有子栏目的大样式
我修改后三段代码的分别是:
$row['typelink'] = GetOneTypeUrlA($row);
$revalue .= "<url>\n";
$revalue .= "<loc>{$row['typelink']}</loc>\n<lastmod>2014-12-26</lastmod>\n<changefreq>daily</changefreq>\n<priority>0.8</priority>\n</url>\n";
cattreeListSon($row['id'], $revalue);
$revalue .= "";
$row['typelink'] = GetOneTypeUrlA($row);
$thisv .= "<url>\n";
$thisv .= "<loc>{$row['typelink']}</loc>\n<lastmod>2014-12-26</lastmod>\n<changefreq>daily</changefreq>\n<priority>0.8</priority>\n</url>\n";
cattreeListSon($row['id'], $thisv);
$thisv .= "";
if($thisv!='') $revalue .= "$thisv";