Shop.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | A3Mall
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2020 http://www.a3-mall.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: xzncit <158373108@qq.com>
  8. // +----------------------------------------------------------------------
  9. namespace app\common\service\shop;
  10. use app\admin\service\platform\Category;
  11. use app\common\models\Archives;
  12. use app\common\models\goods\Goods;
  13. use app\common\models\promotion\PromotionBonus;
  14. use app\common\models\shop\Pages;
  15. use app\common\models\shop\PagesItems;
  16. use app\common\service\Service;
  17. use mall\utils\Tool;
  18. use think\facade\Db;
  19. class Shop extends Service {
  20. public static function getLayoutData($id,$thumbImageDomain=false){
  21. if(!$row = Pages::where("id",$id)->find()){
  22. throw new \Exception("您查找的内容不存在",10);
  23. }
  24. $pagesItemsModel = new PagesItems();
  25. $data = $pagesItemsModel->where("pid",$id)->order("position_id","ASC")->select()->toArray();
  26. foreach($data as $key=>$value){
  27. if(in_array($value["widget_name"],[
  28. "article","article-group","notice","goods","group",
  29. "regiment","second","bonus","navbar","slider",
  30. "images","image-group"
  31. ])){
  32. if(empty($data[$key]['params']['list'])) $data[$key]['params']['list'] = [];
  33. }
  34. if($value["widget_name"] == "article"){
  35. if (!empty($data[$key]['params']['list'])) {
  36. $article_id = [];
  37. foreach($data[$key]['params']['list'] as $v){
  38. $article_id[] = $v["id"];
  39. }
  40. $data[$key]['params']['list'] = Archives::where("id",'in',$article_id)->withoutField('content,update_time,status,sort,pid')->order("id","DESC")->select()->toArray();
  41. }
  42. }else if($value["widget_name"] == "article-group" && !empty($data[$key]['params']['article_id'])){
  43. $arr = Category::getChildren($data[$key]['params']['article_id']);
  44. $arr = array_merge([$data[$key]['params']['article_id']],$arr);
  45. $data[$key]['params']['list'] = Archives::where('pid','in',$arr)->withoutField('content,update_time,status,sort')->limit($data[$key]['params']['limit'])->select()->toArray();
  46. }else if($value["widget_name"] == "notice"){
  47. if (isset($data[$key]['params']) && $data[$key]['params']['type'] != 'auto') {
  48. $article_id = [];
  49. foreach($data[$key]['params']['list'] as $v){
  50. $article_id[] = $v["id"];
  51. }
  52. $data[$key]['params']['list'] = Archives::where("id",'in',$article_id)->order("id","DESC")->select()->toArray();
  53. }
  54. }else if($value["widget_name"] == "goods"){
  55. $where = [];
  56. if ($data[$key]['params']['type'] == 'auto') {
  57. if (isset($data[$key]['params']['classifyId']) && trim($data[$key]['params']['classifyId'])) {
  58. $catIds = Category::getChildren($data[$key]['params']['classifyId']);
  59. $catIds = array_merge([$data[$key]['params']['classifyId']],$catIds);
  60. $where[] = ['cat_id','in',$catIds];
  61. }
  62. if (isset($data[$key]['params']['brandId']) && $data[$key]['params']['brandId']) {
  63. $where[] = ['brand_id', 'in', $data[$key]['params']['brandId']];
  64. }
  65. $where[] = ['status', '=', 0];
  66. $limit = isset($data[$key]['params']['limit']) ? $data[$key]['params']['limit'] : 10;
  67. $goodsData = Goods::field('id,cat_id,title,goods_number,goods_weight,sell_price,market_price,store_nums,photo,briefly,status,visit,favorite,sale')->where($where)->order('sale','desc')->limit($limit)->select()->toArray();
  68. $goodsArray = [];
  69. foreach($goodsData as $k=>$v){
  70. $goodsArray[$k] = $v;
  71. $goodsArray[$k]['photo'] = Tool::thumb($v["photo"],'',$thumbImageDomain);
  72. }
  73. $data[$key]['params']['list'] = $goodsArray;
  74. } else {
  75. $arr = [];
  76. foreach ((array)$data[$key]['params']['list'] as $item) {
  77. $arr[] = $item["id"];
  78. }
  79. $res = [];
  80. if(!empty($arr)){
  81. $res = array_map(function ($r) use($thumbImageDomain) {
  82. $r['photo'] = Tool::thumb($r['photo'],"",$thumbImageDomain);
  83. return $r;
  84. },Goods::field('id,cat_id,title,goods_number,goods_weight,sell_price,market_price,store_nums,photo,briefly,status,visit,favorite,sale')->where([
  85. "status"=>0
  86. ])->where('id','in',$arr)->select()->toArray());
  87. }
  88. $data[$key]['params']['list'] = $res;
  89. }
  90. }else if($value["widget_name"] == "group"){
  91. $goods_group_id = [];
  92. if(!empty($data[$key]['params']['list'])){
  93. foreach ((array)$data[$key]['params']['list'] as $k => $v) {
  94. if (isset($v['goods_group_id'])) {
  95. $goods_group_id[] = $v['goods_group_id'];
  96. }
  97. }
  98. }
  99. $data[$key]['params']['list'] = Db::name("promotion_group")
  100. ->alias("pg")->field("pg.id,pg.title,pg.goods_id,pg.sell_price,pg.start_time,pg.end_time,g.photo")
  101. ->join("goods g","pg.goods_id=g.id","LEFT")
  102. ->where("pg.status",0)
  103. ->where("g.status",0)
  104. ->where("pg.id","in",$goods_group_id)->select()->toArray();
  105. foreach($data[$key]['params']['list'] as $k=>$v){
  106. $data[$key]['params']['list'][$k] = $v;
  107. $data[$key]['params']['list'][$k]["now_time"] = time();
  108. $data[$key]['params']['list'][$k]["start_time"] = $v['start_time'];
  109. $data[$key]['params']['list'][$k]["end_time"] = $v['end_time'];
  110. $data[$key]['params']['list'][$k]['photo'] = Tool::thumb($v["photo"],'',$thumbImageDomain);
  111. }
  112. }else if($value["widget_name"] == "regiment"){
  113. $goods_regiment_id = [];
  114. if (!empty($data[$key]['params']['list'])) {
  115. foreach ((array)$data[$key]['params']['list'] as $k => $v) {
  116. if (isset($v['id'])) {
  117. $goods_regiment_id[] = $v['id'];
  118. }
  119. }
  120. }
  121. $data[$key]['params']['list'] = Db::name("promotion_regiment")
  122. ->alias("pg")->field("pg.id,pg.title,pg.goods_id,pg.sell_price,pg.start_time,pg.end_time,g.photo")
  123. ->join("goods g","pg.goods_id=g.id","LEFT")
  124. ->where("pg.status",0)
  125. ->where("g.status",0)
  126. ->where("pg.id","in",$goods_regiment_id)->select()->toArray();
  127. foreach($data[$key]['params']['list'] as $k=>$v){
  128. $data[$key]['params']['list'][$k] = $v;
  129. $data[$key]['params']['list'][$k]["now_time"] = time();
  130. $data[$key]['params']['list'][$k]["start_time"] = $v['start_time'];
  131. $data[$key]['params']['list'][$k]["end_time"] = $v['end_time'];
  132. $data[$key]['params']['list'][$k]['photo'] = Tool::thumb($v["photo"],'',$thumbImageDomain);
  133. }
  134. }else if($value["widget_name"] == "second"){
  135. $goods_second_id = [];
  136. if (!empty($data[$key]['params']['list'])) {
  137. foreach ((array)$data[$key]['params']['list'] as $k => $v) {
  138. if (isset($v['id'])) {
  139. $goods_second_id[] = $v['id'];
  140. }
  141. }
  142. }
  143. $data[$key]['params']['list'] = Db::name("promotion_second")
  144. ->alias("pg")->field("pg.id,pg.title,pg.goods_id,pg.sell_price,pg.start_time,pg.end_time,g.photo")
  145. ->join("goods g","pg.goods_id=g.id","LEFT")
  146. ->where("pg.status",0)
  147. ->where("g.status",0)
  148. ->where("pg.id","in",$goods_second_id)->select()->toArray();
  149. foreach($data[$key]['params']['list'] as $k=>$v){
  150. $data[$key]['params']['list'][$k] = $v;
  151. $data[$key]['params']['list'][$k]["now_time"] = time();
  152. $data[$key]['params']['list'][$k]["start_time"] = $v['start_time'];
  153. $data[$key]['params']['list'][$k]["end_time"] = $v['end_time'];
  154. $data[$key]['params']['list'][$k]['photo'] = Tool::thumb($v["photo"],'',$thumbImageDomain);
  155. }
  156. }else if($value["widget_name"] == "bonus"){
  157. $data[$key]['params']['list'] = PromotionBonus::where('status',0)->where("end_time",">",time())
  158. ->where('type',0)
  159. ->withoutField('create_time,status,used,giveout,point,type')
  160. ->select()->toArray();
  161. if(!empty($data[$key]['params']['list'])){
  162. foreach($data[$key]['params']['list'] as $k=>$v){
  163. $data[$key]['params']['list'][$k]['start_time'] = date("Y-m-d",strtotime($v["start_time"]));
  164. $data[$key]['params']['list'][$k]['end_time'] = date("Y-m-d",strtotime($v["end_time"]));
  165. }
  166. }
  167. }else if($value["widget_name"] == "textarea"){
  168. $data[$key]['params'] = Tool::replaceContentImage(Tool::removeContentAttr($data[$key]['params']));
  169. }else if($value["widget_name"] == "slider"){
  170. foreach ($data[$key]['params']['list'] as $k => $v) {
  171. $data[$key]['params']['list'][$k]['thumb_image'] = Tool::thumb($v['thumb_image'], '', $thumbImageDomain);
  172. }
  173. }else if($value["widget_name"] == "navbar"){
  174. foreach ($data[$key]['params']['list'] as $k => $v) {
  175. $data[$key]['params']['list'][$k]['thumb_image'] = Tool::thumb($v['thumb_image'], '', $thumbImageDomain);
  176. }
  177. }else if($value["widget_name"] == "body"){
  178. if($value['params']["type"] == 2){
  179. $data[$key]['params']["thumb_image"] = Tool::thumb($value['params']["thumb_image"], '', $thumbImageDomain);
  180. }
  181. }else if($value["widget_name"] == "images"){
  182. foreach ($data[$key]['params']['list'] as $k => $v) {
  183. $data[$key]['params']['list'][$k]['thumb_image'] = Tool::thumb($v['thumb_image'], '', $thumbImageDomain);
  184. }
  185. }else if($value["widget_name"] == "image-group"){
  186. foreach ($data[$key]['params']['list'] as $k => $v) {
  187. $data[$key]['params']['list'][$k]['thumb_image'] = Tool::thumb($v['thumb_image'], '', $thumbImageDomain);
  188. }
  189. }else if($value["widget_name"] == "video"){
  190. foreach ($data[$key]['params']['list'] as $k => $v) {
  191. $data[$key]['params']['list'][$k]['url'] = Tool::thumb($v['url'], '', $thumbImageDomain);
  192. }
  193. }
  194. }
  195. return $data;
  196. }
  197. }