在使用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的功能!
如果您还有其他疑问或需要进一步的帮助,请随时联系技术支持团队。
注意:在实际操作过程中,请确保备份好原始文件,以免因修改导致系统出现问题。