DiyViewLink.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\web;
  11. use app\model\BaseModel;
  12. use app\model\web\DiyView as DiyViewModel;
  13. use think\facade\Cache;
  14. class DiyViewLink extends BaseModel
  15. {
  16. public $list = [];
  17. /**
  18. * 获取链接信息
  19. * @param array $condition
  20. * @param string $field
  21. * @return array
  22. */
  23. public function getLinkInfo($condition, $field = '*')
  24. {
  25. $list = model('link')->getInfo($condition, $field);
  26. return $this->success($list);
  27. }
  28. /**
  29. * 获取链接列表
  30. * @param array $condition
  31. * @param string $field
  32. * @param string $order
  33. * @param null $limit
  34. * @return array
  35. */
  36. public function getLinkList($condition = [], $field = '*', $order = '', $limit = null)
  37. {
  38. $list = model('link')->getList($condition, $field, $order, '', '', '', $limit);
  39. return $this->success($list);
  40. }
  41. /**
  42. * 链接分页列表
  43. * @param array $condition
  44. * @param int $page
  45. * @param int $page_size
  46. * @param string $order
  47. * @param string $field
  48. * @return array
  49. */
  50. public function getLinkPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
  51. {
  52. $data = json_encode([ $condition, $page, $page_size, $order, $field ]);
  53. $cache = Cache::get("link_getLinkPageList_" . $data);
  54. if (!empty($cache)) {
  55. return $this->success($cache);
  56. }
  57. $list = model('link')->pageList($condition, $field, $order, $page, $page_size);
  58. Cache::tag("link")->set("link_getLinkPageList_" . $data, $list);
  59. return $this->success($list);
  60. }
  61. /**
  62. * 查询自定义微页面
  63. * @param $site_id
  64. * @return array
  65. */
  66. public function getMicroPageLinkList($site_id)
  67. {
  68. $diy_view_model = new DiyViewModel();
  69. $condition = [
  70. [ 'site_id', '=', $site_id ],
  71. [ 'name', 'like', '%DIY_VIEW_RANDOM_%' ]
  72. ];
  73. $data = json_encode($condition);
  74. $cache = Cache::get("site_diy_view_getMicroPageLinkList_" . $site_id . "_" . $data);
  75. if (!empty($cache)) {
  76. return $this->success($cache);
  77. }
  78. $site_diy_view_list = $diy_view_model->getSiteDiyViewList($condition, 'sort desc,create_time desc', 'name, title')[ 'data' ];
  79. $link_mic = [
  80. 'name' => 'MICRO_PAGE_LIST',
  81. 'title' => '微页面',
  82. 'parent' => 'MICRO_PAGE',
  83. 'child_list' => []
  84. ];
  85. foreach ($site_diy_view_list as $page_k => $page_v) {
  86. $link_mic[ 'child_list' ][] = [
  87. 'name' => $page_v[ 'name' ],
  88. 'title' => $page_v[ 'title' ],
  89. 'parent' => 'MICRO_PAGE_LIST',
  90. 'wap_url' => '/pages_tool/index/diy?name=' . $page_v[ 'name' ]
  91. ];
  92. }
  93. Cache::tag("site_diy_view")->set("site_diy_view_getMicroPageLinkList_" . $site_id . "_" . $data, $link_mic);
  94. return $this->success($link_mic);
  95. }
  96. /**
  97. * 自定义链接树结构
  98. * @param $params
  99. * @param string $field
  100. * @param string $order
  101. * @return array
  102. */
  103. public function getLinkTree($params, $field = 'title, name, addon_name, parent, level, wap_url', $order = 'level asc,sort asc,id asc')
  104. {
  105. $condition = [
  106. [ 'level', '<=', isset($params[ 'level' ]) ? $params[ 'level' ] : 4 ]
  107. ];
  108. $data = json_encode([ $condition, $field, $order ]);
  109. $cache = Cache::get("site_diy_view_getLinkTree_" . $data);
  110. if (!empty($cache)) {
  111. return $this->success($cache);
  112. }
  113. // 查询全部自定义链接
  114. $list = model('link')->getList($condition, $field, $order);
  115. $link_list = [];
  116. if (!empty($list)) {
  117. foreach ($list as $k => $v) {
  118. // 要查询当前站点是否购买此插件
  119. if ($v[ 'addon_name' ] && !addon_is_exit($v[ 'addon_name' ], $params[ 'site_id' ])) {
  120. unset($list[ $k ]);
  121. continue;
  122. }
  123. }
  124. $list = array_values($list);
  125. // 一级
  126. foreach ($list as $k => $v) {
  127. if ($v[ 'parent' ] == '') {
  128. $link_list [] = $v;
  129. unset($list[ $k ]);
  130. }
  131. }
  132. $list = array_values($list);
  133. // 二级
  134. foreach ($list as $k => $v) {
  135. foreach ($link_list as $ck => $cv) {
  136. if ($v[ 'level' ] == 2 && $cv[ 'name' ] == $v[ 'parent' ]) {
  137. $link_list[ $ck ][ 'child_list' ][] = $v;
  138. unset($list[ $k ]);
  139. }
  140. }
  141. }
  142. $list = array_values($list);
  143. // 三级
  144. foreach ($list as $k => $v) {
  145. foreach ($link_list as $ck => $cv) {
  146. if (!empty($cv[ 'child_list' ])) {
  147. foreach ($cv[ 'child_list' ] as $third_k => $third_v) {
  148. if ($v[ 'level' ] == 3 && $third_v[ 'name' ] == $v[ 'parent' ]) {
  149. $link_list[ $ck ][ 'child_list' ][ $third_k ][ 'child_list' ][] = $v;
  150. unset($list[ $k ]);
  151. }
  152. }
  153. }
  154. }
  155. }
  156. $list = array_values($list);
  157. // 四级
  158. foreach ($list as $k => $v) {
  159. foreach ($link_list as $ck => $cv) {
  160. if (!empty($cv[ 'child_list' ])) {
  161. foreach ($cv[ 'child_list' ] as $third_k => $third_v) {
  162. if (!empty($third_v[ 'child_list' ])) {
  163. foreach ($third_v[ 'child_list' ] as $four_k => $four_v) {
  164. if ($v[ 'level' ] == 4 && $four_v[ 'name' ] == $v[ 'parent' ]) {
  165. $link_list[ $ck ][ 'child_list' ][ $third_k ][ 'child_list' ][ $four_k ][ 'child_list' ][] = $v;
  166. unset($list[ $k ]);
  167. }
  168. }
  169. }
  170. }
  171. }
  172. }
  173. }
  174. }
  175. // 自定义微页面
  176. foreach ($link_list as $k => $v) {
  177. if (isset($v[ 'child_list' ])) {
  178. foreach ($v[ 'child_list' ] as $ck => $cv) {
  179. if ($cv[ 'name' ] == 'MICRO_PAGE') {
  180. $link_list[ $k ][ 'child_list' ][ $ck ][ 'child_list' ] = [ $this->getMicroPageLinkList($params[ 'site_id' ])[ 'data' ] ];
  181. }
  182. }
  183. } else {
  184. $link_list[ $k ][ 'child_list' ] = [];
  185. }
  186. }
  187. Cache::tag("site_diy_view")->set("site_diy_view_getLinkTree_" . $data, $link_list);
  188. return $this->success($link_list);
  189. }
  190. /**
  191. * 删除自定义链接
  192. * @param $condition
  193. * @return array
  194. */
  195. public function deleteLink($condition)
  196. {
  197. $res = model('link')->delete($condition);
  198. return $this->success($res);
  199. }
  200. /**
  201. * @param $tree
  202. * @param $addon
  203. * @return array
  204. */
  205. public function getViewLinkList($tree, $addon)
  206. {
  207. $list = [];
  208. foreach ($tree as $k => $v) {
  209. $parent = '';
  210. $level = 1;
  211. if (isset($v[ 'parent' ])) {
  212. $parent_menu_info = model('link')->getInfo([ [ 'name', "=", $v[ 'parent' ] ] ]);
  213. if ($parent_menu_info) {
  214. $parent = $parent_menu_info[ 'name' ];
  215. $level = $parent_menu_info[ 'level' ] + 1;
  216. }
  217. }
  218. $item = [
  219. 'title' => $v[ 'title' ],
  220. 'name' => $v[ 'name' ],
  221. 'addon_name' => isset($addon) ? $addon : '',
  222. 'parent' => $parent,
  223. 'level' => $level,
  224. 'wap_url' => isset($v[ 'wap_url' ]) ? $v[ 'wap_url' ] : '',
  225. 'web_url' => isset($v[ 'web_url' ]) ? $v[ 'web_url' ] : '',
  226. 'icon' => isset($v[ 'icon' ]) ? $v[ 'icon' ] : '',
  227. 'support_diy_view' => isset($v[ 'support_diy_view' ]) ? $v[ 'support_diy_view' ] : '',
  228. 'sort' => isset($v[ 'sort' ]) ? $v[ 'sort' ] : 0,
  229. ];
  230. array_push($list, $item);
  231. if (isset($v[ 'child_list' ])) {
  232. $this->list = [];
  233. $this->linkTreeToList($v[ 'child_list' ], $addon, $v[ 'name' ], $level + 1);
  234. $list = array_merge($list, $this->list);
  235. }
  236. }
  237. return $list;
  238. }
  239. /**
  240. * 链接树转化为列表
  241. * @param $tree
  242. * @param string $addon
  243. * @param string $parent
  244. * @param int $level
  245. */
  246. private function linkTreeToList($tree, $addon = '', $parent = '', $level = 1)
  247. {
  248. if (is_array($tree)) {
  249. foreach ($tree as $key => $value) {
  250. $item = [
  251. 'title' => $value[ 'title' ],
  252. 'name' => $value[ 'name' ],
  253. 'addon_name' => $addon,
  254. 'parent' => $parent,
  255. 'level' => $level,
  256. 'wap_url' => isset($value[ 'wap_url' ]) ? $value[ 'wap_url' ] : '',
  257. 'web_url' => isset($value[ 'web_url' ]) ? $value[ 'web_url' ] : '',
  258. 'support_diy_view' => isset($value[ 'support_diy_view' ]) ? $value[ 'support_diy_view' ] : '',
  259. 'icon' => isset($value[ 'icon' ]) ? $value[ 'icon' ] : '',
  260. 'sort' => isset($value[ 'sort' ]) ? $value[ 'sort' ] : 0,
  261. ];
  262. $refer = $value;
  263. if (isset($refer[ 'child_list' ])) {
  264. unset($refer[ 'child_list' ]);
  265. array_push($this->list, $item);
  266. $p_name = $refer[ 'name' ];
  267. $this->linkTreeToList($value[ 'child_list' ], $addon, $p_name, $level + 1);
  268. } else {
  269. array_push($this->list, $item);
  270. }
  271. }
  272. }
  273. }
  274. }