| @@ -1,9 +1,14 @@ | |||
| <?php | |||
| if (!defined('DEDEINC')) exit ('dedebiz'); | |||
| /** | |||
| * 栏目列表标签 | |||
| * 栏目列表无限调用标签 | |||
| * {dede:channel} | |||
| * [field:sonchannel1 type='son'] | |||
| * [field:sonchannel2][/field:sonchannel2] | |||
| * [/field:sonchannel1] | |||
| * {/dede:channel} | |||
| * | |||
| * @version $id:channel.lib.php 9:29 2010年7月6日 tianya $ | |||
| * @version $id:channel.lib.php 9:29 2023年11月1日 xushubieli $ | |||
| * @package DedeBIZ.Taglib | |||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||
| * @license GNU GPL v2 (https://www.dedebiz.com/license) | |||
| @@ -13,7 +18,7 @@ function lib_channel(&$ctag, &$refObj) | |||
| { | |||
| global $dsql; | |||
| $attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|,cacheid|"; | |||
| FillAttsDefault($ctag->CAttribute->Items, $attlist); | |||
| FillAttsDefault($ctag->CAttribute->Items,$attlist); | |||
| extract($ctag->CAttribute->Items, EXTR_SKIP); | |||
| $innertext = $ctag->GetInnerText(); | |||
| $line = empty($row) ? 100 : $row; | |||
| @@ -49,19 +54,23 @@ function lib_channel(&$ctag, &$refObj) | |||
| if ($type == '' || $type == 'sun') $type = 'son'; | |||
| if ($innertext == '') $innertext = GetSysTemplets("channel_list.htm"); | |||
| if ($type == 'top') { | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid=0 AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $line"; | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid=0 AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $row"; | |||
| } else if ($type == 'son') { | |||
| if ($typeid == 0) return ''; | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$typeid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $line"; | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$typeid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $row"; | |||
| } else if ($type == 'self') { | |||
| if ($reid == 0) return ''; | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$reid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $line"; | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$reid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $row"; | |||
| } | |||
| $needRel = false; | |||
| $dtp2 = new DedeTagParse(); | |||
| $dtp2->SetNameSpace('field', '[', ']'); | |||
| $dtp2->LoadSource($innertext); | |||
| //检查是否有子栏目,并返回rel提示用于二级菜单 | |||
| $dsql2 = clone $dsql; | |||
| $dsql->SetQuery($sql); | |||
| $dsql->Execute(); | |||
| $line = $row; | |||
| //检查是否有子栏目,并返回rel提示(用于二级菜单) | |||
| if (preg_match('#:rel#', $innertext)) $needRel = true; | |||
| if (empty($sql)) return ''; | |||
| $dsql->SetQuery($sql); | |||
| @@ -69,15 +78,15 @@ function lib_channel(&$ctag, &$refObj) | |||
| $totalRow = $dsql->GetTotalRow(); | |||
| //如果用子栏目模式,当没有子栏目时显示同级栏目 | |||
| if ($type == 'son' && $reid != 0 && $totalRow == 0) { | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$reid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $line"; | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$reid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $row"; | |||
| $dsql->SetQuery($sql); | |||
| $dsql->Execute(); | |||
| } | |||
| $GLOBALS['autoindex'] = 0; | |||
| for ($i = 0; $i < $line; $i++) { | |||
| if ($col > 1) $likeType .= "<dl>\r\n"; | |||
| if ($col > 1) $likeType .= "<dl>"; | |||
| for ($j = 0; $j < $col; $j++) { | |||
| if ($col > 1) $likeType .= "<dd>\r\n"; | |||
| if ($col > 1) $likeType .= "<dd>"; | |||
| if ($row = $dsql->GetArray()) { | |||
| $row['sonids'] = $row['rel'] = ''; | |||
| if ($needRel) { | |||
| @@ -86,41 +95,91 @@ function lib_channel(&$ctag, &$refObj) | |||
| else $row['rel'] = " rel='dropmenu{$row['id']}'"; | |||
| } | |||
| //处理同级栏目中,当前栏目的样式 | |||
| if (($row['id'] == $typeid || ($topid == $row['id'] && $type == 'top')) && $currentstyle != '') { | |||
| $linkOkstr = $currentstyle; | |||
| $row['typelink'] = GetOneTypeUrlA($row); | |||
| $linkOkstr = str_replace("~rel~", $row['rel'], $linkOkstr); | |||
| $linkOkstr = str_replace("~id~", $row['id'], $linkOkstr); | |||
| $linkOkstr = str_replace("~typename~", $row['typename'], $linkOkstr); | |||
| $linkOkstr = str_replace("~cnoverview~", $row['cnoverview'], $linkOkstr); | |||
| $linkOkstr = str_replace("~enname~", $row['enname'], $linkOkstr); | |||
| $linkOkstr = str_replace("~enoverview~", $row['enoverview'], $linkOkstr); | |||
| $linkOkstr = str_replace("~typelink~", $row['typelink'], $linkOkstr); | |||
| $linkOkstr = str_replace("~bigpic~", $row['bigpic'], $linkOkstr); | |||
| $linkOkstr = str_replace("~litimg~", $row['litimg'], $linkOkstr); | |||
| $likeType .= $linkOkstr; | |||
| if (($row['id'] == $typeid || ($topid == $row['id'] && $type == 'top') ) && $currentstyle != '') { | |||
| if ($currentstyle != '') { | |||
| $linkOkstr = $currentstyle; | |||
| $row['typelink'] = GetOneTypeUrlA($row); | |||
| $linkOkstr = str_replace("~rel~", $row['rel'], $linkOkstr); | |||
| $linkOkstr = str_replace("~id~", $row['id'], $linkOkstr); | |||
| $linkOkstr = str_replace("~typename~", $row['typename'], $linkOkstr); | |||
| $linkOkstr = str_replace("~cnoverview~", $row['cnoverview'], $linkOkstr); | |||
| $linkOkstr = str_replace("~enname~", $row['enname'], $linkOkstr); | |||
| $linkOkstr = str_replace("~enoverview~", $row['enoverview'], $linkOkstr); | |||
| $linkOkstr = str_replace("~typelink~", $row['typelink'], $linkOkstr); | |||
| $linkOkstr = str_replace("~bigpic~", $row['bigpic'], $linkOkstr); | |||
| $linkOkstr = str_replace("~litimg~", $row['litimg'], $linkOkstr); | |||
| $likeType .= $linkOkstr; | |||
| } | |||
| } else { | |||
| $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row); | |||
| if (is_array($dtp2->CTags)) { | |||
| foreach ($dtp2->CTags as $tagid => $ctag) { | |||
| if (isset($row[$ctag->GetName()])) $dtp2->Assign($tagid, $row[$ctag->GetName()]); | |||
| foreach($dtp2->CTags as $tagid=>$ctag) { | |||
| if (isset($row[$ctag->GetName()])) { | |||
| $dtp2->Assign($tagid,$row[$ctag->GetName()]); | |||
| } else if (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName())) { | |||
| $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2)); | |||
| } | |||
| } | |||
| } | |||
| $likeType .= $dtp2->GetResult(); | |||
| } | |||
| } | |||
| if ($col > 1) $likeType .= "</dd>\r\n"; | |||
| if ($col > 1) $likeType .= "</dd>"; | |||
| $GLOBALS['autoindex']++; | |||
| } | |||
| if ($col > 1) { | |||
| $i += $col - 1; | |||
| $likeType .= "</dl>\r\n"; | |||
| $likeType .= "</dl>"; | |||
| } | |||
| } | |||
| reset($dsql2); | |||
| $dsql->FreeResult(); | |||
| if ($cacheid != '') { | |||
| WriteCacheBlock($cacheid, $likeType); | |||
| return $likeType; | |||
| } | |||
| function lib_channel_son($ctag, $typeid = 0, $dsql2) | |||
| { | |||
| $attlist = 'row|100,col|1,currentstyle|,notypeid|0'; | |||
| FillAttsDefault($ctag->CAttribute->Items,$attlist); | |||
| extract($ctag->CAttribute->Items, EXTR_SKIP); | |||
| $innertext = $ctag->GetInnerText(); | |||
| $dsql3 = clone $dsql2; | |||
| $likeType = ''; | |||
| if ($notypeid != 0) { | |||
| $tpsql = $tpsql."and not(id in($notypeid)) "; | |||
| } | |||
| $sql = "SELECT * FROM `#@__arctype` WHERE reid='$typeid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $row"; | |||
| $dtp2 = new DedeTagParse(); | |||
| $dtp2->SetNameSpace("field","[","]"); | |||
| $dtp2->LoadSource($innertext); | |||
| $dsql2->SetQuery($sql); | |||
| $dsql2->Execute(); | |||
| $line = $row; | |||
| for ($i = 0; $i < $line; $i++) { | |||
| if ($col > 1) $likeType .= "<dl>"; | |||
| for ($j = 0; $j < $col; $j++) { | |||
| if ($col > 1) $likeType .= "<dd>"; | |||
| if ($row = $dsql2->GetArray()) { | |||
| $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row); | |||
| if (is_array($dtp2->CTags)) { | |||
| foreach($dtp2->CTags as $tagid=>$ctag) { | |||
| if (isset($row[$ctag->GetName()])) { | |||
| $dtp2->Assign($tagid,$row[$ctag->GetName()]); | |||
| } else if (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName())) { | |||
| $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3)); | |||
| } | |||
| } | |||
| } | |||
| $likeType .= $dtp2->GetResult(); | |||
| } | |||
| if ($col > 1) $likeType .= "</dd>"; | |||
| } | |||
| if ($col > 1) { | |||
| $i += $col - 1; | |||
| $likeType .= "</dl>"; | |||
| } | |||
| } | |||
| reset($dsql3); | |||
| $dsql2->FreeResult(); | |||
| return $likeType; | |||
| } | |||
| ?> | |||