{ 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"; } $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"; 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"; } $this->dsql->FreeResult(); return $likeType; }//GetChannel }//End Class