cattree.lib.php
4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php if(!defined('DEDEINC')) exit('Request Error!');
/**
*
*
* @version $Id: cattree.lib.php 1 9:29 2010年7月6日Z tianya $
* @package DedeCMS.Taglib
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
/*>>dede>>
<name>树形类目标签</name>
<type>全局标记</type>
<for>V55,V56,V57</for>
<description>调用树形类目</description>
<demo>
{dede:cattree typeid='' catid='' showall=''/}
</demo>
<attributes>
<iterm>typeid:顶级树id</iterm>
<iterm>catid:上级栏目id</iterm>
<iterm>showall:在空或不存在时,强制用产品模型id;如果是 yes 刚显示整个语言区栏目树;为其它数字则是这个数字的模型的id</iterm>
</attributes>
>>dede>>*/
function lib_cattree(&$ctag, &$refObj)
{
global $dsql;
//属性处理
//属性 showall 在空或不存在时,强制用产品模型id;如果是 yes 刚显示整个语言区栏目树;为其它数字则是这个数字的模型的id
//typeid 指定顶级树 id ,指定后,前一个属性将无效
$attlist="showall|,catid|0";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
if(empty($typeid))
{
if( isset($refObj->TypeLink->TypeInfos['id']) ) {
$typeid = $refObj->TypeLink->TypeInfos['id'];
$reid = $refObj->TypeLink->TypeInfos['reid'];
$topid = $refObj->TypeLink->TypeInfos['topid'];
$channeltype = $refObj->TypeLink->TypeInfos['channeltype'];
$ispart = $refObj->TypeLink->TypeInfos['ispart'];
if($reid==0) $topid = $typeid;
} else {
$typeid = $reid = $topid = $channeltype = $ispart = 0;
}
}
else
{
$row = $dsql->GetOne("SELECT reid,topid,channeltype,ispart FROM `#@__arctype` WHERE id='$typeid' ");
if(!is_array($row))
{
$typeid = $reid = $topid = $channeltype = $ispart = 0;
} else {
$reid = $row['reid'];
$topid = $row['topid'];
$channeltype = $row['channeltype'];
$ispart = $row['ispart'];
}
}
if( !empty($catid) )
{
$topQuery = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `#@__arctype` WHERE reid='$catid' And ishidden<>1 ";
}
else
{
if($showall == "yes" )
{
$topQuery = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `#@__arctype` WHERE reid='$topid' ";
}
else
{
if($showall=='')
{
if( $ispart < 2 && !empty($channeltype) ) $showall = $channeltype;
else $showall = 6;
}
$topQuery = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `#@__arctype` WHERE reid='{$topid}' And channeltype='{$showall}' And ispart<2 And ishidden<>1 ";
}
}
$dsql->Execute('t', $topQuery);
while($row = $dsql->GetArray('t'))
{
$row['typelink'] = GetOneTypeUrlA($row);
$revalue .= "<dl class='cattree'>\n";
$revalue .= "<dt><a href='{$row['typelink']}'>{$row['typename']}</a></dt>\n";
cattreeListSon($row['id'], $revalue);
$revalue .= "</dl>\n";
}
return $revalue;
}
function cattreeListSon($id, &$revalue)
{
global $dsql;
$query = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `#@__arctype` WHERE reid='{$id}' And ishidden<>1 ";
$dsql->Execute($id, $query);
$thisv = '';
while($row = $dsql->GetArray($id))
{
$row['typelink'] = GetOneTypeUrlA($row);
$thisv .= " <dl class='cattree'>\n";
$thisv .= " <dt><a href='{$row['typelink']}'>{$row['typename']}</a></dt>\n";
cattreeListSon($row['id'], $thisv);
$thisv .= " </dl>\n";
}
if($thisv!='') $revalue .= " <dd>\n$thisv </dd>\n";
}