各位,大家好,这个功能是我在做织梦时用到的功能,不知道我的标题说清楚没有。这里解释一下:
一级栏目(顶级栏目)
二级栏目1
三级栏目1.1
四级栏目1.1.1
文章01…
二级栏目2
三级栏目2.1
四级栏目2.1.1
文章01…
当我点击四级栏目1.1.1的时候,这里获取到的是二级栏目1,即当前栏目的顶级栏目的二级栏目,又比如:我点击四级栏目2.1.1的文章的时候,这里获取的也是二级栏目2,就是这个意思。不管点击什么都获取到当前栏目的顶级栏目的二级栏目,不知道大家是否明白?
注意:我这里只做到了三级栏目(不包含顶级栏目),就是只能获取三级栏目以内的名称及下面的所有文章。如果是二级,那就显示二级栏目及它的文章。
{dede:channelartlist typeid='mflag' currentstyle='current'}
<li class='a_a1 {dede:field.currentstyle/}'><a href="{dede:field name='typeurl'/}">{dede:field name='typename' /}</a>
<!-- 判断当前栏目是否下一级 -->
{dede:field name=typeid runphp="yes"}
global $dsql;
$sql = "SELECT id From `dede_arctype` WHERE reid='@me' And ishidden<>1 order by sortrank asc limit 0, 100 ";
$is_row = $dsql->GetOne($sql);
if(is_array($is_row)){
@me='';
}else{
$sql = "SELECT arc.* FROM `dede_archives` arc where arc.arcrank>-1 AND arc.typeid = @me ORDER BY arc.id desc";
$dsql->SetQuery($sql);
$dsql->Execute('t');
$result = '<ul>';
while($row = $dsql->GetArray('t'))
{
$arcurl = GetOneArchive($row['id']);
$result .= <<< TPL
<li class="a_a2"><a href="{$arcurl['arcurl']}">{$row['title']}</a></li>
TPL;
}
$result.='</ul>';
@me = $result;
}
{/dede:field}
{dede:sql sql='select * from dede_arctype where reid =~id~ '}
<ul>
<li class="a_a2"><a href="[field:typeurl/]">[field:typename/]</a>
<ul>
[field:id runphp=yes]
global $dsql;
$sql = "SELECT arc.* FROM `dede_archives` arc where arc.arcrank>-1 AND arc.typeid = @me ORDER BY arc.id desc";
$dsql->SetQuery($sql);
$dsql->Execute('t');
$result = '';
while($row = $dsql->GetArray('t'))
{
$arcurl = GetOneArchive($row['id']);
$result .= <<< TPL
<li class="a_a3"><a href="{$arcurl['arcurl']}">{$row['title']}</a></li>
TPL;
}
@me = $result;
[/field:id]
</ul>
</li>
</ul>
{/dede:sql}
</li>
{/dede:channelartlist}
解释:
以上是代码中第一行typeid=‘mflag’ 它是代表获取当前栏目的顶级栏目的二级栏目的ID,这里要增加代码。
在include/taglib/channelartlist.lib.php中增加以下代码:
if($typeid=='mflag'){
$mrow = $dsql->GetOne("SELECT reid,topid FROM dede_arctype WHERE id= '$tid' ");
if ($mrow['reid'] == $mrow['topid']){
$typeid=$tid;
}else{
$m2row = $dsql->GetOne("SELECT reid,topid,id FROM dede_arctype WHERE id= $mrow[reid]");
if($m2row['reid']==$m2row['topid']){
$typeid=$m2row['id'];
}else{
$m3row = $dsql->GetOne("SELECT reid,topid,id FROM dede_arctype WHERE id= $m2row[reid]");
if($m3row['reid']==$m3row['topid']){
$typeid=$m3row['id'];
}
}
}
}