php,,
“,,这段代码可以根据当前栏目的ID、类型ID和频道类型,查询出其子栏目,并生成相应的侧导航列表。你需要将这段代码插入到你的模板文件中适当的位置,以实现三级目录和侧导航的调用功能。修改文件
1、找到并备份文件:在DedeCMS系统中,首先需要找到include/taglib/channel.lib.php
文件,在进行任何修改之前,务必对该文件进行备份,以防止出现意外情况导致网站无法正常运行。
2、替换代码:用以下代码替换channel.lib.php
文件中的所有内容:
“`php
function lib_channel(&$ctag,&$refObj) {
global $_sys_globals,$envs,$dsql;
$attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|";
FillAttsDefault($ctag>CAttribute>Items,$attlist);
extract($ctag>CAttribute>Items, EXTR_SKIP);
$innertext = $ctag>GetInnerText();
$cacheid = trim($cacheid);
if($cacheid !=”) {
$likeType = GetCacheBlock($cacheid);
if($likeType != ”) return $likeType;
}
$reid = 0;
$topid = 0;
if(empty($typeid) && $envs[‘typeid’]!=0) {
$typeid = $envs[‘typeid’];
$reid = $envs[‘reid’];
}else{
$reid=0;
}
if($type==”||$type==’sun’) $type="son";
if($innertext==”) $innertext = GetSysTemplets("channel_list.htm");
if($reid==0 && $typeid>0) {
$dbrow = $dsql>GetOne("Select reid From dede_arctype where id=’$typeid’ ");
if(is_array($dbrow)) $reid = $dbrow[‘reid’];
}
$likeType = ”;
if($type==’top’) {
$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row";
} elseif($type=="son") {
if($_sys_globals[‘typeid’]>0) $typeid = $_sys_globals[‘typeid’];
if($typeid==0) {
return ”;
}
$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description From dede_arctype where reid=’$typeid’ And ishidden<>1 order by sortrank asc limit 0,$row";
} elseif($type=="self") {
if($reid==0) {
return ”;
}
$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description Fromdede_arctype
where reid=’$reid’ And ishidden<>1 order by sortrank asc limit 0,$row";
}
//And id<>’$typeid’
$needRel = false;
$dtp2 = new DedeTagParse();
$dtp2>SetNameSpace("field","[","]");
$dtp2>LoadSource($innertext);
$dsql2 = clone $dsql;
$dsql>SetQuery($sql);
$dsql>Execute();
$line = $row;
//检查是否有子栏目,并返回rel提示(用于二级菜单)
if(ereg(‘:rel’, $innertext)) $needRel = true;
if(empty($sql)) return ”;
$dsql>SetQuery($sql);
$dsql>Execute();
$totalRow = $dsql>GetTotalRow();
$GLOBALS[‘autoindex’] = 0;
for($i=0;$i < $line;$i++) {
if($col>1) $likeType .= "<dl>r
";
for($j=0;$j<$col;$j++) {
if($col>1) $likeType .= "<dd>r
";
if($row=$dsql>GetArray()) {
$row[‘sonids’] = $row[‘rel’] = ”;
if($needRel) {
$row[‘sonids’] = GetSonIds($row[‘id’], 0, false);
if($row[‘sonids’]==”) $row[‘rel’] = ”;
else $row[‘rel’] = " rel=’dropmenu{$row[‘id’]}’";
}
//处理同级栏目中,当前栏目的样式
if( ($row[‘id’]==$typeid || ($topid==$row[‘id’] && $type==’top’) ) && $currentstyle!=” ) {
if($currentstyle!=”) {
$linkOkstr = $currentstyle;
$row[‘typelink’] = GetOneTypeUrlA($row);
$linkOkstr = str_replace("~rel~",$row[‘rel’],$linkOkstr);
$linkOkstr = str_replace("~id~",$row[‘id’],$linkOkstr);
$linkOkstr = str_replace("~typelink~",$row[‘typelink’],$linkOkstr);
$linkOkstr = str_replace("~typename~",$row[‘typename’],$linkOkstr);
$likeType .= $linkOkstr;
}
}else {
$row[‘typelink’] = $row[‘typeurl’] = GetOneTypeUrlA($row);
if(is_array($dtp2>CTags)) {
foreach($dtp2>CTags as $tagid=>$ctag){
if(isset($row[$ctag>GetName()])) {
$dtp2>Assign($tagid,$row[$ctag>GetName()]);
}
}
}
}
if($col>1) $likeType .= " r
";
}
}
if($col>1) $likeType .= "</dl>r
";
}
return $likeType;
}
“`
调用方法
1、顶级栏目调用:在模板中使用以下代码调用所有顶级栏目。
“`html
{dede:channel type=’top’ currentstyle="<li class=’thisclass’><a href=’~typelink~’>~typename~</a> </li>"}/li>
“`
2、指定顶级栏目ID调用:使用以下代码调用指定ID的顶级栏目。
“`html
{dede:type typeid=’1′}<a href="[field:typelink /]">[field:typename /]</a>{/dede:type}
“`
3、二级栏目调用:在模板中使用以下代码调用指定顶级栏目下的二级栏目。
“`html
<li>{dede:type typeid=’1′}<a href="[field:typelink/]">[field:typename/]</a></li>{/dede:type}
<ul style="display: none;">{dede:channelartlist typeid=’top’ typeid=’1′}<li><a href='{dede:field name=’typeurl’/}’>{dede:field name=’typename’/}</a></li>{/dede:channelartlist}</ul></li>
“`
4、三级栏目调用:在模板中使用以下代码实现三级栏目的调用。
“`html
<div id="navMenu">
<li {dede:field name=typeid runphp="yes"}(@me=="")? @me=" class=’on’":@me="";{/dede:field}><a href="/">首页</a></li>
{dede:channelartlist typeid=’top’ row=’10’ currentstyle="home"} //currentstyle 可以实现栏目切换时改变class状态,但需要修一些文件,具体看下面一段代码
<li class='{dede:field.currentstyle/}’><a href="{dede:field name=’typeurl’/}" rel=’dropmenu’>{dede:field name=’typename’ /}</a>
<div id="erji" class="erji hide" style="position: absolute;width: 200px">
{dede:sql sql=’select * from dede_arctype where reid =~id~ ‘}
<dl style="position: relative;height: 30px">
<a href="[field:typedir function=’str_replace("{cmspath}","",@me)’/]" target=’_self’ title="[field:typename/]" style="width: 90%;paddingleft:10%;textalign:left;lineheight: 30px">[field:typename/]</a>
<div id="sanji" class="hide" style="position: absolute;width: 200px;left: 200px;background: #0D6598;">
[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 .='<a href="’.$url.’" style="display: block;width:90%;paddingleft: 10%;textalign: left;lineheight: 30px;">’.$row[‘typename’].'</a>’;
@me = $str;
}
if(@me == $id){ //避免3级栏目为空时 写出分类ID,这里加以判断
@me =”;
}
[/field:id]
</div>
</div>
</dl>
</li>
{/dede:sql}
</div>
</div>
“`
下表是织梦DedeCMS 5.7版本中三级目录、侧导航调用的详细方法:
步骤 | 操作说明 | 示例代码 | 备注 |
备份文件 | 找到并备份include/taglib/channel.lib.php 文件 | N/A | 确保安全 |
替换代码 | 用提供的代码替换channel.lib.php 文件中的内容 | 见上文代码块 | 核心步骤 |
调用顶级栏目 | 在模板中调用所有顶级栏目 | {dede:channel type='top' currentstyle="
| 基本调用 |
调用指定顶级栏目ID | 调用指定ID的顶级栏目 | {dede:type typeid='1'}[field:typename /]{/dede:type} | 特定ID调用 |
调用二级栏目 | 在模板中调用指定顶级栏目下的二级栏目 |
| 二级栏目展示 |
调用三级栏目 | 实现三级栏目的调用 |
| 高级调用 |
解决DedeCMS 5.7 三级目录和侧导航的调用方法
三级目录调用
DedeCMS 5.7的三级目录调用通常通过模板标签实现,以下是一个详细的调用步骤:
1. 准备工作
确保您的DedeCMS 5.7系统已经安装并配置好。
打开您需要添加三级目录的模板文件。
2. 添加模板标签
在模板文件中,使用以下标签来调用三级目录:
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
这里的{dede:field name='typename'/}
将显示分类名称,而{dede:field name='typeurl'/}
将显示分类的链接。
3. 调用三级分类
如果需要显示三级分类,可以使用以下标签:
{dede:arclist typeid='@me' row='10' titlelen='30' orderby='id'} <a href="[field:typelink/]">[field:typename/]</a> {/dede:arclist}
这里,typeid='@me'
表示当前页面的分类ID,row='10'
表示每页显示10条记录,titlelen='30'
表示标题长度为30个字符,orderby='id'
表示按ID排序。
侧导航调用
侧导航的调用同样可以通过模板标签实现,以下是一个详细的调用步骤:
1. 准备工作
打开您需要添加侧导航的模板文件。
2. 添加侧导航标签
在模板文件中,使用以下标签来调用侧导航:
{dede:channel type='son' id='1'} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel}
这里的type='son'
表示获取当前分类的所有子分类,id='1'
表示从ID为1的分类开始获取。
3. 调用侧导航
如果需要显示更详细的侧导航,可以结合使用以下标签:
{dede:channelartlist typeid='@me' row='10' titlelen='30'} <a href="[field:arcurl/]">[field:title/]</a> {/dede:channelartlist}
这里,typeid='@me'
表示当前页面的分类ID,row='10'
表示每页显示10条记录,titlelen='30'
表示标题长度为30个字符。
通过以上步骤,您可以在DedeCMS 5.7中实现三级目录和侧导航的调用,请根据实际情况调整标签的参数,以满足您的需求。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1121881.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复