Heim  >  Artikel  >  CMS-Tutorial  >  So erhalten Sie unbegrenzte Spaltenunterkategorien in DEDECMS

So erhalten Sie unbegrenzte Spaltenunterkategorien in DEDECMS

藏色散人
藏色散人Original
2019-12-19 09:34:532096Durchsuche

So erhalten Sie unbegrenzte Spaltenunterkategorien in DEDECMS

Wie erhalte ich unbegrenzte Spaltenunterkategorien in DEDECMS?

Die meisten Unternehmenswebsites verwenden DEDECMS. Als ich heute eine Website für einen Kunden entwarf, stieß ich nach Abschluss der automatischen internen Verlinkung und der vollständigen URL-Rechtschreibformate auf ein kleines Problem, da es sich um die meisten Produkte handelt Es gibt vier Ebenen. Der Kunde hat gewünscht, dass auf jeder Ebene ein Popup-Menü zum Aufrufen von Unterkategorien vorhanden ist. DEDECMS kann jedoch standardmäßig nur die Kategorie der ersten Ebene aufrufen. Nach harter Arbeit, Baidu + GOOGLE + meinem eigenen Gehirn habe ich es endlich herausgefunden. Ich traue mich nicht, es für mich zu behalten, also werde ich es mit Freunden in Not teilen.

Empfohlenes Lernen: Dreamweaver cms

Ändern Sie zunächst den Code der Datei /include/taglib/channerl.lib.php wie folgt:

Der Code lautet wie folgt:

<?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(); 
if(empty($typeid) && $envs[&#39;typeid&#39;]!=0) 
{ 
$typeid = $envs[&#39;typeid&#39;]; 
$reid = $envs[&#39;reid&#39;]; 
}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 ying_arctype where id=’$typeid’ “); 
if(is_array($dbrow)) $reid = $dbrow[&#39;reid&#39;]; 
} 
$likeType = ”; 
if($type==’top’) 
{ 
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description 
From ying_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row”; 
} 
else if($type==”son”) 
{ 
//if($_sys_globals[&#39;typeid&#39;]>0) $typeid = $_sys_globals[&#39;typeid&#39;]; 
if($typeid==0) { 
return ”; 
} 
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description 
From ying_arctype where reid=’$typeid’ And ishidden<>1 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 ishidden<>1 order by sortrank asc limit 0,$row”; 
} 
//And id<>’$typeid’ 
$dtp2 = new DedeTagParse(); 
$dtp2->SetNameSpace(“field”,”[","]“); 
$dtp2->LoadSource($innertext); 
$dsql2 = clone $dsql; 
$dsql->SetQuery($sql); 
$dsql->Execute(); 
$line = $row; 
$GLOBALS[&#39;autoindex&#39;] = 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[&#39;id&#39;]==$typeid) //处理同级栏目中,当前栏目的样式 
{ 
if($currentstyle!=”) 
{ 
$linkOkstr = $currentstyle; 
$row[&#39;typelink&#39;] = GetOneTypeUrlA($row); 
$linkOkstr = str_replace(“~typelink~”,$row[&#39;typelink&#39;],$linkOkstr); 
$linkOkstr = str_replace(“~typename~”,$row[&#39;typename&#39;],$linkOkstr); 
$likeType .= $linkOkstr; 
} 
}else 
{ 
$row[&#39;typelink&#39;] = $row[&#39;typeurl&#39;] = 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[&#39;id&#39;],$dsql2)); 
} 
} 
} 
$likeType .= $dtp2->GetResult(); 
} 
} 
if($col>1) $likeType .= “</dd>\r\n”; 
$GLOBALS[&#39;autoindex&#39;]++; 
}//Loop Col 
if($col>1) 
{ 
$i += $col – 1; 
$likeType .= ” </dl>\r\n”; 
} 
}//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[&#39;typeid&#39;]>0) $typeid = $_sys_globals[&#39;typeid&#39;]; 
if($typeid==0) { 
return ”; 
} 
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description 
From ying_arctype where reid=’$typeid’ And ishidden<>1 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 < $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[&#39;typelink&#39;] = $row[&#39;typeurl&#39;] = 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[&#39;id&#39;],$dsql3)); 
} 
} 
} 
$likeType .= $dtp2->GetResult(); 
} 
if($col>1) $likeType .= “</dd>\r\n”; 
}//Loop Col 
if($col>1) 
{ 
$i += $col – 1; 
$likeType .= ” </dl>\r\n”; 
} 
}//Loop for $i 
reset($dsql3); 
$dsql2->FreeResult(); 
return $likeType; 
} 
?>

Verwenden Sie [field:sonchannel0] [/field:sonchannel0], um ihn in der Vorlage aufzurufen. Dies wird verwendet, um die Unterspalte abzurufen (verwenden Sie [sonchannel+number] als der Labelname, um das Einbetten zu verhindern. Die Tags können bei der Anwendung nicht korrekt analysiert werden. Der Zweck besteht darin, Ihnen die Auswahl von Unterspalten zu erleichtern, wenn Ihre Spalte viele Unterspalten mit unendlichen Ebenen hat. Geben wir ein Beispiel:

Der Code lautet wie folgt:

<ul id="left_nav"> 
{dede:channel type=&#39;son&#39; typeid=&#39;16&#39;} 
<li><a href="[field:typelink/]“>[field:typename/]</a> 
<ul> 
[field:sonchannel0] 
<li><a href="[field:typelink/]“>[field:typename/]</a> 
<ul> 
[field:sonchannel1] 
<li><a href="[field:typelink/]“>[field:typename/]</a> 
<ul> 
[field:sonchannel2] 
<li><a href="[field:typelink/]“>[field:typename/]</a> 
<ul> 
[field:sonchannel3] 
<li><a href="[field:typelink/]“>[field:typename/]</a></li> 
[/field:sonchannel3] 
</ul> 
</li> 
[/field:sonchannel2] 
</ul> 
</li> 
[/field:sonchannel1] 
</ul> 
</li> 
[/field:sonchannel0] 
</ul> 
</li> 
{/dede:channel} 
</ul>

Ändern Sie einfach die Nummer in der obigen Typ-ID in die ID Ihrer Hauptkategorie, da ich sie in der offiziellen Kategorie nicht finden konnte DEDE-Forum, ich habe es hier gepostet, ich hoffe, es kann hilfreich und nützlich sein.

Hinweis: Bitte erstellen Sie eine Sicherungskopie, bevor Sie die Datei ändern. Im Falle eines Fehlers werden einige Anführungszeichen im obigen Code möglicherweise automatisch in die volle Breite konvertiert. Bitte ändern Sie sie in die halbe Breite. Alternativ können Sie Xiao fragen Han, um die geänderte Datei zu erhalten.

Das obige ist der detaillierte Inhalt vonSo erhalten Sie unbegrenzte Spaltenunterkategorien in DEDECMS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn