#9 合并

Đã hợp nhất
moshaorui đã nhập 2 commit từ igamebox/master vào [3]s 6 ngày trước cách đây

+ 1 - 1
app/Http/Controllers/ProductController.php

@@ -30,7 +30,7 @@ class ProductController extends Controller
 
     public function category($slug)
     {
-       // $products = DistProduct::paginate(10); // 每页显示10个产品
+        // $products = DistProduct::paginate(10); // 每页显示10个产品
 //        return $this->liquidRenderer->render('products_categories.liquid', ['products' => $products]);
 
         // 获取分类信息

+ 30 - 0
app/Models/DistProduct.php

@@ -75,4 +75,34 @@ class DistProduct extends Model
         return $query->get();
     }
 
+    public static function getProductsByCategoryIds($categoryIds = null, $limit = null)
+    {
+
+
+        $query = self::query();
+
+        $query->where('enabled', 1);
+
+        $query->where('dist_id', getDistId());
+
+        // 如果提供了分类 ID,添加过滤条件
+        if ($categoryIds) {
+            $query->whereIn('category_id', $categoryIds);
+        }
+
+        // 包括关联数据(图片和分类)
+        $query->with(['images', 'distProductCategory']);
+
+        // 添加排序逻辑:按 is_pinned 降序,再按 order 降序,再按 id 降序
+        $query->orderBy('order', 'desc')
+            ->orderBy('id', 'desc');
+        // 如果提供了限制数量,限制查询结果
+        if ($limit) {
+            return $query->limit($limit)->get();
+        }
+
+        // 默认返回所有结果
+        return $query->get();
+    }
+
 }

+ 21 - 0
app/Services/LiquidTags/LiquidTagProduct.php

@@ -30,6 +30,7 @@ class LiquidTagProduct extends AbstractBlock
         $this->quantity = 0;
         $this->limit = 10;
         $this->categoryId = 0;
+        $this->categoryIds = '';
         $this->templateFile = null;
 
         // 正则表达式解析传入的参数
@@ -57,6 +58,9 @@ class LiquidTagProduct extends AbstractBlock
                     case 'category_id':
                         $this->categoryId = (int)$value;
                         break;
+                    case 'category_ids':
+                        $this->categoryIds = $value;
+                        break;
                     case 'template':
                         $this->templateFile = $value;
                         break;
@@ -72,6 +76,9 @@ class LiquidTagProduct extends AbstractBlock
             return $this->renderList();
         } elseif ($this->mode === 'single') {
             return $this->renderSingle();
+        } elseif ($this->mode === 'lists') {
+            //支持多分类
+            return $this->renderLists();
         }
 
         // 如果模式不正确,返回空字符串
@@ -91,6 +98,20 @@ class LiquidTagProduct extends AbstractBlock
         return '';
     }
 
+    private function renderLists()
+    {
+        $categoryIds = explode(',', $this->categoryIds);
+        // 从数据库获取产品列表
+        $products = DistProduct::getProductsByCategoryIds($categoryIds, $this->limit);
+
+        if ($products->count() > 0) {
+            return $this->renderTemplate(['products' => $products->toArray()]);
+        }
+
+        // 如果没有产品,返回空字符串
+        return '';
+    }
+
     private function renderSingle()
     {
         // 从数据库获取单个产品信息