mychannel_field_add.php
4.5 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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php
/**
* 自定义模型字段添加
*
* @version $Id: mychannel_field_add.php 1 15:07 2010年7月20日Z tianya $
* @package DedeCMS.Administrator
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
require_once(dirname(__FILE__)."/config.php");
CheckPurview('c_New');
require_once(DEDEADMIN."/inc/inc_admin_channel.php");
require_once(DEDEINC."/dedetag.class.php");
if(empty($action)) $action = '';
$mysql_version = $dsql->GetVersion();
/*----------------------
function Save()
---------------------*/
if($action=='save')
{
//修改字段配置信息
$dfvalue = trim($vdefault);
$isnull = ($isnull==1 ? "true" : "false");
$mxlen = $maxlength;
if(preg_match("#^(select|radio|checkbox)$#i", $dtype))
{
if(!preg_match("#,#", $dfvalue))
{
ShowMsg("你设定了字段为 {$dtype} 类型,必须在默认值中指定元素列表,如:'a,b,c' ","-1");
exit();
}
}
if($dtype=='stepselect')
{
$arr = $dsql->GetOne("SELECT * FROM `#@__stepselect` WHERE egroup='$fieldname' ");
if(!is_array($arr))
{
ShowMsg("你设定了字段为联动类型,但系统中没找到与你定义的字段名相同的联动组名!","-1");
exit();
}
}
//模型信息
$row = $dsql->GetOne("SELECT fieldset,addtable,issystem FROM `#@__channeltype` WHERE id='$id'");
$fieldset = $row['fieldset'];
$dtp = new DedeTagParse();
$dtp->SetNameSpace("field", "<", ">");
$dtp->LoadSource($fieldset);
$trueTable = $row['addtable'];
//检测被修改的字段类型
$fieldinfos = GetFieldMake($dtype, $fieldname, $dfvalue, $mxlen);
$ntabsql = $fieldinfos[0];
$buideType = $fieldinfos[1];
$rs = $dsql->ExecuteNoneQuery(" ALTER TABLE `$trueTable` ADD $ntabsql ");
if(!$rs)
{
$gerr = $dsql->GetError();
ShowMsg("增加字段失败,错误提示为:".$gerr,"javascript:;");
exit();
}
//检测旧配置信息,并替换为新配置
$ok = FALSE;
$fieldname = strtolower($fieldname);
if(is_array($dtp->CTags))
{
foreach($dtp->CTags as $tagid=>$ctag)
{
if($fieldname == strtolower($ctag->GetName()))
{
$dtp->Assign($tagid, stripslashes($fieldstring), FALSE);
$ok = true;
break;
}
}
$oksetting = $ok ? $dtp->GetResultNP() : $fieldset."\n".stripslashes($fieldstring);
}
else
{
$oksetting = $fieldset."\r\n".stripslashes($fieldstring);
}
$addlist = GetAddFieldList($dtp,$oksetting);
$oksetting = addslashes($oksetting);
$rs = $dsql->ExecuteNoneQuery("UPDATE `#@__channeltype` SET fieldset='$oksetting',listfields='$addlist' WHERE id='$id' ");
if(!$rs)
{
$grr = $dsql->GetError();
ShowMsg("保存节点配置出错!".$grr, "javascript:;");
exit();
}
ShowMsg("成功增加一个字段!", "mychannel_edit.php?id={$id}&dopost=edit&openfield=1");
exit();
}
/*----------------------
function ShowPage()
---------------------*/
//检测模型相关信息,并初始化相关数据
$row = $dsql->GetOne("SELECT '#@__archives' AS maintable,addtable FROM `#@__channeltype` WHERE id='$id'");
$trueTable = $row['addtable'];
$tabsql = "CREATE TABLE IF NOT EXISTS `$trueTable`( `aid` int(11) NOT NULL default '0',\r\n `typeid` int(11) NOT NULL default '0',\r\n ";
if($mysql_version < 4.1)
{
$tabsql .= " PRIMARY KEY (`aid`), KEY `".$trueTable."_index` (`typeid`)\r\n) TYPE=MyISAM; ";
}
else
{
$tabsql .= " PRIMARY KEY (`aid`), KEY `".$trueTable."_index` (`typeid`)\r\n) ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language."; ";
}
$dsql->ExecuteNoneQuery($tabsql);
//检测附加表里含有的字段
$fields = array();
if(empty($row['maintable'])) $row['maintable'] = '#@__archives';
$rs = $dsql->SetQuery("SHOW fields FROM `{$row['maintable']}`");
$dsql->Execute('a');
while($nrow = $dsql->GetArray('a', MYSQL_ASSOC))
{
$fields[strtolower($nrow['Field'])] = 1;
}
$dsql->Execute("a", "SHOW fields FROM `{$row['addtable']}`");
while($nrow = $dsql->GetArray('a', MYSQL_ASSOC))
{
if(!isset($fields[strtolower($nrow['Field'])]))
{
$fields[strtolower($nrow['Field'])] = 1;
}
}
$f = '';
foreach($fields as $k=>$v)
{
$f .= ($f=='' ? $k : ' '.$k);
}
require_once(DEDEADMIN."/templets/mychannel_field_add.htm");