国内流行的内容管理系统(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.

149 lines
5.0KB

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