如何在DEDECMS中调取所有顶级、二级和三级栏目?

在DEDECMS中,通过SQL语句可以调取所有顶级、二级和三级栏目。

织梦模板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顶级栏目;

如何在DEDECMS中调取所有顶级、二级和三级栏目?

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

如何在DEDECMS中调取所有顶级、二级和三级栏目?

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}

这段代码会先调用指定顶级栏目,然后递归调用其所有二级子栏目,并显示其名称和链接,如果顶级栏目没有二级子栏目,则不会显示任何内容。