FreeID = $fid;
$this->TypeLink = new TypeLink(0);
$this->dsql = $dsql;
$this->maintable = '#@__archives';
$this->TempletsFile = '';
$this->FLInfos = $this->dsql->GetOne("SELECT * FROM `#@__freelist` WHERE aid='$fid' ");
$liststr = $this->FLInfos['listtag'];
$this->FLInfos['maxpage'] = (empty($this->FLInfos['maxpage']) ? 100 : $this->FLInfos['maxpage']);
//载入数据里保存的列表属性信息
$ndtp = new DedeTagParse();
$ndtp->SetNameSpace("dede","{","}");
$ndtp->LoadString($liststr);
$this->ListObj = $ndtp->GetTag('list');
$this->PageSize = $this->ListObj->GetAtt('pagesize');
if(empty($this->PageSize))
{
$this->PageSize = 30;
}
$channelid = $this->ListObj->GetAtt('channel');
/*
if(empty($channelid))
{
showmsg('必须指定频道','-1');exit();
}
else
{
$channelid = intval($channelid);
$channelinfo = $this->dsql->getone("select maintable from #@__channeltype where id='$channelid'");
$this->maintable = $channelinfo['maintable'];
}
*/
$channelid = intval($channelid);
$this->maintable = '#@__archives';
//全局模板解析器
$this->dtp = new DedeTagParse();
$this->dtp->SetNameSpace("dede","{","}");
$this->dtp->SetRefObj($this);
//设置一些全局参数的值
$this->Fields['aid'] = $this->FLInfos['aid'];
$this->Fields['title'] = $this->FLInfos['title'];
$this->Fields['position'] = $this->FLInfos['title'];
$this->Fields['keywords'] = $this->FLInfos['keywords'];
$this->Fields['description'] = $this->FLInfos['description'];
$channelid = $this->ListObj->GetAtt('channel');
if(!empty($channelid))
{
$this->Fields['channeltype'] = $channelid;
$this->ChannelUnit = new ChannelUnit($channelid);
}
else
{
$this->Fields['channeltype'] = 0;
}
foreach($GLOBALS['PubFields'] as $k=>$v)
{
$this->Fields[$k] = $v;
}
$this->PartView = new PartView();
$this->CountRecord();
}
//php4构造函数
function FreeList($fid)
{
$this->__construct($fid);
}
//关闭相关资源
function Close()
{
}
/**
* 统计列表里的记录
*
* @access private
* @return void
*/
function CountRecord()
{
global $cfg_list_son,$cfg_needsontype;
//统计数据库记录
$this->TotalResult = -1;
if(isset($GLOBALS['TotalResult']))
{
$this->TotalResult = $GLOBALS['TotalResult'];
}
if(isset($GLOBALS['PageNo']))
{
$this->PageNo = $GLOBALS['PageNo'];
}
else
{
$this->PageNo = 1;
}
//已经有总记录的值
if($this->TotalResult==-1)
{
$addSql = " arcrank > -1 AND channel>-1 ";
$typeid = $this->ListObj->GetAtt('typeid');
$subday = $this->ListObj->GetAtt('subday');
$listtype = $this->ListObj->GetAtt('type');
$att = $this->ListObj->GetAtt('att');
$channelid = $this->ListObj->GetAtt('channel');
if(empty($channelid))
{
$channelid = 0;
}
//是否指定栏目条件
if(!empty($typeid))
{
if($cfg_list_son=='N')
{
$addSql .= " AND (typeid='$typeid') ";
}
else
{
$addSql .= " AND typeid in (".GetSonIds($typeid,0,TRUE).") ";
}
}
//自定义属性条件
if($att!='') {
$flags = explode(',',$att);
for($i=0;isset($flags[$i]);$i++) $addSql .= " AND FIND_IN_SET('{$flags[$i]}',flag)>0 ";
}
//文档的频道模型
if($channelid>0 && !preg_match("#spec#i", $listtype))
{
$addSql .= " AND channel = '$channelid' ";
}
//推荐文档 带缩略图 专题文档
if(preg_match("#commend#i",$listtype))
{
$addSql .= " AND FIND_IN_SET('c',flag) > 0 ";
}
if(preg_match("#image#i",$listtype))
{
$addSql .= " AND litpic <> '' ";
}
if(preg_match("#spec#i",$listtype) || $channelid==-1)
{
$addSql .= " AND channel = -1 ";
}
if(!empty($subday))
{
$starttime = time() - $subday * 86400;
$addSql .= " AND senddate > $starttime ";
}
$keyword = $this->ListObj->GetAtt('keyword');
if(!empty($keyword))
{
$addSql .= " AND CONCAT(title,keywords) REGEXP '$keyword' ";
}
$cquery = "SELECT COUNT(*) AS dd FROM `{$this->maintable}` WHERE $addSql";
$row = $this->dsql->GetOne($cquery);
if(is_array($row))
{
$this->TotalResult = $row['dd'];
}
else
{
$this->TotalResult = 0;
}
}
$this->TotalPage = ceil($this->TotalResult/$this->PageSize);
if($this->TotalPage > $this->FLInfos['maxpage'])
{
$this->TotalPage = $this->FLInfos['maxpage'];
$this->TotalResult = $this->TotalPage * $this->PageSize;
}
}
/**
* 载入模板
*
* @access public
* @return void
*/
function LoadTemplet()
{
$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
$tempfile = str_replace("{style}",$GLOBALS['cfg_df_style'],$this->FLInfos['templet']);
$tempfile = $tmpdir."/".$tempfile;
if(!file_exists($tempfile))
{
$tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/list_free.htm";
}
$this->dtp->LoadTemplate($tempfile);
$this->TempletsFile = preg_replace("#^".$GLOBALS['cfg_basedir']."#", '', $tempfile);
}
/**
* 列表创建HTML
*
* @access public
* @param string $startpage 开始页面
* @param string $makepagesize 生成的页码数
* @return string
*/
function MakeHtml($startpage=1, $makepagesize=0)
{
$this->LoadTemplet();
$murl = "";
if(empty($startpage))
{
$startpage = 1;
}
$this->ParseTempletsFirst();
$totalpage = ceil($this->TotalResult/$this->PageSize);
if($totalpage==0)
{
$totalpage = 1;
}
if($makepagesize>0)
{
$endpage = $startpage+$makepagesize;
}
else
{
$endpage = ($totalpage+1);
}
if($endpage>($totalpage+1))
{
$endpage = $totalpage;
}
$firstFile = '';
for($this->PageNo=$startpage;$this->PageNo<$endpage;$this->PageNo++)
{
$this->ParseDMFields($this->PageNo,1);
//文件名
$makeFile = $this->GetMakeFileRule();
if(!preg_match("#^\/#", $makeFile))
{
$makeFile = "/".$makeFile;
}
$makeFile = str_replace('{page}',$this->PageNo,$makeFile);
$murl = $makeFile;
$makeFile = $GLOBALS['cfg_basedir'].$makeFile;
$makeFile = preg_replace("#\/{1,}#", "/", $makeFile);
if($this->PageNo==1)
{
$firstFile = $makeFile;
}
//保存文件
$this->dtp->SaveTo($makeFile);
echo "成功创建:".preg_replace("#\/{1,}#", "/", $murl)."
";
}
if($this->FLInfos['nodefault']==0)
{
$murl = '/'.str_replace('{cmspath}',$GLOBALS['cfg_cmspath'],$this->FLInfos['listdir']);
$murl .= '/'.$this->FLInfos['defaultpage'];
$indexfile = $GLOBALS['cfg_basedir'].$murl;
$murl = preg_replace("#\/{1,}#", "/", $murl);
echo "复制:$firstFile 为 ".$this->FLInfos['defaultpage']."
";
copy($firstFile,$indexfile);
}
$this->Close();
return $murl;
}
/**
* 显示列表
*
* @access public
* @return void
*/
function Display()
{
$this->LoadTemplet();
$this->ParseTempletsFirst();
$this->ParseDMFields($this->PageNo,0);
$this->dtp->Display();
}
/**
* 显示单独模板页面
*
* @access public
* @return void
*/
function DisplayPartTemplets()
{
$nmfa = 0;
$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
if($this->Fields['ispart']==1)
{
$tempfile = str_replace("{tid}",$this->FreeID,$this->Fields['tempindex']);
$tempfile = str_replace("{cid}",$this->ChannelUnit->ChannelInfos['nid'],$tempfile);
$tempfile = $tmpdir."/".$tempfile;
if(!file_exists($tempfile))
{
$tempfile = $tmpdir."/".$GLOBALS['cfg_df_style']."/index_default.htm";
}
$this->PartView->SetTemplet($tempfile);
}
else if($this->Fields['ispart']==2)
{
$tempfile = str_replace("{tid}",$this->FreeID,$this->Fields['tempone']);
$tempfile = str_replace("{cid}",$this->ChannelUnit->ChannelInfos['nid'],$tempfile);
if(is_file($tmpdir."/".$tempfile))
{
$this->PartView->SetTemplet($tmpdir."/".$tempfile);
}
else
{
$this->PartView->SetTemplet("这是没有使用模板的单独页!","string"); $nmfa = 1;
}
}
CreateDir($this->Fields['typedir']);
$makeUrl = $this->GetMakeFileRule($this->Fields['id'],"index",$this->Fields['typedir'],$this->Fields['defaultname'],$this->Fields['namerule2']);
$makeFile = $this->GetTruePath().$makeUrl;
if($nmfa==0)
{
$this->PartView->Display();
}
else{
if(!file_exists($makeFile))
{
$this->PartView->Display();
}
else
{
include($makeFile);
}
}
}
/**
* 解析模板,对固定的标记进行初始给值
*
* @access public
* @return void
*/
function ParseTempletsFirst()
{
MakeOneTag($this->dtp,$this);
}
/**
* 解析模板,对内容里的变动进行赋值
*
* @access public
* @param string $PageNo 页码
* @param string $ismake 是否编译
* @return string
*/
function ParseDMFields($PageNo,$ismake=1)
{
foreach($this->dtp->CTags as $tagid=>$ctag)
{
if($ctag->GetName()=="freelist")
{
$limitstart = ($this->PageNo-1) * $this->PageSize;
if($this->PageNo > $this->FLInfos['maxpage']) $this->dtp->Assign($tagid, '已经超过了最大允许列出的页面!');
else $this->dtp->Assign($tagid,$this->GetList($limitstart,$ismake));
}
else if($ctag->GetName()=="pagelist")
{
$list_len = trim($ctag->GetAtt("listsize"));
$ctag->GetAtt("listitem")=="" ? $listitem="info,index,pre,pageno,next,end,option" : $listitem=$ctag->GetAtt("listitem");
if($list_len=="")
{
$list_len = 3;
}
if($ismake==0)
{
$this->dtp->Assign($tagid,$this->GetPageListDM($list_len,$listitem));
}
else
{
$this->dtp->Assign($tagid,$this->GetPageListST($list_len,$listitem));
}
}
else if($ctag->GetName()=="pageno")
{
$this->dtp->Assign($tagid,$PageNo);
}
}
}
/**
* 获得要创建的文件名称规则
*
* @access public
* @return string
*/
function GetMakeFileRule()
{
$okfile = '';
$namerule = $this->FLInfos['namerule'];
$listdir = $this->FLInfos['listdir'];
$listdir = str_replace('{cmspath}',$GLOBALS['cfg_cmspath'],$listdir);
$okfile = str_replace('{listid}',$this->FLInfos['aid'],$namerule);
$okfile = str_replace('{listdir}',$listdir,$okfile);
$okfile = str_replace("\\","/",$okfile);
$mdir = preg_replace("#/([^/]*)$#", "", $okfile);
if(!preg_match("#\/#", $mdir) && preg_match("#\.#", $mdir))
{
return $okfile;
}
else
{
CreateDir($mdir,'','');
return $okfile;
}
}
/**
* 获得一个单列的文档列表
*
* @access public
* @param string $limitstart 开始限制
* @param string $ismake 是否编译
* @return string
*/
function GetList($limitstart, $ismake=1)
{
global $cfg_list_son,$cfg_needsontype;
$col = $this->ListObj->GetAtt('col');
if(empty($col))
{
$col = 1;
}
$titlelen = $this->ListObj->GetAtt('titlelen');
$infolen = $this->ListObj->GetAtt('infolen');
$imgwidth = $this->ListObj->GetAtt('imgwidth');
$imgheight = $this->ListObj->GetAtt('imgheight');
$titlelen = AttDef($titlelen,60);
$infolen = AttDef($infolen,250);
$imgwidth = AttDef($imgwidth,80);
$imgheight = AttDef($imgheight,80);
$innertext = trim($this->ListObj->GetInnerText());
if(empty($innertext)) $innertext = GetSysTemplets("list_fulllist.htm");
$tablewidth = 100;
if($col=="") $col=1;
$colWidth = ceil(100 / $col);
$tablewidth = $tablewidth."%";
$colWidth = $colWidth."%";
//按不同情况设定SQL条件
$orwhere = " arc.arcrank > -1 AND channel>-1 ";
$typeid = $this->ListObj->GetAtt('typeid');
$subday = $this->ListObj->GetAtt('subday');
$listtype = $this->ListObj->GetAtt('type');
$att = $this->ListObj->GetAtt('att');
$channelid = $this->ListObj->GetAtt('channel');
if(empty($channelid)) $channelid = 0;
//是否指定栏目条件
if(!empty($typeid))
{
if($cfg_list_son=='N')
{
$orwhere .= " AND (arc.typeid='$typeid') ";
}
else
{
$orwhere .= " AND arc.typeid IN (".GetSonIds($typeid, 0, TRUE).") ";
}
}
//自定义属性条件
if($att!='') {
$flags = explode(',', $att);
for($i=0; isset($flags[$i]); $i++) $orwhere .= " AND FIND_IN_SET('{$flags[$i]}',flag)>0 ";
}
//文档的频道模型
if($channelid>0 && !preg_match("#spec#i", $listtype))
{
$orwhere .= " AND arc.channel = '$channelid' ";
}
//推荐文档 带缩略图 专题文档
if(preg_match("#commend#i",$listtype))
{
$orwhere .= " AND FIND_IN_SET('c',flag) > 0 ";
}
if(preg_match("#image#i",$listtype))
{
$orwhere .= " AND arc.litpic <> '' ";
}
if(preg_match("#spec#i",$listtype) || $channelid==-1)
{
$orwhere .= " AND arc.channel = -1 ";
}
if(!empty($subday))
{
$starttime = time() - $subday*86400;
$orwhere .= " AND arc.senddate > $starttime ";
}
$keyword = $this->ListObj->GetAtt('keyword');
if(!empty($keyword))
{
$orwhere .= " AND CONCAT(arc.title,arc.keywords) REGEXP '$keyword' ";
}
$orderby = $this->ListObj->GetAtt('orderby');
$orderWay = $this->ListObj->GetAtt('orderway');
//排序方式
$ordersql = "";
if($orderby=="senddate")
{
$ordersql=" ORDER BY arc.senddate $orderWay";
}
else if($orderby=="pubdate")
{
$ordersql=" ORDER BY arc.pubdate $orderWay";
}
else if($orderby=="id")
{
$ordersql=" ORDER BY arc.id $orderWay";
}
else if($orderby=="hot"||$orderby=="click")
{
$ordersql = " ORDER BY arc.click $orderWay";
}
else if($orderby=="lastpost")
{
$ordersql = " ORDER BY arc.lastpost $orderWay";
}
else if($orderby=="scores")
{
$ordersql = " ORDER BY arc.scores $orderWay";
}
else if($orderby=="rand")
{
$ordersql = " ORDER BY rand()";
}
else
{
$ordersql=" ORDER BY arc.sortrank $orderWay";
}
//获得附加表的相关信息
$addField = "";
$addJoin = "";
if(is_object($this->ChannelUnit))
{
$addtable = $this->ChannelUnit->ChannelInfos['addtable'];
if($addtable!="")
{
$addJoin = " LEFT JOIN $addtable ON arc.id = ".$addtable.".aid ";
$addField = "";
$fields = explode(",",$this->ChannelUnit->ChannelInfos['listfields']);
foreach($fields as $k=>$v)
{
$nfields[$v] = $k;
}
foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
{
if(isset($nfields[$k]))
{
if(!empty($arr['rename']))
{
$addField .= ",".$addtable.".".$k." as ".$arr['rename'];
}
else
{
$addField .= ",".$addtable.".".$k;
}
}
}
}
}
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname,
tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
$addField
FROM {$this->maintable} arc
LEFT JOIN #@__arctype tp ON arc.typeid=tp.id
$addJoin
WHERE $orwhere $ordersql LIMIT $limitstart,".$this->PageSize;
$this->dsql->SetQuery($query);
$this->dsql->Execute("al");
$artlist = "";
if($col>1)
{
$artlist = "
\r\n";
}
if($row = $this->dsql->GetArray("al"))
{
$GLOBALS['autoindex']++;
//处理一些特殊字段
$row['id'] = $row['id'];
$row['arcurl'] = $this->GetArcUrl($row['id'],$row['typeid'],$row['senddate'],
$row['title'],$row['ismake'],$row['arcrank'],$row['namerule'],$row['typedir'],$row['money'],
$row['filename'],$row['moresite'],$row['siteurl'],$row['sitepath']);
$row['typeurl'] = GetTypeUrl($row['typeid'],$row['typedir'],$row['isdefault'],$row['defaultname'],
$row['ispart'],$row['namerule2'],$row['siteurl'],$row['sitepath']);
if($ismake==0 && $GLOBALS['cfg_multi_site']=='Y')
{
if($row["siteurl"]=="")
{
$row["siteurl"] = $GLOBALS['cfg_mainsite'];
}
}
$row['description'] = cn_substr($row['description'],$infolen);
if($row['litpic'] == '-' || $row['litpic'] == '')
{
$row['litpic'] = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
}
if(!preg_match("#^http:\/\/#i", $row['litpic']) && $GLOBALS['cfg_multi_site'] == 'Y')
{
$row['litpic'] = $GLOBALS['cfg_mainsite'].$row['litpic'];
}
$row['picname'] = $row['litpic'];
$row['info'] = $row['description'];
$row['filename'] = $row['arcurl'];
$row['stime'] = GetDateMK($row['pubdate']);
$row['textlink'] = "".$row['title']."";
$row['typelink'] = "[".$row['typename']."]";
$row['imglink'] = " | \r\n";
}
}//Loop Col
if($col>1){
$i += $col - 1;
}
if($col>1)
{
$artlist .= "