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

190 lines
5.4KB

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