CategoryService.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2020-01-30 14:22
  7. */
  8. namespace common\services;
  9. use common\models\Category;
  10. use yii\base\Exception;
  11. use yii\data\ArrayDataProvider;
  12. class CategoryService extends Service implements CategoryServiceInterface
  13. {
  14. public function getSearchModel(array $options = [])
  15. {
  16. throw new Exception("not need implement");
  17. }
  18. public function getModel($id, array $options = [])
  19. {
  20. return Category::findOne($id);
  21. }
  22. public function newModel(array $options = [])
  23. {
  24. return new Category();
  25. }
  26. public function getCategoryList()
  27. {
  28. return new ArrayDataProvider([
  29. 'allModels' => $this->getLevelCategoriesWithPrefixLevelCharacters(),
  30. 'pagination' => [
  31. 'pageSize' => -1
  32. ]
  33. ]);
  34. }
  35. public function getLevelCategoriesWithPrefixLevelCharacters()
  36. {
  37. $data = [];
  38. $model = $this->newModel();
  39. $categories = $model->getDescendants(0);
  40. foreach ($categories as $k => $category){
  41. /** @var Category $category */
  42. if( isset($categories[$k+1]['level']) && $categories[$k+1]['level'] == $category['level'] ){
  43. $name = ' ├' . $category['name'];
  44. }else{
  45. $name = ' └' . $category['name'];
  46. }
  47. if( end($categories)->id == $category->id ){
  48. $sign = ' └';
  49. }else{
  50. $sign = ' │';
  51. }
  52. $category['prefix_level_name'] = str_repeat($sign, $category['level']-1) . $name;
  53. $data[$category['id']] =$category;
  54. }
  55. return $data;
  56. }
  57. /**
  58. * get article categories urls
  59. *
  60. * @return array
  61. */
  62. public function getCategoriesRelativeUrl()
  63. {
  64. $model = $this->newModel();
  65. $categories = $model->getDescendants(0);
  66. $data = [];
  67. foreach ($categories as $k => $category) {
  68. /** @var Category $category */
  69. $parents = $category->getAncestors($category['id']);
  70. $url = '';
  71. if (!empty($parents)) {
  72. $parents = array_reverse($parents);
  73. foreach ($parents as $parent) {
  74. $url .= '/' . $parent['alias'];
  75. }
  76. }
  77. if (isset($categories[$k + 1]['level']) && $categories[$k + 1]['level'] == $category['level']) {
  78. $name = ' ├' . $category['name'];
  79. } else {
  80. $name = ' └' . $category['name'];
  81. }
  82. if (end($categories)->id == $category->id) {
  83. $sign = ' └';
  84. } else {
  85. $sign = ' │';
  86. }
  87. $url = "article/index?cat=" . $category["name"];
  88. $data[$url] = str_repeat($sign, $category['level'] - 1) . $name;
  89. }
  90. return $data;
  91. }
  92. }