DEDECMS中怎么獲取無限欄目子分類

DEDECMS中怎么獲取無限欄目子分類

dedecms中怎么獲取無限欄目子分類?

做企業網站大部分是使用DEDECMS,今天在給客戶設計網站時,把DEDE自動內鏈和URL全拼格式搞定后,又遇到了個小問題,因為產品分類最多有四級,客戶要求在左側有個彈出式菜單調用各級子分類出來,而DEDECMS默認只能調用一級分類。經過努力,百度+GOOGLE+自己腦袋,終于搞定了這個東西,不敢獨享,發出來給有需要的朋友分享。?

推薦學習:織夢cms

首先要把/include/taglib/channerl.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-&gt;Items,$attlist);? extract($ctag-&gt;CAttribute-&gt;Items,?EXTR_SKIP);? $innertext?=?$ctag-&gt;GetInnerText();? if(empty($typeid)?&amp;&amp;?$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?&amp;&amp;?$typeid&gt;0)? {? $dbrow?=?$dsql-&gt;GetOne(“Select?reid?From?ying_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?ying_arctype?where?reid=0?And?ishidden1?order?by?sortrank?asc?limit?0,$row”;? }? else?if($type==”son”)? {? //if($_sys_globals['typeid']&gt;0)?$typeid?=?$_sys_globals['typeid'];? if($typeid==0)?{? return?”;? }? $sql?=?“Select?id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description? From?ying_arctype?where?reid=’$typeid’?And?ishidden1?order?by?sortrank?asc?limit?0,$row”;? }? else?if($type==”self”)? {? if($reid==0)?{? return?”;? }? $sql?=?“Select?id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description? From?‘ying_arctype’?where?reid=’$reid’?And?ishidden1?order?by?sortrank?asc?limit?0,$row”;? }? //And?id’$typeid’? $dtp2?=?new?DedeTagParse();? $dtp2-&gt;SetNameSpace(“field”,”[","]“);? $dtp2-&gt;LoadSource($innertext);? $dsql2?=?clone?$dsql;? $dsql-&gt;SetQuery($sql);? $dsql-&gt;Execute();? $line?=?$row;? $GLOBALS['autoindex']?=?0;? for($i=0;$i?1)?$likeType?.=?“
rn”;? for($j=0;$j1)?$likeType?.=?“

rn”;? 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->CTags?as?$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?.=?“

rn”;? $GLOBALS[‘autoindex’]++;? }//Loop?Col? if($col>1)? {? $i?+=?$col?–?1;? $likeType?.=?”?

rn”;? }? }//Loop?for?$i? reset($dsql2);? $dsql->FreeResult();? return?$likeType;? }? function?lib_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?=?“Select?id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description? From?ying_arctype?where?reid=’$typeid’?And?ishidden1?order?by?sortrank?asc?limit?0,$row”;? //And?id’$typeid’? $dtp2?=?new?DedeTagParse();? $dtp2->SetNameSpace(“field”,”[“,”]“);? $dtp2->LoadSource($innertext);? $dsql2->SetQuery($sql);? $dsql2->Execute();? $line?=?$row;? for($i=0;$i?1)?$likeType?.=?“

rn”;? for($j=0;$j1)?$likeType?.=?“

rn”;? if($row=$dsql2->GetArray())? {? $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()]);? }? 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?.=?“

rn”;? }//Loop?Col? if($col>1)? {? $i?+=?$col?–?1;? $likeType?.=?”?

rn”;? }? }//Loop?for?$i? reset($dsql3);? $dsql2->FreeResult();? return?$likeType;? }? ?>

在模板里面用 [field:sonchannel0] [/field:sonchannel0] 調用,這個是用來取子欄目用得(使用【sonchannel+數字】作為標簽名是為了防止嵌套的時候無法正確解析標簽),這個的作用就是當你的欄目有很多子欄目無限分級的時候方便你取子欄目的。實例一下:?

代碼如下:


以上typeid中的數字改成你的大分類的ID即可,因為在DEDE官方論壇沒找到,所以這里發上來,希望能方便有用者。

注意:未免出錯修改文件前請做好備份,以上代碼可能有些引號又被自動轉成全角的了,請修改成半角的,或者可以找蕭涵索取此修改后的文件。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享