Articleclass.php 5.5 KB

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