给企业做一个内部公文发布管理系统,采用了DEDE。其中需要各部门自己发布本部门信息,文章来源分别为各个部门。还需要统计各部门发表文章的数量。我就利用DEDECMS论坛里的统计指定栏目下文档数量的插件,实现了这个功能!如下:
list_by_source_count.php
————————————————————————————————————————————————————
<?php
/***************************************
*DeDeCMS文档统计插件(按文章来源统计)
*编写:wenchang(文昌)
*原作:落梦天蝎(beluckly)
*邮箱&MSN:lwc@tom.com
*完成时间:2007-9-15
*插件功能:按照文章来源统计频道栏目的文档总数
*使用方法:
设置$reID(就是你想要统计的栏目id)的值,可以在本文档设置,也可以用list_by_source_count.php?reID=你想要统计的栏目id 这种格式
可以使用输出js格式调用,也可以直接自己定义输出格式
***************************************/
require_once(dirname(__FILE__)."/../include/config_base.php");
//只在后台用,请注释上面的使用下面的语句,并把此文件放到你的后台管理文件下
//require_once(dirname(__FILE__)."/config.php");
$dsql = new DedeSql(false);
if(empty($reID))
{
$reID=0; //你想要统计的主频道id
}
//从文本文件中读取文章来源列表
{
$m_file = dirname(__FILE__)."/inc/source.txt";
$allsources = file($m_file);
foreach($allsources as $v){
$source = trim($v);
if($source!="")
ListCount($reID,$source);
//格式自己定义
echo "$source —– ".$countall."<br>";
//echo "documnet.write(\"本频道文档总数:".$countall."<br>\");\r\n";
$countall=0;}
}
//递归获取下级所有总数
function ListCount($ID,$source)
{
global $dsql,$countall;
$fid = $ID;
$dsql->SetQuery("Select ID,reID,typedir,typename,ispart,sortrank,ishidden From #@__arctype where reID=’".$ID."’ order by sortrank");
$dsql->Execute($fid);
if($dsql->GetTotalRow($fid)>0)
{
while($row=$dsql->GetObject($fid))
{
$ID = $row->ID;
$ispart = $row->ispart;
//隐藏栏目就跳过,不统计
if($row->ishidden==’1′)
continue;
//是列表栏目就进行累加
if($ispart==0)
{
$dsql1=new DedeSql(false);
$row = $dsql1->GetOne("Select count(ID) as dd From #@__archives where typeid=’".$ID."’ and source=’$source’ ");
$fcount=$row[‘dd’];
$countall+=$fcount;
}
else
{
ListCount($ID);
}
}
}
else
{
//是列表栏目就进行累加
if($ispart==0)
{
$dsql1=new DedeSql(false);
$row = $dsql1->GetOne("Select count(ID) as dd From #@__archives where typeid=’".$ID."’ and source=’$source’ ");
$fcount=$row[‘dd’];
$countall+=$fcount;
}
}
}
?>