|
|
@@ -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){
|