indexUrl = $GLOBALS['cfg_basehost'].$GLOBALS['cfg_indexurl'];
$this->indexName = $GLOBALS['cfg_indexname'];
$this->baseDir = $GLOBALS['cfg_basedir'];
$this->modDir = $GLOBALS['cfg_templets_dir'];
$this->SplitSymbol = $GLOBALS['cfg_list_symbol'] === " > "? "" : $GLOBALS['cfg_list_symbol'];
$this->dsql = $GLOBALS['dsql'];
$this->TypeID = $typeid;
$this->valuePosition = '';
$this->valuePositionName = '';
$this->typeDir = '';
$this->OptionArrayList = '';
//载入类目信息
$query = "SELECT tp.*,ch.typename as ctypename,ch.addtable,ch.issystem FROM `#@__arctype` tp left join `#@__channeltype` ch
on ch.id=tp.channeltype WHERE tp.id='$typeid' ";
if($typeid > 0)
{
$this->TypeInfos = $this->dsql->GetOne($query);
if(is_array($this->TypeInfos))
{
$this->TypeInfos['tempindex'] = MfTemplet($this->TypeInfos['tempindex']);
$this->TypeInfos['templist'] = MfTemplet($this->TypeInfos['templist']);
$this->TypeInfos['temparticle'] = MfTemplet($this->TypeInfos['temparticle']);
}
}
}
//对于使用默认构造函数的情况
//GetPositionLink()将不可用
function TypeLink($typeid)
{
$this->__construct($typeid);
}
//关闭数据库连接,析放资源
function Close()
{
}
//重设类目ID
function SetTypeID($typeid)
{
$this->TypeID = $typeid;
$this->valuePosition = "";
$this->valuePositionName = "";
$this->typeDir = "";
$this->OptionArrayList = "";
//载入类目信息
$query = "
SELECT #@__arctype.*,#@__channeltype.typename as ctypename
FROM #@__arctype left join #@__channeltype
on #@__channeltype.id=#@__arctype.channeltype WHERE #@__arctype.id='$typeid' ";
$this->dsql->SetQuery($query);
$this->TypeInfos = $this->dsql->GetOne();
}
//获得这个类目的路径
function GetTypeDir()
{
if(empty($this->TypeInfos['typedir']))
{
return $GLOBALS['cfg_cmspath'].$GLOBALS['cfg_arcdir'];
}
else
{
return $this->TypeInfos['typedir'];
}
}
//获得某类目的链接列表 如:类目一>>类目二>> 这样的形式
//islink 表示返回的列表是否带连接
function GetPositionLink($islink=true)
{
if ( defined('DEDEMOB') )
{
$indexpage = "
".$this->indexName."";
} else{
$indexpage = "".$this->indexName."";
}
if($this->valuePosition!="" && $islink)
{
return $this->valuePosition;
}
else if($this->valuePositionName!="" && !$islink)
{
return $this->valuePositionName;
}
else if($this->TypeID==0)
{
if($islink)
{
return $indexpage;
}
else
{
return "没指定分类!";
}
}
else
{
if($islink)
{
$this->valuePosition = $this->GetOneTypeLink($this->TypeInfos);
if($this->TypeInfos['reid']!=0)
{
//调用递归逻辑
$this->LogicGetPosition($this->TypeInfos['reid'],true);
}
$this->valuePosition = $indexpage.$this->SplitSymbol.$this->valuePosition;
return $this->valuePosition.$this->SplitSymbol;
}
else
{
$this->valuePositionName = $this->TypeInfos['typename'];
if($this->TypeInfos['reid']!=0)
{
//调用递归逻辑
$this->LogicGetPosition($this->TypeInfos['reid'],false);
}
return $this->valuePositionName;
}
}
}
//获得名字列表
function GetPositionName()
{
return $this->GetPositionLink(false);
}
//获得某类目的链接列表,递归逻辑部分
function LogicGetPosition($id,$islink)
{
$this->dsql->SetQuery("SELECT id,reid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM #@__arctype WHERE id='".$id."'");
$tinfos = $this->dsql->GetOne();
if($islink)
{
$this->valuePosition = $this->GetOneTypeLink($tinfos).$this->SplitSymbol.$this->valuePosition;
}
else
{
$this->valuePositionName = $tinfos['typename'].$this->SplitSymbol.$this->valuePositionName;
}
if($tinfos['reid']>0)
{
$this->LogicGetPosition($tinfos['reid'],$islink);
}
else
{
return 0;
}
}
//获得某个类目的超链接信息
function GetOneTypeLink($typeinfos)
{
$typepage = $this->GetOneTypeUrl($typeinfos);
$typelink = "".$typeinfos['typename']."";
return $typelink;
}
//获得某分类连接的URL
function GetOneTypeUrl($typeinfos)
{
if ( defined('DEDEMOB') )
{
return 'list.php?tid='.$typeinfos['id'];
} else {
return GetTypeUrl($typeinfos['id'],MfTypedir($typeinfos['typedir']),$typeinfos['isdefault'],$typeinfos['defaultname'],
$typeinfos['ispart'],$typeinfos['namerule2'],$typeinfos['moresite'],$typeinfos['siteurl'],$typeinfos['sitepath']);
}
}
//获得类别列表
//hid 是指默认选中类目,0 表示“请选择类目”或“不限类目”
//oper 是用户允许管理的类目,0 表示所有类目
//channeltype 是指类目的内容类型,0 表示不限频道
function GetOptionArray($hid=0,$oper=0,$channeltype=0,$usersg=0)
{
return $this->GetOptionList($hid,$oper,$channeltype,$usersg);
}
function GetOptionList($hid=0,$oper=0,$channeltype=0,$usersg=0)
{
global $cfg_admin_channel;
if(empty($cfg_admin_channel)) $cfg_admin_channel = 'all';
if(!$this->dsql) $this->dsql = $GLOBALS['dsql'];
$this->OptionArrayList = '';
if($hid>0)
{
$row = $this->dsql->GetOne("SELECT id,typename,ispart,channeltype FROM #@__arctype WHERE id='$hid'");
$channeltype = $row['channeltype'];
if($row['ispart']==1) {
$this->OptionArrayList .= "\r\n";
}
else {
$this->OptionArrayList .= "\r\n";
}
}
if($channeltype==0) $ctsql = '';
else $ctsql=" AND channeltype='$channeltype' ";
if(is_array($oper) && $cfg_admin_channel != 'all')
{
if( count($oper) == 0 )
{
$query = "SELECT id,typename,ispart FROM `#@__arctype` WHERE 1=2 ";
}
else
{
$admin_catalog_tmp = $admin_catalog = join(',', $oper);
$this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($admin_catalog) GROUP BY reid ");
$this->dsql->Execute();
$topidstr = '';
while($row = $this->dsql->GetObject())
{
if($row->reid==0) continue;
$topidstr .= ($topidstr=='' ? $row->reid : ','.$row->reid);
}
$admin_catalog .= ','.$topidstr;
$admin_catalogs = explode(',', $admin_catalog);
$admin_catalogs = array_unique($admin_catalogs);
$admin_catalog = join(',', $admin_catalogs);
$admin_catalog = preg_replace("/,$/", '', $admin_catalog);
$query = "SELECT id,typename,ispart FROM `#@__arctype` WHERE ispart<>2 AND id in({$admin_catalog}) AND reid=0 $ctsql";
}
}
else
{
$query = "SELECT id,typename,ispart FROM `#@__arctype` WHERE ispart<>2 AND reid=0 $ctsql ORDER BY sortrank ASC";
}
$this->dsql->SetQuery($query);
$this->dsql->Execute();
while($row=$this->dsql->GetObject())
{
if($row->id!=$hid)
{
if($row->ispart==1) {
$this->OptionArrayList .= "\r\n";
}
else {
$this->OptionArrayList .= "\r\n";
}
}
$this->LogicGetOptionArray($row->id, "─", $oper);
}
return $this->OptionArrayList;
}
/**
* 逻辑递归
*
* @access public
* @param int $id 栏目ID
* @param int $step 步进标志
* @param int $oper 操作权限
* @return string
*/
function LogicGetOptionArray($id, $step, $oper=0)
{
global $cfg_admin_channel;
if(empty($cfg_admin_channel)) $cfg_admin_channel = 'all';
$this->dsql->SetQuery("SELECT id,typename,ispart FROM #@__arctype WHERE reid='".$id."' AND ispart<>2 ORDER BY sortrank ASC");
$this->dsql->Execute($id);
while($row=$this->dsql->GetObject($id))
{
if(is_array($oper) && $cfg_admin_channel != 'all')
{
if(!in_array($row->id, $oper)) continue;
}
if($row->ispart==1) {
$this->OptionArrayList .= "\r\n";
}
else {
$this->OptionArrayList .= "\r\n";
}
$this->LogicGetOptionArray($row->id, $step."─", $oper);
}
}
/**
* 获得与该类相关的类目,本函数应用于模板标记{dede:channel}{/dede:channel}中
* $typetype 的值为: sun 下级分类 self 同级分类 top 顶级分类
*
* @access public
* @param int $typeid 栏目ID
* @param int $reid 所属ID
* @param int $row 栏目行数
* @param string $typetype 栏目类型
* @param string $innertext 底层模板
* @param int $col 显示列数
* @param int $tablewidth 表格宽度
* @param int $myinnertext 自定义底层模板
* @return string
*/
function GetChannelList($typeid=0, $reid=0, $row=8, $typetype='sun', $innertext='',
$col=1, $tablewidth=100, $myinnertext='')
{
if($typeid==0) $typeid = $this->TypeID;
if($row=="") $row = 8;
if($reid=="") $reid = 0;
if($col=="") $col = 1;
$tablewidth = str_replace("%","",$tablewidth);
if($tablewidth=="") $tablewidth=100;
if($col=="") $col = 1;
$colWidth = ceil(100/$col);
$tablewidth = $tablewidth."%";
$colWidth = $colWidth."%";
if($typetype=="") $typetype="sun";
if($innertext=="") $innertext = GetSysTemplets("channel_list.htm");
if($reid==0 && $typeid>0)
{
$dbrow = $this->dsql->GetOne("SELECT reid FROM #@__arctype WHERE id='$typeid' ");
if(is_array($dbrow))
{
$reid = $dbrow['reid'];
}
}
$likeType = "";
if($typetype=="top")
{
$sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
FROM #@__arctype WHERE reid=0 AND ishidden<>1 ORDER BY sortrank ASC limit 0,$row";
}
else if($typetype=="sun"||$typetype=="son")
{
$sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
FROM #@__arctype WHERE reid='$typeid' AND ishidden<>1 ORDER BY sortrank ASC limit 0,$row";
}
else if($typetype=="self")
{
$sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
FROM #@__arctype WHERE reid='$reid' AND ishidden<>1 ORDER BY sortrank ASC limit 0,$row";
}
//AND ID<>'$typeid'
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace("field","[","]");
$dtp2->LoadSource($innertext);
$this->dsql->SetQuery($sql);
$this->dsql->Execute();
$line = $row;
$GLOBALS['autoindex'] = 0;
if($col>1)
{
$likeType = "\r\n";
}
for($i=0;$i<$line;$i++)
{
if($col>1)
{
$likeType .= "\r\n";
}
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= " \r\n";
if($row=$this->dsql->GetArray())
{
//处理当前栏目的样式
if($row['id']=="$typeid" && $myinnertext != '')
{
$linkOkstr = $myinnertext;
$row['typelink'] = $this->GetOneTypeUrl($row);
$linkOkstr = str_replace("~typelink~", $row['typelink'], $linkOkstr);
$linkOkstr = str_replace("~typename~", $row['typename'], $linkOkstr);
$likeType .= $linkOkstr;
}
else
{
//非当前栏目
$row['typelink'] = $this->GetOneTypeUrl($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag)
{
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid, $row[$ctag->GetName()]);
}
}
}
$likeType .= $dtp2->GetResult();
}
}
if($col>1)
{
$likeType .= " | \r\n";
}
$GLOBALS['autoindex']++;
}//Loop Col
if($col>1)
{
$i += $col - 1;
}
if($col>1)
{
$likeType .= "
\r\n";
}
}//Loop for $i
if($col>1)
{
$likeType .= "
\r\n";
}
$this->dsql->FreeResult();
return $likeType;
}//GetChannel
}//End Class