Articleclass.php 5.3 KB

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