当前位置:首页 > 行业动态 > 正文

如何在Dedecms织梦模板中实现调用当前栏目文章数量的功能?

在dedecms织梦模板中,调用当前栏目文章数量的代码为: {dede:channel type='top' currentstyle="" row='10'}[field:typename/]( [field:typecount/]){/dede:channel}

在dedecms织梦模板中调用当前栏目文章数量是一个常见的需求,特别是在网站首页、栏目页或文章列表页上显示每个栏目下的文章总数,这不仅可以提升用户体验,还能帮助用户快速了解各栏目的内容量,本文将详细讲解如何在dedecms织梦模板中实现这一功能。

一、修改include/common.func.php文件

为了统计当前栏目及其子栏目的文章数量,我们需要在dedecms的include/common.func.php文件中添加两个自定义函数:GetTotalArc()dynamic_num(),以下是具体步骤:

1、 :找到文件末尾,在?>之前添加以下代码:

// 统计栏目文章数
function GetTotalArc($tid){
    global $dsql;
    $sql = GetSonIds($tid);
    $row = $dsql>GetOne("SELECT count(id) as dd FROM#@__archives WHERE typeid IN ($sql)");
    return $row['dd'];
}
// 统计当前栏目信息数
function dynamic_num($current_id){
    global $dsql;
    // 读取当前栏目的子ID
    $sql = "SELECT id FROM#@__arctype WHERE id='$current_id' OR 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#@__archives WHERE typeid IN ($ty)");
    if(is_array($t_num)){
        return " ".$t_num['num']." ";
    }else{
        return "0";
    }
}

2、解释代码

GetTotalArc($tid)函数用于统计指定栏目ID及其所有子栏目的文章数量,通过调用GetSonIds($tid)获取子栏目ID,然后使用SQL查询统计这些栏目中的文章数量。

dynamic_num($current_id)函数用于统计当前栏目及其子栏目的文章数量,通过查询#@__arctype表获取当前栏目及其子栏目的ID,然后统计这些栏目中的文章数量。

二、在模板文件中调用统计函数

在dedecms模板文件中,可以使用上述定义的函数来显示当前栏目及其子栏目的文章数量,以下是一些常见的调用方法:

1、在首页模板中调用

假设首页模板文件为index.htm,可以在需要显示文章数量的地方添加以下代码:

<div>{dede:field name='typename'/}</div><b>(该类拥有{dede:type}[field:id function="dynamic_num(@me)" /]{/dede:type}个文档)</b>
{dede:channel type='son' }
<li><a href="[field:typelink/]">[field:typename/]</a>(<span>[field:ID runphp='yes'] @me = GetTotalArc(@me);[/field:ID]</span>)</li>
{/dede:channel}

2、在栏目页模板中调用

假设栏目页模板文件为list_article.htm,可以在需要显示文章数量的地方添加以下代码:

<div>{dede:field name='typename'/}</div><b>(该类拥有{dede:type}[field:id function="dynamic_num(@me)" /]{/dede:type}个文档)</b>
{dede:channel type='son' }
<li><a href="[field:typelink/]">[field:typename/]</a>(<span>[field:ID runphp='yes'] @me = GetTotalArc(@me);[/field:ID]</span>)</li>
{/dede:channel}

3、在文章列表页模板中调用

假设文章列表页模板文件为list_article.htm,可以在需要显示文章数量的地方添加以下代码:

<div>{dede:field name='typename'/}</div><b>(该类拥有{dede:type}[field:id function="dynamic_num(@me)" /]{/dede:type}个文档)</b>
{dede:channel type='son' }
<li><a href="[field:typelink/]">[field:typename/]</a>(<span>[field:ID runphp='yes'] @me = GetTotalArc(@me);[/field:ID]</span>)</li>
{/dede:channel}

三、注意事项

1、安全性:在dedecms5.6及以后的版本中,由于加强了对SQL注入和安全的检查,直接在模板中使用复杂的SQL查询可能会遇到问题,推荐使用自定义函数的方式来实现统计功能。

2、性能:对于大型网站,频繁的数据库查询可能会影响性能,可以考虑使用缓存技术,如memcached,来提高性能。

3、兼容性:确保你的dedecms版本支持上述函数和方法,如果使用的是较旧的版本,可能需要进行相应的调整。

四、常见问题解答(FAQs)

1、Q1:如何在dedecms首页调用当前栏目及其所有子栏目的文章总数?

A1:可以通过在首页模板文件中调用dynamic_num()函数来实现。

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

这样可以在首页显示当前栏目及其所有子栏目的文章总数。

2、Q2:如何在dedecms文章列表页调用当前栏目及其所有子栏目的文章总数?

A2:可以通过在文章列表页模板文件中调用dynamic_num()函数来实现。

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

这样可以在文章列表页显示当前栏目及其所有子栏目的文章总数。

通过以上步骤,你可以在dedecms织梦模板中轻松实现调用当前栏目及其子栏目的文章数量,这不仅提升了用户体验,还能帮助用户更好地了解网站的结构和内容分布,希望本文对你有所帮助!

0