Articleclass.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace app\common\model;
  3. use think\facade\Db;
  4. /**
  5. * ============================================================================
  6. *
  7. * ============================================================================
  8. * 版权所有 2014-2028 浙江惠利玛产业互联网有限公司,并保留所有权利。
  9. * 网站地址: https://www.valimart.net/
  10. * ----------------------------------------------------------------------------
  11. *
  12. * ============================================================================
  13. * 数据层模型
  14. */
  15. class Articleclass extends BaseModel
  16. {
  17. /**
  18. * 类别列表
  19. * @access public
  20. * @author csdeshang
  21. * @param array $condition 检索条件
  22. * @return array 数组结构的返回结果
  23. */
  24. public function getArticleclassList($condition,$order='ac_parent_id asc,ac_sort asc,ac_id asc'){
  25. $result = Db::name('articleclass')->where($condition)->order($order)->select()->toArray();
  26. return $result;
  27. }
  28. /**
  29. * 取单个分类的内容
  30. * @access public
  31. * @author csdeshang
  32. * @param int $id 分类ID
  33. * @return array 数组类型的返回结果
  34. */
  35. public function getOneArticleclass($id){
  36. if (intval($id) > 0){
  37. $value = intval($id);
  38. $result = Db::name('articleclass')->where(array('ac_id'=>$value))->find();
  39. return $result;
  40. }else {
  41. return false;
  42. }
  43. }
  44. /**
  45. * 新增
  46. * @access public
  47. * @author csdeshang
  48. * @param array $data 参数内容
  49. * @return bool 布尔类型的返回结果
  50. */
  51. public function addArticleclass($data){
  52. $result = Db::name('articleclass')->insertGetId($data);
  53. return $result;
  54. }
  55. /**
  56. * 更新信息
  57. * @access public
  58. * @author csdeshang
  59. * @param array $data 更新数据
  60. * @param array $ac_id 内容ID
  61. * @return bool 布尔类型的返回结果
  62. */
  63. public function editArticleclass($data,$ac_id){
  64. $result =Db::name('articleclass')->where("ac_id",$ac_id)->update($data);
  65. return $result;
  66. }
  67. /**
  68. * 删除分类
  69. * @access public
  70. * @author csdeshang
  71. * @param int $id 记录ID
  72. * @return bool 布尔类型的返回结果
  73. */
  74. public function delArticleclass($id){
  75. return Db::name('articleclass')->where("ac_id = '". intval($id) ."'")->delete();
  76. }
  77. /**
  78. * 取分类列表,按照深度归类
  79. * @access public
  80. * @author csdeshang
  81. * @param int $show_deep 显示深度
  82. * @return array 数组类型的返回结果
  83. */
  84. public function getTreeClassList($show_deep='2'){
  85. $condition = array();
  86. $class_list = $this->getArticleclassList($condition);
  87. $show_deep = intval($show_deep);
  88. $result = array();
  89. if(is_array($class_list) && !empty($class_list)) {
  90. $result = $this->_getTreeClassList($show_deep,$class_list);
  91. }
  92. return $result;
  93. }
  94. /**
  95. * 递归 整理分类
  96. * @access public
  97. * @author csdeshang
  98. * @param int $show_deep 显示深度
  99. * @param array $class_list 类别内容集合
  100. * @param int $deep 深度
  101. * @param int $parent_id 父类编号
  102. * @param int $i 上次循环编号
  103. * @return array $show_class 返回数组形式的查询结果
  104. */
  105. private function _getTreeClassList($show_deep,$class_list,$deep=1,$parent_id=0,$i=0){
  106. static $show_class = array();//树状的平行数组
  107. if(is_array($class_list) && !empty($class_list)) {
  108. $size = count($class_list);
  109. if($i == 0) $show_class = array();//从0开始时清空数组,防止多次调用后出现重复
  110. for ($i;$i < $size;$i++) {//$i为上次循环到的分类编号,避免重新从第一条开始
  111. $val = $class_list[$i];
  112. $ac_id = $val['ac_id'];
  113. $ac_parent_id = $val['ac_parent_id'];
  114. if($ac_parent_id == $parent_id) {
  115. $val['deep'] = $deep;
  116. $show_class[] = $val;
  117. if($deep < $show_deep && $deep < 2) {//本次深度小于显示深度时执行,避免取出的数据无用
  118. $this->_getTreeClassList($show_deep,$class_list,$deep+1,$ac_id,$i+1);
  119. }
  120. }
  121. if($ac_parent_id > $parent_id) break;//当前分类的父编号大于本次递归的时退出循环
  122. }
  123. }
  124. return $show_class;
  125. }
  126. /**
  127. * 取指定分类ID下的所有子类
  128. * @access public
  129. * @author csdeshang
  130. * @param int/array $parent_id 父ID 可以单一可以为数组
  131. * @return array $rs_row 返回数组形式的查询结果
  132. */
  133. public function getChildClass($parent_id){
  134. $all_class = $this->getArticleclassList(array());
  135. if (is_array($all_class)){
  136. if (!is_array($parent_id)){
  137. $parent_id = array($parent_id);
  138. }
  139. $result = array();
  140. foreach ($all_class as $k => $v){
  141. $ac_id = $v['ac_id'];//返回的结果包括父类
  142. $ac_parent_id = $v['ac_parent_id'];
  143. if (in_array($ac_id,$parent_id) || in_array($ac_parent_id,$parent_id)){
  144. $result[] = $v;
  145. }
  146. }
  147. return $result;
  148. }else {
  149. return false;
  150. }
  151. }
  152. }