织梦dedecms如何调用指定三级子栏目或多个栏目导航
如遇下载链接蓝奏网盘打不开lanzous替换成lanzoux尝试! 广告
经常会遇到需要调用多个指定的顶级栏目导航,那我们如何实现呢?关于DEDECMS实现嵌套获取栏目及其子栏目列表的问题,在论坛找到了以前版本的修改方法,于是修改了一下,现在分享给大家。请看实例代码:
修改文件:\include\taglib目录下的channel.lib.php,请将以下代码全部复制替换上述文件。
以下为引用的内容:
001
<?php
002
function lib_channel(&$ctag,&$refObj)
003
{
004
global $_sys_globals,$envs,$dsql;
005
$attlist = “typeid|0,reid|0,row|100,col|1,type|son,currentstyle|”;
006
FillAttsDefault($ctag->CAttribute->Items,$attlist);
007
extract($ctag->CAttribute->Items, EXTR_SKIP);
008
$innertext = $ctag->GetInnerText();
009
$cacheid = trim($cacheid);
010
if($cacheid !=”) {
011
$likeType = GetCacheBlock($cacheid);
012
if($likeType != ”) return $likeType;
013
}
014
$reid = 0;
015
$topid = 0;
016
if(empty($typeid) && $envs[‘typeid’]!=0)
017
{
018
$typeid = $envs[‘typeid’];
019
$reid = $envs[‘reid’];
020
}else{
021
$reid=0;
022
}
023
if($type==”||$type==’sun’) $type=”son”;
024
if($innertext==”) $innertext = GetSysTemplets(“channel_list.htm”);
025
if($reid==0 && $typeid>0)
026
{
027
$dbrow = $dsql->GetOne(“Select reid From dede_arctype where id=’$typeid’ “);
028
if(is_array($dbrow)) $reid = $dbrow[‘reid’];
029
}
030
$likeType = ”;
031
if($type==’top’)
032
{
033
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
034
From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row”;
035
}
036
else if($type==”son”)
037
{
038
//if($_sys_globals[‘typeid’]>0) $typeid = $_sys_globals[‘typeid’];
039
if($typeid==0) {
040
return ”;
041
}
042
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
043
From dede_arctype where reid=’$typeid’ And ishidden<>1 order by sortrank asc limit 0,$row”;
044
}
045
else if($type==”self”)
046
{
047
if($reid==0) {
048
return ”;
049
}
050
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
051
From `dede_arctype` where reid=’$reid’ And ishidden<>1 order by sortrank asc limit 0,$row”;
052
}
053
//And id<>’$typeid’
054
$needRel = false;
055
$dtp2 = new DedeTagParse();
056
$dtp2->SetNameSpace(“field”,”[“,”]”);
057
$dtp2->LoadSource($innertext);
058
$dsql2 = clone $dsql;
059
$dsql->SetQuery($sql);
060
$dsql->Execute();
061
$line = $row;
062
//检查是否有子栏目,并返回rel提示(用于二级菜单)
063
if(ereg(‘:rel’, $innertext)) $needRel = true;
064
065
if(empty($sql)) return ”;
066
$dsql->SetQuery($sql);
067
$dsql->Execute();
068
069
$totalRow = $dsql->GetTotalRow();
070
$GLOBALS[‘autoindex’] = 0;
071
for($i=0;$i < $line;$i++)
072
{
073
if($col>1) $likeType .= “<dl>\r\n”;
074
for($j=0;$j<$col;$j++)
075
{
076
if($col>1) $likeType .= “<dd>\r\n”;
077
if($row=$dsql->GetArray())
078
{
079
$row[‘sonids’] = $row[‘rel’] = ”;
080
if($needRel)
081
{
082
$row[‘sonids’] = GetSonIds($row[‘id’], 0, false);
083
if($row[‘sonids’]==”) $row[‘rel’] = ”;
084
else $row[‘rel’] = ” rel=’dropmenu{$row[‘id’]}'”;
085
}
086
//处理同级栏目中,当前栏目的样式
087
if( ($row[‘id’]==$typeid || ($topid==$row[‘id’] && $type==’top’) ) && $currentstyle!=” )
088
{
089
if($currentstyle!=”)
090
{
091
$linkOkstr = $currentstyle;
092
$row[‘typelink’] = GetOneTypeUrlA($row);
093
$linkOkstr = str_replace(“~rel~”,$row[‘rel’],$linkOkstr);
094
$linkOkstr = str_replace(“~id~”,$row[‘id’],$linkOkstr);
095
$linkOkstr = str_replace(“~typelink~”,$row[‘typelink’],$linkOkstr);
096
$linkOkstr = str_replace(“~typename~”,$row[‘typename’],$linkOkstr);
097
$likeType .= $linkOkstr;
098
}
099
}else
100
{
101
$row[‘typelink’] = $row[‘typeurl’] = GetOneTypeUrlA($row);
102
if(is_array($dtp2->CTags))
103
{
104
foreach($dtp2->CTags as $tagid=>$ctag){
105
if(isset($row[$ctag->GetName()]))
106
{
107
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
108
}
109
elseif (preg_match(‘/^sonchannel[0-9]*$/’,$ctag->GetName()))
110
{
111
$dtp2->Assign($tagid,lib_channel_son($ctag,$row[‘id’],$dsql2));
112
}
113
}
114
}
115
$likeType .= $dtp2->GetResult();
116
}
117
}
118
if($col>1) $likeType .= “</dd>\r\n”;
119
$GLOBALS[‘autoindex’]++;
120
}//Loop Col
121
if($col>1)
122
{
123
$i += $col – 1;
124
$likeType .= ” </dl>\r\n”;
125
}
126
}//Loop for $i
127
reset($dsql2);
128
$dsql->FreeResult();
129
return $likeType;
130
}
131
function lib_channel_son($ctag,$typeid = 0,$dsql2)
132
{
133
$attlist = “row|100,col|1,currentstyle|”;
134
FillAttsDefault($ctag->CAttribute->Items,$attlist);
135
extract($ctag->CAttribute->Items, EXTR_SKIP);
136
$innertext = $ctag->GetInnerText();
137
$dsql3 = clone $dsql2;
138
$likeType = ”;
139
//if($_sys_globals[‘typeid’]>0) $typeid = $_sys_globals[‘typeid’];
140
if($typeid==0) {
141
return ”;
142
}
143
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
144
From dede_arctype where reid=’$typeid’ And ishidden<>1 order by sortrank asc limit 0,$row”;
145
//And id<>’$typeid’
146
$dtp2 = new DedeTagParse();
147
$dtp2->SetNameSpace(“field”,”[“,”]”);
148
$dtp2->LoadSource($innertext);
149
$dsql2->SetQuery($sql);
150
$dsql2->Execute();
151
$line = $row;
152
for($i=0;$i < $line;$i++)
153
{
154
if($col>1) $likeType .= “<dl>\r\n”;
155
for($j=0;$j<$col;$j++)
156
{
157
if($col>1) $likeType .= “<dd>\r\n”;
158
if($row=$dsql2->GetArray())
159
{
160
$row[‘typelink’] = $row[‘typeurl’] = GetOneTypeUrlA($row);
161
if(is_array($dtp2->CTags))
162
{
163
foreach($dtp2->CTags as $tagid=>$ctag){
164
if(isset($row[$ctag->GetName()]))
165
{
166
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
167
}
168
elseif (preg_match(‘/^sonchannel[0-9]*$/’,$ctag->GetName()))
169
{
170
$dtp2->Assign($tagid,lib_channel_son($ctag,$row[‘id’],$dsql3));
171
}
172
}
173
}
174
$likeType .= $dtp2->GetResult();
175
}
176
if($col>1) $likeType .= “</dd>\r\n”;
177
}//Loop Col
178
if($col>1)
179
{
180
$i += $col – 1;
181
$likeType .= ” </dl>\r\n”;
182
}
183
}//Loop for $i
184
reset($dsql3);
185
$dsql2->FreeResult();
186
return $likeType;
187
}
188
?>
注:如果你安装的dedecms使用的表前缀进行修改过,需要把上面代码中的 dede_arctype 前缀修改掉才行。
模板调用 [field:sonchannel0] [/field:sonchannel0] 这个是用来取子栏目用得(使用[sonchannel+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签)
这个的作用就是当你的栏目有很多子栏目 无限分级的时候方便你取子栏目的
例子
01
{dede:channel type=’son’ typeid=’22’}
02
[field:typename/]
03
<ul>
04
[field:sonchannel0]
05
<li><a href=”[field:typelink/]”>[field:typename/]</a></li>
06
[field:sonchannel1]
07
<li><a href=”[field:typelink/]”>—[field:typename/]</a></li>
08
[field:sonchannel2]
09
<li><a href=”[field:typelink/]”>===[field:typename/]</a></li>
10
[field:sonchannel3]
11
<li><a href=”[field:typelink/]”>===[field:typename/]</a></li>
12
[/field:sonchannel3]
13
[/field:sonchannel2]
14
[/field:sonchannel1]
15
[/field:sonchannel0]
16
</ul>
17
{/dede:channel}
NOTICE:【咨询风格酷】客服微信:wwwxmamnet
NOTICE:【风格酷模板网②群】QQ群:288678775
☉免责声明:本站所有模板均来自用户分享和网络收集,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服,我们核实后会立即删除。
☉如果源码网盘地址失效!或有其他问题,请点我报错,谢谢合作!
☉人民币与积分汇率为1比10,即1元=10积分.有任何疑问请联系客服!
☉如有其他问题,请加网站客服QQ(1131734965)进行交流。
☉本站提供的源码、模板、软件工具等其他资源,都不包含技术服务,请大家谅解!
☉源码、模板等资源会随着技术、环境的升级而存在部分问题,还请慎重选择。