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

189 lines
5.5KB

  1. <?php if (!defined('DEDEINC')) exit("Request Error!");
  2. /**
  3. * 联动菜单类
  4. *
  5. * @version $Id: enums.func.php 2 13:19 2011-3-24 tianya $
  6. * @package DedeBIZ.Libraries
  7. * @copyright Copyright (c) 2020, DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license
  9. * @link https://www.dedebiz.com
  10. */
  11. // 弱不存在缓存文件则写入缓存
  12. if (!file_exists(DEDEDATA . '/enums/system.php')) WriteEnumsCache();
  13. /**
  14. * 更新枚举缓存
  15. *
  16. * @access public
  17. * @param string $egroup 联动组
  18. * @return string
  19. */
  20. function WriteEnumsCache($egroup = '')
  21. {
  22. global $dsql;
  23. $egroups = array();
  24. if ($egroup == '') {
  25. $dsql->SetQuery("SELECT egroup FROM `#@__sys_enum` GROUP BY egroup ");
  26. } else {
  27. $dsql->SetQuery("SELECT egroup FROM `#@__sys_enum` WHERE egroup='$egroup' GROUP BY egroup ");
  28. }
  29. $dsql->Execute('enum');
  30. while ($nrow = $dsql->GetArray('enum')) {
  31. $egroups[] = $nrow['egroup'];
  32. }
  33. foreach ($egroups as $egroup) {
  34. $cachefile = DEDEDATA . '/enums/' . $egroup . '.php';
  35. $fp = fopen($cachefile, 'w');
  36. fwrite($fp, '<' . "?php\r\nglobal \$em_{$egroup}s;\r\n\$em_{$egroup}s = array();\r\n");
  37. $dsql->SetQuery("SELECT ename,evalue,issign FROM `#@__sys_enum` WHERE egroup='$egroup' ORDER BY disorder ASC, evalue ASC ");
  38. $dsql->Execute('enum');
  39. $issign = -1;
  40. $tenum = false; //三级联动标识
  41. while ($nrow = $dsql->GetArray('enum')) {
  42. fwrite($fp, "\$em_{$egroup}s['{$nrow['evalue']}'] = '{$nrow['ename']}';\r\n");
  43. if ($issign == -1) $issign = $nrow['issign'];
  44. if ($nrow['issign'] == 2) $tenum = true;
  45. }
  46. if ($tenum) $dsql->ExecuteNoneQuery("UPDATE `#@__stepselect` SET `issign`=2 WHERE egroup='$egroup'; ");
  47. fwrite($fp, '?' . '>');
  48. fclose($fp);
  49. if (empty($issign)) WriteEnumsJs($egroup);
  50. }
  51. return '成功更新所有枚举缓存!';
  52. }
  53. /**
  54. * 获取联动表单两级数据的父类与子类
  55. *
  56. * @access public
  57. * @param string $v
  58. * @return array
  59. */
  60. function GetEnumsTypes($v)
  61. {
  62. $rearr['top'] = $rearr['son'] = 0;
  63. if ($v == 0) return $rearr;
  64. if ($v % 500 == 0) {
  65. $rearr['top'] = $v;
  66. } else {
  67. $rearr['son'] = $v;
  68. $rearr['top'] = $v - ($v % 500);
  69. }
  70. return $rearr;
  71. }
  72. /**
  73. * 获取枚举的select表单
  74. *
  75. * @access public
  76. * @param string $egroup 联动组
  77. * @param string $evalue 联动值
  78. * @param string $formid 表单ID
  79. * @param string $seltitle 选择标题
  80. * @return string 成功后返回一个枚举表单
  81. */
  82. function GetEnumsForm($egroup, $evalue = 0, $formid = '', $seltitle = '')
  83. {
  84. $cachefile = DEDEDATA . '/enums/' . $egroup . '.php';
  85. include($cachefile);
  86. if ($formid == '') {
  87. $formid = $egroup;
  88. }
  89. $forms = "<select name='$formid' id='$formid' class='enumselect form-control'>\r\n";
  90. $forms .= "\t<option value='0' selected='selected'>--请选择--{$seltitle}</option>\r\n";
  91. foreach (${'em_' . $egroup . 's'} as $v => $n) {
  92. $prefix = ($v > 500 && $v % 500 != 0) ? '└─ ' : '';
  93. if (preg_match("#\.#", $v)) $prefix = ' &nbsp;&nbsp;└── ';
  94. if ($v == $evalue) {
  95. $forms .= "\t<option value='$v' selected='selected'>$prefix$n</option>\r\n";
  96. } else {
  97. $forms .= "\t<option value='$v'>$prefix$n</option>\r\n";
  98. }
  99. }
  100. $forms .= "</select>";
  101. return $forms;
  102. }
  103. /**
  104. * 获取一级数据
  105. *
  106. * @access public
  107. * @param string $egroup 联动组
  108. * @return array
  109. */
  110. function getTopData($egroup)
  111. {
  112. $data = array();
  113. $cachefile = DEDEDATA . '/enums/' . $egroup . '.php';
  114. include($cachefile);
  115. foreach (${'em_' . $egroup . 's'} as $k => $v) {
  116. if ($k >= 500 && $k % 500 == 0) {
  117. $data[$k] = $v;
  118. }
  119. }
  120. return $data;
  121. }
  122. /**
  123. * 获取数据的JS代码(二级联动)
  124. *
  125. * @access public
  126. * @param string $egroup 联动组
  127. * @return string
  128. */
  129. function GetEnumsJs($egroup)
  130. {
  131. global ${'em_' . $egroup . 's'};
  132. include_once(DEDEDATA . '/enums/' . $egroup . '.php');
  133. $jsCode = "<!--\r\n";
  134. $jsCode .= "em_{$egroup}s=new Array();\r\n";
  135. foreach (${'em_' . $egroup . 's'} as $k => $v) {
  136. // JS中将3级类目存放到第二个key中去
  137. if (preg_match("#([0-9]{1,})\.([0-9]{1,})#", $k, $matchs)) {
  138. $valKey = $matchs[1] + $matchs[2] / 1000;
  139. $jsCode .= "em_{$egroup}s[{$valKey}]='$v';\r\n";
  140. } else {
  141. $jsCode .= "em_{$egroup}s[$k]='$v';\r\n";
  142. }
  143. }
  144. $jsCode .= "-->";
  145. return $jsCode;
  146. }
  147. /**
  148. * 写入联动JS代码
  149. *
  150. * @access public
  151. * @param string $egroup 联动组
  152. * @return string
  153. */
  154. function WriteEnumsJs($egroup)
  155. {
  156. $jsfile = DEDEDATA . '/enums/' . $egroup . '.js';
  157. $fp = fopen($jsfile, 'w');
  158. fwrite($fp, GetEnumsJs($egroup));
  159. fclose($fp);
  160. }
  161. /**
  162. * 获取枚举的值
  163. *
  164. * @access public
  165. * @param string $egroup 联动组
  166. * @param string $evalue 联动值
  167. * @return string
  168. */
  169. function GetEnumsValue($egroup, $evalue = 0)
  170. {
  171. include_once(DEDEDATA . '/enums/' . $egroup . '.php');
  172. if (isset(${'em_' . $egroup . 's'}[$evalue])) {
  173. return ${'em_' . $egroup . 's'}[$evalue];
  174. } else {
  175. return "保密";
  176. }
  177. }