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

176 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 = DEDESTATIC.'/enums/'.$egroup.'.json';
  36. $dsql->SetQuery("SELECT ename,evalue,issign FROM `#@__sys_enum` WHERE egroup='$egroup' ORDER BY disorder ASC, evalue ASC ");
  37. $dsql->Execute('enum');
  38. $issign = -1;
  39. $tenum = false; //三级联动标识
  40. $data = array();
  41. while ($nrow = $dsql->GetArray('enum')) {
  42. $data[$nrow['evalue']] = $nrow['ename'];
  43. if ($issign == -1) $issign = $nrow['issign'];
  44. if ($nrow['issign'] == 2) $tenum = true;
  45. }
  46. file_put_contents($cachefile,json_encode($data));
  47. if ($tenum) $dsql->ExecuteNoneQuery("UPDATE `#@__stepselect` SET `issign`=2 WHERE egroup='$egroup'; ");
  48. }
  49. return '成功更新所有枚举缓存';
  50. }
  51. /**
  52. * 获取联动表单两级数据的父类与子类
  53. *
  54. * @access public
  55. * @param string $v
  56. * @return array
  57. */
  58. function GetEnumsTypes($v)
  59. {
  60. $rearr['top'] = $rearr['son'] = 0;
  61. if ($v == 0) return $rearr;
  62. if ($v % 500 == 0) {
  63. $rearr['top'] = $v;
  64. } else {
  65. $rearr['son'] = $v;
  66. $rearr['top'] = $v - ($v % 500);
  67. }
  68. return $rearr;
  69. }
  70. /**
  71. * 获取枚举的select表单
  72. *
  73. * @access public
  74. * @param string $egroup 联动组
  75. * @param string $evalue 联动值
  76. * @param string $formid 表单ID
  77. * @param string $seltitle 选择标题
  78. * @return string 成功后返回一个枚举表单
  79. */
  80. function GetEnumsForm($egroup, $evalue = 0, $formid = '', $seltitle = '')
  81. {
  82. $cachefile = DEDESTATIC.'/enums/'.$egroup.'.json';
  83. $data = json_decode(file_get_contents($cachefile));
  84. foreach ($data as $key => $value) {
  85. ${'em_'.$egroup.'s'}[$key] = $value;
  86. }
  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 = DEDESTATIC.'/enums/'.$egroup.'.json';
  115. $data = json_decode(file_get_contents($cachefile));
  116. foreach ($data as $key => $value) {
  117. ${'em_'.$egroup.'s'}[$key] = $value;
  118. }
  119. foreach (${'em_'.$egroup.'s'} as $k => $v) {
  120. if ($k >= 500 && $k % 500 == 0) {
  121. $data[$k] = $v;
  122. }
  123. }
  124. return $data;
  125. }
  126. /**
  127. * 获取数据的JS代码(二级联动)
  128. *
  129. * @access public
  130. * @param string $egroup 联动组
  131. * @return string
  132. */
  133. function GetEnumsJs($egroup)
  134. {
  135. global ${'em_'.$egroup.'s'};
  136. $cachefile = DEDESTATIC.'/enums/'.$egroup.'.json';
  137. $data = json_decode(file_get_contents($cachefile));
  138. foreach ($data as $key => $value) {
  139. ${'em_'.$egroup.'s'}[$key] = $value;
  140. }
  141. $jsCode = "";
  142. $jsCode .= "em_{$egroup}s=new Array();\r\n";
  143. foreach (${'em_'.$egroup.'s'} as $k => $v) {
  144. //JS中将3级类目存放到第二个key中去
  145. if (preg_match("#([0-9]{1,})\.([0-9]{1,})#", $k, $matchs)) {
  146. $valKey = $matchs[1] + $matchs[2] / 1000;
  147. $jsCode .= "em_{$egroup}s[{$valKey}]='$v';\r\n";
  148. } else {
  149. $jsCode .= "em_{$egroup}s[$k]='$v';\r\n";
  150. }
  151. }
  152. return $jsCode;
  153. }
  154. /**
  155. * 获取枚举的值
  156. *
  157. * @access public
  158. * @param string $egroup 联动组
  159. * @param string $evalue 联动值
  160. * @return string
  161. */
  162. function GetEnumsValue($egroup, $evalue = 0)
  163. {
  164. $cachefile = DEDESTATIC.'/enums/'.$egroup.'.json';
  165. $data = json_decode(file_get_contents($cachefile));
  166. foreach ($data as $key => $value) {
  167. ${'em_'.$egroup.'s'}[$key] = $value;
  168. }
  169. if (isset(${'em_'.$egroup.'s'}[$evalue])) {
  170. return ${'em_'.$egroup.'s'}[$evalue];
  171. } else {
  172. return "保密";
  173. }
  174. }