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

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