dedecms中怎么获取无限栏目子分类?
做企业网站大部分是使用DEDECMS,今天在给客户设计网站时,把DEDE自动内链和URL全拼格式搞定后,又遇到了个小问题,因为产品分类最多有四级,客户要求在左侧有个弹出式菜单调用各级子分类出来,而DEDECMS默认只能调用一级分类。经过努力,百度+GOOGLE+自己脑袋,终于搞定了这个东西,不敢独享,发出来给有需要的朋友分享。
推荐学习:织梦cms
首先要把/include/taglib/channerl.lib.php文件的代码修改成以下的:
代码如下:
<?phpfunctionlib_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();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(“SelectreidFromying_arctypewhereid=’$typeid’“);if(is_array($dbrow))$reid=$dbrow['reid'];}$likeType=”;if($type==’top’){$sql=“Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,descriptionFromying_arctypewherereid=0Andishidden<>1orderbysortrankasclimit0,$row”;}elseif($type==”son”){//if($_sys_globals['typeid']>0)$typeid=$_sys_globals['typeid'];if($typeid==0){return”;}$sql=“Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,descriptionFromying_arctypewherereid=’$typeid’Andishidden<>1orderbysortrankasclimit0,$row”;}elseif($type==”self”){if($reid==0){return”;}$sql=“Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,descriptionFrom‘ying_arctype’wherereid=’$reid’Andishidden<>1orderbysortrankasclimit0,$row”;}//Andid<>’$typeid’$dtp2=newDedeTagParse();$dtp2->SetNameSpace(“field”,”[","]“);$dtp2->LoadSource($innertext);$dsql2=clone$dsql;$dsql->SetQuery($sql);$dsql->Execute();$line=$row;$GLOBALS['autoindex']=0;for($i=0;$i<$line;$i++){if($col>1)$likeType.=“<dl>\r\n”;for($j=0;$j<$col;$j++){if($col>1)$likeType.=“<dd>\r\n”;if($row=$dsql->GetArray()){if($type==’self’&&$row['id']==$typeid)//处理同级栏目中,当前栏目的样式{if($currentstyle!=”){$linkOkstr=$currentstyle;$row['typelink']=GetOneTypeUrlA($row);$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->CTagsas$tagid=>$ctag){if(isset($row[$ctag->GetName()])){$dtp2->Assign($tagid,$row[$ctag->GetName()]);}elseif(preg_match(‘/^sonchannel[0-9]*$/’,$ctag->GetName())){$dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2));}}}$likeType.=$dtp2->GetResult();}}if($col>1)$likeType.=“</dd>\r\n”;$GLOBALS['autoindex']++;}//LoopColif($col>1){$i+=$col–1;$likeType.=”</dl>\r\n”;}}//Loopfor$ireset($dsql2);$dsql->FreeResult();return$likeType;}functionlib_channel_son($ctag,$typeid=0,$dsql2){$attlist=“row|100,col|1,currentstyle|”;FillAttsDefault($ctag->CAttribute->Items,$attlist);extract($ctag->CAttribute->Items,EXTR_SKIP);$innertext=$ctag->GetInnerText();$dsql3=clone$dsql2;$likeType=”;//if($_sys_globals['typeid']>0)$typeid=$_sys_globals['typeid'];if($typeid==0){return”;}$sql=“Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,descriptionFromying_arctypewherereid=’$typeid’Andishidden<>1orderbysortrankasclimit0,$row”;//Andid<>’$typeid’$dtp2=newDedeTagParse();$dtp2->SetNameSpace(“field”,”[","]“);$dtp2->LoadSource($innertext);$dsql2->SetQuery($sql);$dsql2->Execute();$line=$row;for($i=0;$i<$line;$i++){if($col>1)$likeType.=“<dl>\r\n”;for($j=0;$j<$col;$j++){if($col>1)$likeType.=“<dd>\r\n”;if($row=$dsql2->GetArray()){$row['typelink']=$row['typeurl']=GetOneTypeUrlA($row);if(is_array($dtp2->CTags)){foreach($dtp2->CTagsas$tagid=>$ctag){if(isset($row[$ctag->GetName()])){$dtp2->Assign($tagid,$row[$ctag->GetName()]);}elseif(preg_match(‘/^sonchannel[0-9]*$/’,$ctag->GetName())){$dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3));}}}$likeType.=$dtp2->GetResult();}if($col>1)$likeType.=“</dd>\r\n”;}//LoopColif($col>1){$i+=$col–1;$likeType.=”</dl>\r\n”;}}//Loopfor$ireset($dsql3);$dsql2->FreeResult();return$likeType;}?>