Sfoglia il codice sorgente

随机模板:随机模板对应导航栏数量的问题;一次性返回所有页面的随机模板

FengR 4 mesi fa
parent
commit
3a45bfe64f
1 ha cambiato i file con 104 aggiunte e 85 eliminazioni
  1. 104 85
      app/JsonRpc/PublicRpcService.php

+ 104 - 85
app/JsonRpc/PublicRpcService.php

@@ -2707,47 +2707,69 @@ class PublicRpcService implements PublicRpcServiceInterface
         if(empty($template)){
             return Result::error('此皮肤不存在!');
         }
+
         $rule = TemplateRule::first();
-        switch ($data['page']) {
-            case 1:
-                $index_rule = json_decode($rule['index_rule']);
-                break;
-            case 2:
-                $index_rule = json_decode($rule['class_rule']);
-                break;
-            case 3:
-                $index_rule = json_decode($rule['list_rule']);
-                break;
-            case 4:
-                $index_rule = json_decode($rule['info_rule']);
-                break;
-            case 5:
-                $index_rule = json_decode($rule['search_rule']);
-                break;
-            case 6:
-                $index_rule = json_decode($rule['footerlist_rule']);
-                break;
-            case 7:
-                $index_rule = json_decode($rule['footerinfo_rule']);
-                break;
-            default:
-                break;
+        if(isset($data['page']) && !empty($data['page'])){
+            switch ($data['page']) {
+                case 1:
+                    $index_rule = json_decode($rule['index_rule']);
+                    break;
+                case 2:
+                    $index_rule = json_decode($rule['class_rule']);
+                    break;
+                case 3:
+                    $index_rule = json_decode($rule['list_rule']);
+                    break;
+                case 4:
+                    $index_rule = json_decode($rule['info_rule']);
+                    break;
+                case 5:
+                    $index_rule = json_decode($rule['search_rule']);
+                    break;
+                case 6:
+                    $index_rule = json_decode($rule['footerlist_rule']);
+                    break;
+                case 7:
+                    $index_rule = json_decode($rule['footerinfo_rule']);
+                    break;
+                default:
+                    break;
+            }
         }
+        
         $cate_num = WebsiteCategory::where('website_id',$data['website_id'])
         ->where('is_show',1)
         ->count();
         if($cate_num < 5){
             return Result::error('此网站栏目过少,无法进行随机模板!');
         }
-        // return Result::success($index_rule);
+        // return Result::success($data);
         // $tempalte['index'] = $this->randomWeb($data,$index_rule);
-        $tempalte['index'] = $this->randomPage($data,$cate_num,$index_rule);
-        // $tempalte['class'] = $this->randomPage($data,2,$class_rule);
-        // $tempalte['list'] = $this->randomPage($data,3);
-        // $tempalte['article'] = $this->randomPage($data,4);
-        // $tempalte['search'] = $this->randomPage($data,5);
-        // $tempalte['aloneList'] = $this->randomPage($data,6);
-        // $tempalte['aloneArticle'] = $this->randomPage($data,7);
+        if(isset($data['page']) && !empty($data['page'])){
+            $tempalte['index'] = $this->randomPage($data,$cate_num,$index_rule);
+        }else{
+            $data['page'] = 1;
+            $ruleIndex = json_decode($rule->index_rule);
+            $tempalte['index'] = $this->randomPage($data, $cate_num, $ruleIndex);
+            $data['page'] = 2;
+            $ruleClass = json_decode($rule->class_rule);
+            $tempalte['class'] = $this->randomPage($data, $cate_num, $ruleClass);
+            $data['page'] = 3;
+            $ruleList = json_decode($rule->list_rule);
+            $tempalte['list'] = $this->randomPage($data,$cate_num,$ruleList);
+            $data['page'] = 4;
+            $ruleInfo = json_decode($rule->info_rule);
+            $tempalte['info'] = $this->randomPage($data,$cate_num,$ruleInfo);
+            $data['page'] = 5;
+            $ruleSearch = json_decode($rule->search_rule);
+            $tempalte['search'] = $this->randomPage($data,$cate_num,$ruleSearch);
+            $data['page'] = 6;
+            $ruleFooterlist = json_decode($rule->footerlist_rule);
+            $tempalte['footerlist'] = $this->randomPage($data,$cate_num,$ruleFooterlist);
+            $data['page'] = 7;
+            $ruleFooterinfo = json_decode($rule->footerinfo_rule);
+            $tempalte['footerinfo'] = $this->randomPage($data,$cate_num,$ruleFooterinfo);
+        }        
         // $index = $this->randomPage($data);
         return Result::success($tempalte);
     }
@@ -2805,25 +2827,6 @@ class PublicRpcService implements PublicRpcServiceInterface
         // 4. array_values() 重新索引返回的数组,使其键名从 0 开始连续递增
         // 最终得到的 $must_sector 数组包含了 $sectors 中对应 $must_type 键名的所有必需通栏数据
         // 获取 $rector 数组中 component_num 字段的值
-        // if(in_array(1,$must_type) || in_array(3,$must_type)){
-        //     $sector_type1_key = isset($sector_types[1]) ? $sector_types[1] : null;
-        //     $sector_type1 = $sector_type1_key ? array_intersect_key($sectors, array_flip($sector_type1_key)) : [];
-        //     // 修正错误:array_column 第三个参数不能为数组,移除该参数
-        //     $componentNums = array_column($sector_type1, 'component_num');
-        //     // 获取最小值
-        //     $min_component_num = min($componentNums);
-        //     if($cate_num == 1){
-        //         if((in_array(1,$must_type) && in_array(3,$must_type)) || (in_array(1,$must_type) && $cate_num < $min_component_num)){
-        //             return '此网站首页显示栏目过少,请添加首页显示栏目!';
-        //         }
-        //     }
-        //     // 检查数组是否为空且长度一致,避免 array_combine 报错
-        //     if (!empty($sector_type1_key) && !empty($componentNums) && count($sector_type1_key) === count($componentNums)) {
-        //         $sector_comnum = array_combine($sector_type1_key, $componentNums);
-        //     } else {
-        //         $sector_comnum = [];
-        //     }
-        // }
         
         
         // 获取最小值对应的键值
@@ -2831,7 +2834,7 @@ class PublicRpcService implements PublicRpcServiceInterface
         $must_sector = array_values(array_intersect_key($sectors, array_flip(array_keys($must_type))));
         $must_count = count($must_sector);
         // return $sector_comnum;
-        $must_sector = array_column($must_sector,'sector_type');
+        // $must_sector = array_column($must_sector,'sector_type');
         // 目前按照首页必需通栏的数量进行处理,若是存在必需通栏的数量大于查询到的通栏数量,则返回必需通栏的数量
         if($must_count > $sector_num){
             return $must_sector;
@@ -2889,6 +2892,19 @@ class PublicRpcService implements PublicRpcServiceInterface
         $repeat_num = $sector_num-$rand_count-$must_count;
         // 组合起来通栏
         $sector_zuhe1 = array_merge($must_sector,$random_sector);
+        $sector_zuhe1_type = array_column($sector_zuhe1,'sector_type');
+        $sector_zuhe1_comnum = array_column($sector_zuhe1,'component_num');
+        $comnum_1 = 0;
+        $comnum_3 = 0;
+        if(in_array(1,$sector_zuhe1_type)){
+            $type_key_1 = array_search(1,$sector_zuhe1_type);
+            $comnum_1 = $sector_zuhe1_comnum[$type_key_1];
+        }
+        if(in_array(3,$sector_zuhe1_type)){
+            $type_key_3 = array_search(3,$sector_zuhe1_type);
+            $comnum_3 = $sector_zuhe1_comnum[$type_key_3];
+        }
+        $sector_zuhe1_comnum = $comnum_1+$comnum_3;
         $sector_ids = array_column($sector_zuhe1, 'id');
         if($repeat_num > 0){
             $rule_repeat = (array)$rule->type_max;
@@ -2918,22 +2934,14 @@ class PublicRpcService implements PublicRpcServiceInterface
             $type = [];
             // return $rule_repaet_type;
             // 防止无限循环,设置最大迭代次数
-            $max_iterations = 20; 
+            $max_iterations = 10; 
             $iteration_count = 0;
-            // return [
-            //     'repaet_key' => $repaet_key,
-            //     'repeat_num' => $repeat_num,
-            //     'rule_repeat' => $rule_repeat,
-            //     'repeat_type' => $repeat_type,
-            //     'must_type' => $must_type,
-            // ];
-            $sector_comnum = $cate_num-4;
+            $sector_comnum = $cate_num-$sector_zuhe1_comnum;
             $com_num = 0;
-            // return $cate_num;
             // 随机重复通栏
             while($repaet_key < $repeat_num && $iteration_count < $max_iterations){
                 $num++;
-                if($sector_comnum > 0){
+                if($sector_comnum - $com_num > 0){
                     foreach($repeat_type as $key => $value){
                         if(!isset($type[$key])){
                             $type[$key] = 0;
@@ -2941,11 +2949,10 @@ class PublicRpcService implements PublicRpcServiceInterface
                             $type[$key]++;
                         }
                         // $type代表每个类型的通栏数量,每个类型的通栏的数量应该≤规则限制的数量
-                        
                         if($repaet_key < $repeat_num  && $type[$key] <= $rule_repeat[$key]){
-                            // 若是资讯类则剩余的栏目至少要有三个;若是混合类则剩余的栏目至少要有一个;
-                            // $sector_comnum:剩余的栏目数量(目前是栏目数量-4)
-                            // $com_num:重复通栏的栏目数量
+                            // $max_repaert_num = $rule_repeat[$key];
+                            // if($max_repaert_num < $num ){
+                            //     // $arr_key = $num+$key;
                             if(($key == 1 && $sector_comnum - $com_num >= 3) || ($key == 3 && $sector_comnum - $com_num >= 1) || ($key != 1 && $key != 3)){
                                 if (count($value) > 1) {
                                     // 若 可以随机的通栏类型存在多个通栏,随机取其一
@@ -2953,21 +2960,22 @@ class PublicRpcService implements PublicRpcServiceInterface
                                 } else {
                                     $repeat_sector_key[$repaet_key] = $value[0];
                                 }
-                                $rk = $repeat_sector_key[$repaet_key];
-                                $rk_sector = $sectors[$rk];
-                                $com_num += $rk_sector['component_num'];
-                                // $component_num = $rk_sector['component_num'];
+                                if($key ==1 || $key == 3){
+                                    $rk = $repeat_sector_key[$repaet_key];
+                                    $rk_sector = $sectors[$rk];
+                                    $com_num += $rk_sector['component_num'];
+                                }
                                 $type[$repaet_key] = $repeat_sector_key[$repaet_key];
                                 $repaet_key++;
                             }
-                        }else{
-                            break;
                         }
+                        // else{
+                        //     break;
+                        // }
                     }
                 }else{
                     break;
                 }
-               
                 // var_dump("num",  $type[$key]);
                 // var_dump("repeat_sector_key", $repeat_sector_key);
                 $iteration_count++;
@@ -2989,7 +2997,13 @@ class PublicRpcService implements PublicRpcServiceInterface
             }
             $repeat_count = count($repeat_sector);
             var_dump("repeat_count",$repeat_count);
-            // var_dump("repeat_sector", $repeat_sector);
+            // return [
+            //     'sector_comnum'=>$sector_comnum,
+            //     'com_num'=>$com_num,
+            //     'repeat_count'=>$repeat_count,
+            //     'repeat_sector'=>$repeat_sector,
+            // ];
+            // // var_dump("repeat_sector", $repeat_sector);
             //  return $repeat_sector;
             
             $sector = array_merge($repeat_sector,$sector_zuhe1);
@@ -2997,11 +3011,7 @@ class PublicRpcService implements PublicRpcServiceInterface
             $sector = $sector_zuhe1;
         }
         // var_dump("sector_ids",$sector_ids);
-        // return [
-        //     'random_sector'=>$random_sector,
-        //     'must_sector'=>$must_sector,
-        //     'sector_ids'=>$sector_ids,
-        // ];
+        //  
         // 各类型通栏最大数量数量限制 = 规则最大数量-已经存在的通栏数量(目前的通栏不会有重复的,所以只是-1)
         
         // var_dump("sector",$sector);
@@ -3062,13 +3072,22 @@ class PublicRpcService implements PublicRpcServiceInterface
         // if(count(array_intersect($sector,$must_sector)) != count($must_sector)){
         //     return '此页面缺少必要通栏!';
         // }
-        $data['page'] = $page;
+        // return Result::success([
+        //     'sector_id'=>$sector_id,
+        //     // 'sector'=>$sector,
+        // ]);
+        // $data['page'] = $page;
         $component[] = $this->randomComponent($sector_id,$data,$sector);
         var_dump("sector_id",$sector_id);
-        return ['sector_id'=>$sector_id,
-        // 'sector'=>$sector,
-        'component'=>$component,
-        // 'sector'=>$sector,
+        return [
+            // 'sector_id'=>$sector_id,
+            // 'sector'=>$sector,
+            // 'sector_comnum'=>$sector_comnum,
+            // 'com_num'=>$com_num,
+            // 'cate_num'=>$cate_num,
+            // '$sector_zuhe1_comnum'=>$sector_zuhe1_comnum+$com_num,
+            'component'=>$component,
+            // 'sector'=>$sector,
     ];
     }
     public function randomComponent($sector_id,$data,$sector){