DEDECMS 获取当前栏目及所有子栏目的文章数量

因DEDEV5起,加强了对SQL注入和安全的检查,导致无法查询一些正常的子查询的SQL。

以下代码用来解决查询当前栏目及当前栏目下所有子栏目的文章总数,添加到/include/common.func.php 
或者 
/include/extend.func.php中,然后在模板中调用getTotalArcByTid(1)。

/*
* 返回符合记录的文章数量
* @description DEDE不允许执行子查询,解决栏目下文章统计的问题
* @param $level 为真时查询所有子类目
* */
function getTotalArcByTid($tid, $level=TRUE) {
global $dsql;
$level==TRUE && $tid = GetSonTypeID($tid);
$sql = "SELECT count(id) as total from `dede_archives` where typeid in($tid)";
$result = $dsql->GetOne($sql);
return $result[‘total‘];
}
/*
* 递归获取符合条件的子栏目
* @param $tid 栏目ID
* @return string
* */
function GetSonTypeID($tid)
{
global $dsql;
$dsql->SetQuery("Select id From `dede_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,‘,‘);
} 

调用方法: 
模板中调用的方法一般为: 
{dede:field.typeid function="getTotalArcByTid(@me)"/} 
或者 
[field:typeid function="getTotalArcByTid(@me)"/]

时间: 2024-11-10 14:14:33

DEDECMS 获取当前栏目及所有子栏目的文章数量的相关文章

文章页获得顶级栏目名称列表以及其内部文章数量

<h3>分类目录</h3> <ul> {dede:channel type='top' row='8' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a> </li>"} <li class="cat-item cat-item-25"><a href="[fiel

dede调用子栏目问题(没有子栏目时出现同级栏目)

1.打开:include\taglib\channel.lib.php文件 修改 if($type=='son' && $reid!=0 && $totalRow==0) 为 if($type=='son' && $reid!=0 && $totalRow==0 && $noself=='') 2.模板调用: {dede:channel typeid='1' type='son' noself=='yes'} <li&g

【phpcms-v9】如何实现在含有子栏目的栏目下添加内容?

对于题目的解释: 假设现在有一个一级栏目 为:栏目1 其下有二级栏目  :栏目1=>栏目11,栏目1=>栏目12,栏目1=>栏目13 同时栏目1下有文章列表 : 栏目1-----文章1,栏目1-----文章2,栏目1-----文章3,栏目1-----文章4 本篇博文大部分转自于 http://blog.csdn.net/yanhui_wei/article/details/8007569  首先感谢分享 本人抄写本篇博客的目的是为补充和以后的一些这样改动后的bug 一.phpcms-v9

Thinkcmf子栏目获取父级栏目所有子栏目列表

网站建设时经常需要输出某个栏目的子栏目,对应的在子栏目列表页也需要输出父级栏目的子栏目列表,thinkcmf可以输出所有子栏目,但却无法在子栏目列表页也适用, 因此就需要通过对数据库表查询来完成需求: <?php $RS = M('terms')->where(array('term_id'=>$term_id))->find(); $parent = M('terms')->where(array('term_id'=>$RS['parent']))->find

dedecms获取顶级栏目名称、二级栏目名称实现方法 转

织梦DEDECMS文章.栏目页获取当前页面顶级栏目名称的方法 在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称. 下面拓展出一个方法来实现这个效果.: 在include/common.func.php的最下方加入: //获取顶级栏目名function GetTopTypename($id){   global $dsql;   $row = $

织梦DEDECMS获取上级栏目ID及顶级栏目ID【栏目名及URL链接】

上级栏目ID {dede:field.reid/} 顶级栏目ID {dede:field.typeid function='GetTopid(@me)'/} Dedecms获取顶级栏目id,名称及链接 {dede:field.typeid function="gettoptype(@me,id)"/} //id {dede:field.typeid function="gettoptype(@me,name)"/} //名称 {dede:field.typeid f

dedeCMS中单独调用子栏目模板和子栏目的文章时修改源代码给channel和chanenartllist加上limit

在网站文件中找到include-taglib-chanel.lib.php,和chaneartllist.lib.php 下载用php的IDE打开, chanel.php加入limit属性修改如下 <?php /** * 获取栏目列表标签 * * @version $Id: channel.lib.php 1 9:29 2010年7月6日Z tianya $ * @package DedeCMS.Taglib * @copyright Copyright (c) 2007 - 2010, Des

dedecms调用当前栏目ID与当前栏目顶级ID的方法

本文实例讲述了dedecms调用当前栏目ID与当前栏目顶级ID的方法.分享给大家供大家参考.具体分析如下: 一.采用dedecms获取当前所在栏目ID的方法如下: 1.模板中调用栏目ID采用如下方法: 代码如下:{dede:type}[field:ID /]{/dede:type} 2.如果是在{dede:sql}里面调用当前栏目ID的话,调用方法如下: 代码如下:{dede:sql sql='Select * from dede_arctype where id = ~typeid~ '} [

magento获取当前栏目ID号与栏目名称函数

Magento获取当前栏目ID:$_cat= new Mage_Catalog_Block_Navigation();$curent_cat= $_cat->getCurrentCategory();$curent_cat_id= $curent_cat->getId(); 或者Mage::registry('current_category')->getEntityId() Magento获取当前栏目名称: $category= Mage::registry('current_cate