国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
5.2KB

  1. <?php
  2. /**
  3. * 自定义模型字段添加
  4. *
  5. * @version $Id: mychannel_field_add.php 1 15:07 2010年7月20日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2007 - 2020, DesDev, Inc.
  8. * @copyright Copyright (c) 2020, DedeBIZ.COM
  9. * @license http://help.dedecms.com/usersguide/license.html
  10. * @link http://www.dedecms.com
  11. */
  12. require_once(dirname(__FILE__)."/config.php");
  13. CheckPurview('c_New');
  14. require_once(DEDEADMIN."/inc/inc_admin_channel.php");
  15. require_once(DEDEINC."/dedetag.class.php");
  16. if(empty($action)) $action = '';
  17. $mysql_version = $dsql->GetVersion();
  18. /*----------------------
  19. function Save()
  20. ---------------------*/
  21. if($action=='save')
  22. {
  23. //修改字段配置信息
  24. $dfvalue = trim($vdefault);
  25. $isnull = ($isnull==1 ? "true" : "false");
  26. $mxlen = $maxlength;
  27. if(preg_match("#^(select|radio|checkbox)$#i", $dtype))
  28. {
  29. if(!preg_match("#,#", $dfvalue))
  30. {
  31. ShowMsg("你设定了字段为 {$dtype} 类型,必须在默认值中指定元素列表,如:'a,b,c' ","-1");
  32. exit();
  33. }
  34. }
  35. if($dtype=='stepselect')
  36. {
  37. $arr = $dsql->GetOne("SELECT * FROM `#@__stepselect` WHERE egroup='$fieldname' ");
  38. if(!is_array($arr))
  39. {
  40. ShowMsg("你设定了字段为联动类型,但系统中没找到与你定义的字段名相同的联动组名!","-1");
  41. exit();
  42. }
  43. }
  44. //模型信息
  45. $row = $dsql->GetOne("SELECT fieldset,addtable,issystem FROM `#@__channeltype` WHERE id='$id'");
  46. $fieldset = $row['fieldset'];
  47. $dtp = new DedeTagParse();
  48. $dtp->SetNameSpace("field", "<", ">");
  49. $dtp->LoadSource($fieldset);
  50. $trueTable = $row['addtable'];
  51. //检测被修改的字段类型
  52. $fieldinfos = GetFieldMake($dtype, $fieldname, $dfvalue, $mxlen);
  53. $ntabsql = $fieldinfos[0];
  54. $buideType = $fieldinfos[1];
  55. $rs = $dsql->ExecuteNoneQuery("ALTER TABLE `$trueTable` ADD $ntabsql ");
  56. if(!$rs)
  57. {
  58. $gerr = $dsql->GetError();
  59. ShowMsg("增加字段失败,错误提示为:".$gerr,"javascript:;");
  60. exit();
  61. }
  62. //检测旧配置信息,并替换为新配置
  63. $ok = FALSE;
  64. $fieldname = strtolower($fieldname);
  65. if(is_array($dtp->CTags))
  66. {
  67. foreach($dtp->CTags as $tagid=>$ctag)
  68. {
  69. if($fieldname == strtolower($ctag->GetName()))
  70. {
  71. $dtp->Assign($tagid, stripslashes($fieldstring), FALSE);
  72. $ok = true;
  73. break;
  74. }
  75. }
  76. $oksetting = $ok ? $dtp->GetResultNP() : $fieldset."\n".stripslashes($fieldstring);
  77. }
  78. else
  79. {
  80. $oksetting = $fieldset."\r\n".stripslashes($fieldstring);
  81. }
  82. $addlist = GetAddFieldList($dtp,$oksetting);
  83. $oksetting = addslashes($oksetting);
  84. $rs = $dsql->ExecuteNoneQuery("UPDATE `#@__channeltype` SET fieldset='$oksetting',listfields='$addlist' WHERE id='$id' ");
  85. if(!$rs)
  86. {
  87. $grr = $dsql->GetError();
  88. ShowMsg("保存节点配置出错!".$grr, "javascript:;");
  89. exit();
  90. }
  91. ShowMsg("成功增加一个字段!", "mychannel_edit.php?id={$id}&dopost=edit&openfield=1");
  92. exit();
  93. }
  94. /*----------------------
  95. function ShowPage()
  96. ---------------------*/
  97. //检测模型相关信息,并初始化相关数据
  98. $row = $dsql->GetOne("SELECT '#@__archives' AS maintable,addtable FROM `#@__channeltype` WHERE id='$id'");
  99. $trueTable = $row['addtable'];
  100. $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 ";
  101. if($mysql_version < 4.1)
  102. {
  103. $tabsql .= " PRIMARY KEY (`aid`), KEY `".$trueTable."_index` (`typeid`)\r\n) TYPE=MyISAM; ";
  104. }
  105. else
  106. {
  107. $tabsql .= " PRIMARY KEY (`aid`), KEY `".$trueTable."_index` (`typeid`)\r\n) ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language."; ";
  108. }
  109. $dsql->ExecuteNoneQuery($tabsql);
  110. //检测附加表里含有的字段
  111. $fields = array();
  112. if(empty($row['maintable'])) $row['maintable'] = '#@__archives';
  113. $rs = $dsql->SetQuery("SHOW fields FROM `{$row['maintable']}`");
  114. $dsql->Execute('a');
  115. while($nrow = $dsql->GetArray('a', MYSQL_ASSOC))
  116. {
  117. if ( $cfg_dbtype == 'sqlite' )
  118. {
  119. $nrow['Field'] = $nrow['name'];
  120. }
  121. $fields[strtolower($nrow['Field'])] = 1;
  122. }
  123. $dsql->Execute("a", "SHOW fields FROM `{$row['addtable']}`");
  124. while($nrow = $dsql->GetArray('a', MYSQL_ASSOC))
  125. {
  126. if ( $cfg_dbtype == 'sqlite' )
  127. {
  128. $nrow['Field'] = $nrow['name'];
  129. }
  130. if(!isset($fields[strtolower($nrow['Field'])]))
  131. {
  132. $fields[strtolower($nrow['Field'])] = 1;
  133. }
  134. }
  135. $f = '';
  136. foreach($fields as $k=>$v)
  137. {
  138. $f .= ($f=='' ? $k : ' '.$k);
  139. }
  140. // 获取频道模型
  141. $dsql->SetQuery("SELECT id,typename,nid FROM `#@__channeltype` WHERE id<>-1 AND isshow=1 ORDER BY id");
  142. $dsql->Execute();
  143. while($row=$dsql->GetObject())
  144. {
  145. $channelArray[$row->id]['typename'] = $row->typename;
  146. $channelArray[$row->id]['nid'] = $row->nid;
  147. }
  148. require_once(DEDEADMIN."/templets/mychannel_field_add.htm");