sql,SELECT * FROM
dede_arctype WHERE
parentid = (SELECT
id FROM
dede_arctype WHERE
typename = '父栏目名');,
`,,请将
‘父栏目名’`替换为你要查询的具体父栏目名称。此查询将返回所有属于指定父栏目的子栏目信息。如果你需要进一步的帮助,请提供更详细的信息。一、获取当前栏目及所有子栏目的文章数量
1、函数代码:
在/include/common.func.php
或/include/extend.func.php
中添加以下代码:
function getTotalArcByTid($tid, $level=TRUE) { global $dsql; $level==TRUE && $tid = GetSonTypeID($tid); $sql = "SELECT count(id) as total from#@__archives
where typeid in($tid)"; $result = $dsql>GetOne($sql); return $result['total']; } function GetSonTypeID($tid){ global $dsql; $dsql>SetQuery("Select id From#@__arctype
where reid in($tid) And ishidden<>1 order by sortrank"); $dsql>Execute($tid); $typeid = ''; while($row=$dsql>GetObject($tid)){ $typeid .= "{$row>id},"; $typeid .= GetSonTypeID($row>id); } return trim($typeid,','); }
然后在模板中调用getTotalArcByTid(1)
即可获取当前栏目及其子栏目下的文章总数,其中1
为当前栏目的ID。
二、获取当前栏目的所有子栏目信息
1、使用channelartlist标签结合SQL语句:
在模板中使用{dede:channelartlist}
标签来获取子栏目信息,示例如下:
{dede:channelartlist typeid='top' row='10'} <li><a href="{dede:field name='typeurl'/}">{dede:field name='typename' /}</a> <ul> {dede:sql sql='select * from dede_arctype where reid =~id~ '} <li> <a href=[field:typedir function='str_replace("{cmspath}","",@me)'/]>[field:typename/]</a> <ul> [field:id runphp='yes'] global $dsql; $id=@me; $sql='Select * from dede_arctype where reid='.$id.' ORDER BY id limit 0,20'; $dsql>SetQuery($sql); $dsql>Execute(); while($row = $dsql>GetArray()){ $url = str_replace("{cmspath}","",$row['typedir']); $str .='<li><a href="'.$url.'">'.$row['typename'].'</a></li>'; @me = $str; } if(@me == $id){ //避免3级栏目为空时 写出分类ID,这里加以判断 @me =''; } [/field:id] </ul> </li> {/dede:sql} </ul> </li> {/dede:channelartlist}
上述代码中,typeid='top'
表示获取顶级栏目,row='10'
表示获取的记录数,可根据实际情况调整,通过dede:sql
标签执行自定义SQL语句,获取二级和三级子栏目的信息,并循环输出子栏目的名称和链接。
2、通过自定义函数获取子栏目信息:
可以编写自定义函数来获取子栏目信息,
function getSubChannels($parentId) { global $dsql; $subChannels = []; $dsql>SetQuery("Select * from dede_arctype where reid = $parentId and ishidden<>1 order by sortrank"); $dsql>Execute(); while ($row = $dsql>GetArray()) { $subChannels[] = [ 'id' => $row['id'], 'name' => $row['typename'], 'url' => str_replace("{cmspath}", "", $row['typedir']), ]; } return $subChannels; }
在需要获取子栏目的地方调用该函数,传入父栏目的ID,即可得到子栏目的数组信息。
三、相关问题与解答
1、问题:如果我只想获取某一特定层级的子栏目,该如何修改代码?
解答:如果是只想获取某一特定层级的子栏目,比如只获取二级子栏目,可以在获取子栏目的SQL查询语句中增加条件限制,以获取二级子栏目为例,可以将原来的reid = $parentId
修改为reid = $parentId and level = 2
(假设level
字段表示栏目层级),这样就可以只获取二级子栏目的信息,对于其他层级的子栏目,同样可以根据level
字段的值进行相应的修改。
2、问题:在获取子栏目信息时,如何按照自定义的排序方式进行排序?
解答:可以通过修改获取子栏目的SQL查询语句中的order by
子句来实现自定义排序,默认情况下,可能是按照sortrank
字段进行排序,如果想按照其他字段或自定义规则排序,只需要在order by
后面指定相应的字段或表达式即可,如果想按照栏目名称的字母顺序进行排序,可以将order by sortrank
修改为order by typename
。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/122603.html