Dedecms5.7 用标签cattree获取网站所有栏目

我们做了一个网站,里面大概有三四千个栏目,栏目里面还分一二三级栏目。在做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";