织梦模板DEDECMS调取所有顶级二级三级栏目的方法

织梦(DedeCMS)是一种流行的开源内容管理系统,广泛应用于各种类型的网站建设,在织梦系统中,调取所有顶级、二级和三级栏目是一项常见需求,本文将详细讲解如何在织梦模板中实现这一功能,并提供相关代码示例和表格说明,确保内容准确、逻辑清晰。
一、调用顶级栏目
调用顶级栏目是最简单的操作,适用于企业网站和个人网站等没有复杂子栏目的场景,以下是具体的代码示例:
{dede:channel type='top' currentstyle="<li class='thisclass'><a href='~typelink~'>~typename~</a></li>"}
<li><a href='[field:typeurl/]'>[field:typename/]</a></li>
{/dede:channel}
注释(参数):
typeid='0':栏目ID;
reid = '0':上级栏目ID;
row = '100':调用栏目数;
col = '1':分多少列显示(默认为单列);
type = 'son | sun':son表示下级栏目,self表示同级栏目,top顶级栏目;

currentstyle = '':应用样式。
这种方***把后台的顶级栏目都调用出来,如果想有些栏目不被调用出来,可以加上参数typeid=‘所要调用栏目的id’,对于调用指定的栏目可以用下面的标签:
{dede:type typeid='指定栏目的id'}
<a href="[field:typelink /]">[field:typename /]</a>
{/dede:type}
二、调用二级栏目
带有二级子栏目的调用方法适用于信息分类较多的网站,以下是一个典型的代码示例:
{dede:channelartlist typeid='1,2,3,6,7,10,8,11' row='10'} //typeid=‘顶级栏目的id’
<li class="tab dropdown"><a id="{dede:field name='id'/}" href="{dede:field name='typeurl'/}" class="tablink arwlink">{dede:field name='typename'/}</a>
<ul class="subnav">
{dede:channel type='son' noself='yes'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
</ul>
</li>
{/dede:channelartlist}
对于没有子栏目的顶级栏目可以使用调用指定栏目的标签:
{dede:type typeid='指定栏目的id'}
<li>
<a href="[field:typelink /]">[field:typename /]</a>
</li>
{/dede:type}
三、调用三级栏目
三级栏目的调用适用于商城等需要多层级导航的网站,以下是详细的代码示例:
<li>
<h3>
{dede:type typeid='2'}<a href='[field:typelink/]' class="depth_1">[field:typename/]</a>{/dede:type}
</h3> //顶级栏目的调用
<ul class="children" style="display: none; "> {dede:channelartlist typeid='top' typeid='2'}
//二级栏目和三级栏目的调用这里typeid='子栏目所属的顶级栏目的id'
<li>
<h3 >
<a href='{dede:field name='typeurl'/}' class="depth_2">
<span class="icon10"></span>{dede:field name='typename'/}
</a>
</h3>
<ul>
{dede:sql sql='Select * from dede_arctype where reid=~id~ ORDER BY id limit 0,20'}
//limit 起始三级栏目id 显示栏目的条数
<li><a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]"
class="depth_3">[field:typename/]</a></li>
{/dede:sql}
</ul>
</li>
{/dede:channelartlist>
</ul>
</li>
四、调用顶级、二级和三级栏目的整合方案
为了方便理解和使用,下面提供一个整合后的代码示例,展示如何同时调用顶级、二级和三级栏目:
<ul>
{dede:channelartlist typeid='top'}
<li>
<h3>
{dede:type typeid='[field:id/]'}<a href='[field:typelink/]' class="depth_1">[field:typename/]</a>{/dede:type}
</h3>
<ul class="children">
{dede:channelartlist typeid='[field:id/]'}
<li>
<h3>
<a href='{dede:field name='typeurl'/}' class="depth_2">
<span class="icon10"></span>{dede:field name='typename'/}
</a>
</h3>
<ul>
{dede:sql sql='Select * from dede_arctype where reid=~id~ ORDER BY id limit 0,20'}
<li><a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]" class="depth_3">[field:typename/]</a></li>
{/dede:sql}
</ul>
</li>
{/dede:channelartlist}
</ul>
</li>
{/dede:channelartlist}
</ul>
上述代码通过嵌套的方式实现了对顶级、二级和三级栏目的调用,并通过CSS进行样式控制,可以根据实际需求调整代码和样式。
五、常见问题及解答
FAQs

Q1: 如何在织梦模板中调用当前顶级栏目的二级栏目?
A1: 要在织梦模板中调用当前顶级栏目的二级栏目,可以使用如下代码:
{dede:channelartlist typeid='mflag' currentstyle='current'}
<li class='a_a1 {dede:field.currentstyle/}'><a href="{dede:field name='typeurl'/}">{dede:field name='typename' /}</a>
<! 判断当前栏目是否下一级 >
{dede:field name=typeid runphp="yes"}
global $dsql;
$sql = "SELECT id Fromdede_arctype WHERE reid='@me' And ishidden<>1 order by sortrank asc limit 0, 100 ";
$is_row = $dsql>GetOne($sql);
if(is_array($is_row)){
@me='';
}else{
$sql = "SELECT arc.* FROMdede_archives arc where arc.arcrank>1 AND arc.typeid = @me ORDER BY arc.id desc";
$dsql>SetQuery($sql);
$dsql>Execute('t');
$result = '<ul>';
while($row = $dsql>GetArray('t'))
{
$arcurl = GetOneArchive($row['id']);
$result .= <<< TPL
<li class="a_a2"><a href="{$arcurl['arcurl']}">{$row['title']}</a></li>
TPL;
}
$result.='</ul>';
@me = $result;
}
{/dede:field}
{/dede:sql}
</li>
{/dede:channelartlist}
这段代码会获取当前顶级栏目下的二级栏目,并显示其名称和链接,如果当前栏目没有二级栏目,则不会显示任何内容。
Q2: 如何在织梦模板中调用指定顶级栏目及其所有子栏目?
A2: 要在织梦模板中调用指定顶级栏目及其所有子栏目,可以使用如下代码:
{dede:channelartlist typeid='指定顶级栏目的id'}
<li><a href='{dede:field name='typeurl'/}'>{dede:field name='typename' /}</a></li>
{dede:channel type='son' noself='yes'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
{/dede:channelartlist}
这段代码会先调用指定顶级栏目,然后递归调用其所有二级子栏目,并显示其名称和链接,如果顶级栏目没有二级子栏目,则不会显示任何内容。