在使用DedeCMS建站时,有时需要统计当前栏目及其所有子栏目的文档数量,以便为用户提供清晰的信息反馈。虽然可以通过DedeCMS模板中的SQL标签实现这一功能,但由于系统对SQL注入和安全性的严格检查,某些复杂的查询可能无法正常执行。

那么,如何有效实现这一需求呢?答案是通过自定义函数来解决。以下是具体的操作步骤,可以帮助您轻松完成这项任务:

首先,打开DedeCMS程序的 include/common.func.php 文件,并在文件末尾添加以下代码:


// 统计栏目文章数 www.moke8.com
function GetTotalArc($tid){
    global $dsql;
    $sql = GetSonIds($tid);
    $row = $dsql->GetOne("Select count(id) as dd From `dede_archives` where typeid in({$sql})");
    return $row['dd'];
}

// 统计当前栏目信息数
function dynamic_num($current_id){
    global $dsql;
    // 读取当前栏目的子ID
    $sql = "SELECT id FROM `dede_arctype` WHERE id='$current_id' || topid='$current_id'";
    $dsql->SetQuery($sql);
    $dsql->Execute();
    while($row = $dsql->GetArray()){
        $arr[]=$row[id];
    }
    foreach($arr as $key=>$value){
        $type .= $value . ',';
    }
    $ty= "".$type."0";
    $t_num = $dsql->GetOne("select count(*) as num from `dede_archives` where typeid in($ty)");
    if(is_array($t_num)){
        return " ".$t_num[num]." ";
    } else {
        return "0" ;
    }
}

上述代码中新增了两个函数:一个用于统计栏目文章数(GetTotalArc),另一个用于统计当前栏目信息数(dynamic_num)。这两个函数可以在DedeCMS模板中像调用系统函数一样使用。

接下来,在模板中可以使用以下代码调用这些函数:


{dede:field name='typename'/}(该类拥有{dede:type}[field:id function="dynamic_num(@me)" /]{/dede:type}个文档)

{dede:channel type='son' }
  • )
  • {/dede:channel}

    以上代码实现了以下功能:

    • 显示当前栏目名称以及其包含的文档总数。
    • 列出所有子栏目,并显示每个子栏目的文档数量。

    通过这种方法,您可以更加灵活地控制栏目文档数量的展示方式,同时避免了直接使用SQL标签可能带来的安全问题。希望这篇文章能够帮助您更好地理解和使用DedeCMS的功能!

    如果您还有其他疑问或需要进一步的帮助,请随时联系技术支持团队。


    注意:在实际操作过程中,请确保备份好原始文件,以免因修改导致系统出现问题。