如何在DEDECMS中调取所有顶级、二级和三级栏目?
织梦模板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}
这段代码会先调用指定顶级栏目,然后递归调用其所有二级子栏目,并显示其名称和链接,如果顶级栏目没有二级子栏目,则不会显示任何内容。