,{dede:field name='typeid'/},
`,,4. 保存模板文件并更新缓存。,5. 在文章发布或编辑时,选择相应的栏目,系统会自动将该栏目的ID赋值给
typeid字段。,6. 在前台页面中,使用以下代码获取所属栏目和返回列表:,,
`,{dede:sql name='get_channel'}, SELECT id,typename FROM dede_arctype WHERE id = '[field:typeid/]',{/dede:sql},[field:global runphp='yes'], $typeid = @me('get_channel');, if(is_array($typeid)) {, $typeid = $typeid[0]['id'];, $typename = $typeid[0]['typename'];, } else {, $typeid = '';, $typename = '';, }, $returnurl = 'http://www.example.com'; // 返回列表链接,[/field:global],返回{$typename},
`,,
$returnurl`变量需要替换为实际的返回列表链接。在DedeCMS(织梦内容管理系统)中,实现所属栏目与返回列表功能是网站导航和用户体验的重要组成部分,通过合理的方法,可以在任何页面上快速添加“返回列表”和“所在栏目”的链接,使用户能够方便地浏览相关栏目和返回上级列表,下面将详细介绍如何实现这一功能:
DedeCMS 所属栏目与返回列表的实现方法
方法一:使用标签实现返回列表和所在栏目
1、返回列表
代码示例:<a href="{dede:type typeid='0' row=1}[field:typelink function='str_replace("/index.html","",@me)' /]{/dede:type}" title="返回{dede:field.typename /}">返回列表</a>
说明:该代码使用了{dede:type}
标签来获取当前文档的类型链接,并通过function='str_replace("/index.html","",@me)'
去除链接中的/index.html
,从而生成一个干净的返回列表链接。
2、所在栏目
代码示例:<a href="{dede:type typeid='0' row=1}[field:typelink function='str_replace("/index.html","",@me)' /]{/dede:type}" title="所在{dede:field.typename /}">所在栏目</a>
说明:与返回列表类似,这段代码也使用了{dede:type}
标签,但生成的是当前文档所属栏目的链接,并去除/index.html
,使其更简洁。
方法二:在任意页面获取某顶级栏目下的二级或三级栏目列表
1、获取二级栏目列表
步骤:
在/include/inc_functions.php
文件末尾加入以下代码:
“`php
function getProductClass($typeid) {
$linkList = "";
$dsql = new DedeSql(false);
$dsql>SetQuery("select typedir,typename from #@__arctype where reID = ‘$typeid’ order by sortrank");
$dsql>Execute();
while($row=$dsql>GetObject()) {
$typelink = GetTypeUrl($row>ID, MfTypedir($row>typedir), $row>isdefault, $row>defaultname, $row>ispart, $row>namerule2);
$linkList .= "<li>·<a href="$typelink">".$row>typename."</a></li>
";
}
$dsql>Close();
return $linkList;
}
“`
在模板中使用{dede:channel function='getProductClass(2)'}{/dede:channel}
调用,其中2
是顶级栏目的ID。
2、获取二级和三级栏目列表(树形菜单)
步骤:
在/include/inc_functions.php
文件末尾加入以下代码:
“`php
function getProductTree($typeid) {
$linkList = "";
$dsql = new DedeSql(false);
$dsql>SetQuery("select ID,typedir,typename from #@__arctype where reID = ‘$typeid’ order by sortrank");
$dsql>Execute();
while($row=$dsql>GetObject()) {
$typelink = GetTypeUrl($row>ID, MfTypedir($row>typedir), $row>isdefault, $row>defaultname, $row>ispart, $row>namerule2);
$linkList .= "
";
$linkList .= getSonClass($row>ID);
}
$dsql>Close();
return $linkList;
}
function getSonClass($parentid) {
$linkList = "";
$dsql = new DedeSql(false);
$dsql>SetQuery("Select ID,typedir,typename From #@__arctype where reID=’$parentid’ order by sortrank");
$dsql>Execute();
while($row=$dsql>GetObject()) {
$url = GetTypeUrl($row>ID, MfTypedir($row>typedir), $row>isdefault, $row>defaultname, $row>ispart, $row>namerule2);
$linkList .= "<li class="smallclass"><a href="$url">".$row>typename."</a></li>
";
}
return $linkList;
}
“`
在模板中使用{dede:channel function='getProductTree(2)'}{/dede:channel}
调用,其中2
是顶级栏目的ID。
3、获取所有子栏目(含三级栏目)
步骤:
在模板中使用以下代码:
“`php
{dede:channelartlist typeid=’top’ row=’10’}
<li><a href="{dede:field name=’typeurl’/}">{dede:field name=’typename’ /}</a>
<ul>
{dede:sql sql=’select * from dede_arctype where reid =~id~ ‘}
<li>
<a href=[field:typedir function=’str_replace("{cmspath}","",@me)’/]>[field:typename/]</a>
<ul>
[field:id runphp=’yes’]
global $dsql;
$id=@me;
$sql=’Select * from dede_arctype where reid=’.$id.’ ORDER BY id limit 0,20′;
$dsql>SetQuery($sql);
$dsql>Execute();
while($row = $dsql>GetArray()){
$url = str_replace("{cmspath}","",$row[‘typedir’]);
$str .='<li><a href="’.$url.’">’.$row[‘typename’].'</a></li>’;
@me = $str;
}
if(@me == $id){ //避免3级栏目为空时 写出分类ID,这里加以判断
@me =”;
}
[/field:id]
</ul>
</li>
{/dede:sql}
</ul>
</li>
{/dede:channelartlist}
“`
这段代码可以获取指定顶级栏目下的所有二级和三级子栏目,并将其以树形结构展示出来。
FAQs
1、如何在首页或其他页面插入某个顶级栏目的下级栏目列表?
解答:可以通过在/include/inc_functions.php
文件中定义函数getProductClass($typeid)
,然后在模板中使用{dede:channel function='getProductClass(顶级栏目ID)'}{/dede:channel}
来调用,要插入产品展示这个顶级栏目的下级栏目列表,可以使用{dede:channel function='getProductClass(2)'}{/dede:channel}
,其中2
是产品展示的栏目ID。
2、如何获取某个栏目的所有子栏目(包括二级和三级栏目)?
解答:可以在模板中使用{dede:channelartlist typeid='top' row='10'}
标签,结合嵌套的 SQL 查询语句来实现,具体代码如下:
“`php
{dede:channelartlist typeid=’top’ row=’10’}
<li><a href="{dede:field name=’typeurl’/}">{dede:field name=’typename’ /}</a>
<ul>
{dede:sql sql=’select * from dede_arctype where reid =~id~ ‘}
<li>
<a href=[field:typedir function=’str_replace("{cmspath}","",@me)’/]>[field:typename/]</a>
<ul>
[field:id runphp=’yes’]
global $dsql;
$id=@me;
$sql=’Select * from dede_arctype where reid=’.$id.’ ORDER BY id limit 0,20′;
$dsql>SetQuery($sql);
$dsql>Execute();
while($row = $dsql>GetArray()){
$url = str_replace("{cmspath}","",$row[‘typedir’]);
$str .='<li><a href="’.$url.’">’.$row[‘typename’].'</a></li>’;
@me = $str;
}
if(@me == $id){ //避免3级栏目为空时 写出分类ID,这里加以判断
@me =”;
}
[/field:id]
</ul>
</li>
{/dede:sql}
</ul>
</li>
{/dede:channelartlist}
“`。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1099441.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复