|
|
@@ -2718,16 +2718,16 @@ class PublicRpcService implements PublicRpcServiceInterface
|
|
|
$index_rule = json_decode($rule['list_rule']);
|
|
|
break;
|
|
|
case 4:
|
|
|
- $index_rule = json_decode($rule['article_rule']);
|
|
|
+ $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['aloneList_rule']);
|
|
|
+ $index_rule = json_decode($rule['footerlist_rule']);
|
|
|
break;
|
|
|
case 7:
|
|
|
- $index_rule = json_decode($rule['aloneArticle_rule']);
|
|
|
+ $index_rule = json_decode($rule['footerinfo_rule']);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
@@ -2849,6 +2849,93 @@ class PublicRpcService implements PublicRpcServiceInterface
|
|
|
// 组合起来通栏
|
|
|
$sector_zuhe1 = array_merge($must_sector,$random_sector);
|
|
|
$sector_ids = array_column($sector_zuhe1, 'id');
|
|
|
+ if($repeat_num > 0){
|
|
|
+ $rule_repeat = (array)$rule->type_max;
|
|
|
+ $sector_zuhe1_type = array_count_values(array_column($sector_zuhe1,'sector_type'));
|
|
|
+ // $sector_arr = array_intersect_key($rule_repeat,$sector_zuhe1_type);
|
|
|
+ foreach($rule_repeat as $key => $value){
|
|
|
+ if(in_array($key,array_keys($sector_zuhe1_type))){
|
|
|
+ $rule_repeat[$key] = $value-1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var_dump("repeat_num",$repeat_num);
|
|
|
+ // return array_intersect($sector_zuhe1,$must_sector);
|
|
|
+ if(count(array_intersect($sector_zuhe1,$must_sector)) != count($must_sector)){
|
|
|
+ return '此页面缺少必要通栏!';
|
|
|
+ }
|
|
|
+ // 剩余通栏进行重复处理
|
|
|
+ // $rule_repeat = (array)$rule->type_max;
|
|
|
+ // 取到可以重复的通栏类别
|
|
|
+ $rule_repaet_type = array_keys($rule_repeat);
|
|
|
+ $repeat_type = array_intersect_key($sector_types, array_flip($rule_repaet_type));
|
|
|
+ // 获取可以随机重复的通栏
|
|
|
+ $repaet_key = 0;
|
|
|
+ $num = 0;
|
|
|
+ $type = [];
|
|
|
+ // return $rule_repaet_type;
|
|
|
+ // 防止无限循环,设置最大迭代次数
|
|
|
+ $max_iterations = 20;
|
|
|
+ $iteration_count = 0;
|
|
|
+ // return [
|
|
|
+ // 'repaet_key' => $repaet_key,
|
|
|
+ // 'repeat_num' => $repeat_num,
|
|
|
+ // 'rule_repeat' => $rule_repeat,
|
|
|
+ // 'repeat_type' => $repeat_type,
|
|
|
+ // 'must_type' => $must_type,
|
|
|
+ // ];
|
|
|
+ while($repaet_key < $repeat_num && $iteration_count < $max_iterations){
|
|
|
+ $num++;
|
|
|
+ foreach($repeat_type as $key => $value){
|
|
|
+ if(!isset($type[$key])){
|
|
|
+ $type[$key] = 0;
|
|
|
+ }else{
|
|
|
+ $type[$key]++;
|
|
|
+ }
|
|
|
+ // $type代表每个类型的通栏数量,每个类型的通栏的数量应该≤规则限制的数量
|
|
|
+ if($repaet_key < $repeat_num && $type[$key] <= $rule_repeat[$key]){
|
|
|
+ // $max_repaert_num = $rule_repeat[$key];
|
|
|
+ // if($max_repaert_num < $num ){
|
|
|
+ // // $arr_key = $num+$key;
|
|
|
+ if (count($value) > 1) {
|
|
|
+ // 若 可以随机的通栏类型存在多个通栏,随机取其一
|
|
|
+ $repeat_sector_key[$repaet_key] = $value[array_rand($value)];
|
|
|
+ } else {
|
|
|
+ $repeat_sector_key[$repaet_key] = $value[0];
|
|
|
+ }
|
|
|
+ $type[$repaet_key] = $repeat_sector_key[$repaet_key];
|
|
|
+ $repaet_key++;
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ // else{
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ // var_dump("num", $type[$key]);
|
|
|
+ // var_dump("repeat_sector_key", $repeat_sector_key);
|
|
|
+ $iteration_count++;
|
|
|
+ }
|
|
|
+ // return $repeat_sector_key;
|
|
|
+ // var_dump("num", $num);
|
|
|
+ // var_dump("repeat_sector_key", $repeat_sector_key);
|
|
|
+ // 随机的重复通栏键值转换成真正的通栏
|
|
|
+ $repeat_sector = [];
|
|
|
+ if(isset($repeat_sector_key) && !empty($repeat_sector_key) && is_array($repeat_sector_key)){
|
|
|
+
|
|
|
+ foreach ($repeat_sector_key as $key => $value) {
|
|
|
+ if (isset($sectors[$value])) {
|
|
|
+ $repeat_sector[$key] = $sectors[$value];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $repeat_count = count($repeat_sector);
|
|
|
+ var_dump("repeat_count",$repeat_count);
|
|
|
+ // var_dump("repeat_sector", $repeat_sector);
|
|
|
+ // return ($data['page'] == '2' || $data['page'] == 2);
|
|
|
+
|
|
|
+ $sector = array_merge($repeat_sector,$sector_zuhe1);
|
|
|
+ }else{
|
|
|
+ $sector = $sector_zuhe1;
|
|
|
+ }
|
|
|
// var_dump("sector_ids",$sector_ids);
|
|
|
// return [
|
|
|
// 'random_sector'=>$random_sector,
|
|
|
@@ -2856,86 +2943,7 @@ class PublicRpcService implements PublicRpcServiceInterface
|
|
|
// 'sector_ids'=>$sector_ids,
|
|
|
// ];
|
|
|
// 各类型通栏最大数量数量限制 = 规则最大数量-已经存在的通栏数量(目前的通栏不会有重复的,所以只是-1)
|
|
|
- $rule_repeat = (array)$rule->type_max;
|
|
|
- $sector_zuhe1_type = array_count_values(array_column($sector_zuhe1,'sector_type'));
|
|
|
- // $sector_arr = array_intersect_key($rule_repeat,$sector_zuhe1_type);
|
|
|
- foreach($rule_repeat as $key => $value){
|
|
|
- if(in_array($key,array_keys($sector_zuhe1_type))){
|
|
|
- $rule_repeat[$key] = $value-1;
|
|
|
- }
|
|
|
- }
|
|
|
- var_dump("repeat_num",$repeat_num);
|
|
|
- // return array_intersect($sector_zuhe1,$must_sector);
|
|
|
- if(count(array_intersect($sector_zuhe1,$must_sector)) != count($must_sector)){
|
|
|
- return '此页面缺少必要通栏!';
|
|
|
- }
|
|
|
- // 剩余通栏进行重复处理
|
|
|
- // $rule_repeat = (array)$rule->type_max;
|
|
|
- // 取到可以重复的通栏类别
|
|
|
- $rule_repaet_type = array_keys($rule_repeat);
|
|
|
- $repeat_type = array_intersect_key($sector_types, array_flip($rule_repaet_type));
|
|
|
- // 获取可以随机重复的通栏
|
|
|
- $repaet_key = 0;
|
|
|
- $num = 0;
|
|
|
- $type = [];
|
|
|
- // return $rule_repaet_type;
|
|
|
- // 防止无限循环,设置最大迭代次数
|
|
|
- $max_iterations = 20;
|
|
|
- $iteration_count = 0;
|
|
|
- // return [
|
|
|
- // 'repaet_key' => $repaet_key,
|
|
|
- // 'repeat_num' => $repeat_num,
|
|
|
- // 'rule_repeat' => $rule_repeat,
|
|
|
- // 'repeat_type' => $repeat_type,
|
|
|
- // 'must_type' => $must_type,
|
|
|
- // ];
|
|
|
- while($repaet_key < $repeat_num && $iteration_count < $max_iterations){
|
|
|
- $num++;
|
|
|
- foreach($repeat_type as $key => $value){
|
|
|
- if(!isset($type[$key])){
|
|
|
- $type[$key] = 0;
|
|
|
- }else{
|
|
|
- $type[$key]++;
|
|
|
- }
|
|
|
- // $type代表每个类型的通栏数量,每个类型的通栏的数量应该≤规则限制的数量
|
|
|
- if($repaet_key < $repeat_num && $type[$key] <= $rule_repeat[$key]){
|
|
|
- // $max_repaert_num = $rule_repeat[$key];
|
|
|
- // if($max_repaert_num < $num ){
|
|
|
- // // $arr_key = $num+$key;
|
|
|
- if (count($value) > 1) {
|
|
|
- // 若 可以随机的通栏类型存在多个通栏,随机取其一
|
|
|
- $repeat_sector_key[$repaet_key] = $value[array_rand($value)];
|
|
|
- } else {
|
|
|
- $repeat_sector_key[$repaet_key] = $value[0];
|
|
|
- }
|
|
|
- $type[$repaet_key] = $repeat_sector_key[$repaet_key];
|
|
|
- $repaet_key++;
|
|
|
- // }
|
|
|
- }
|
|
|
- // else{
|
|
|
- // break;
|
|
|
- // }
|
|
|
- }
|
|
|
- // var_dump("num", $type[$key]);
|
|
|
- // var_dump("repeat_sector_key", $repeat_sector_key);
|
|
|
- $iteration_count++;
|
|
|
- }
|
|
|
- // return $repeat_sector_key;
|
|
|
- // var_dump("num", $num);
|
|
|
- var_dump("repeat_sector_key", $repeat_sector_key);
|
|
|
- // 随机的重复通栏键值转换成真正的通栏
|
|
|
- $repeat_sector = [];
|
|
|
- foreach ($repeat_sector_key as $key => $value) {
|
|
|
- if (isset($sectors[$value])) {
|
|
|
- $repeat_sector[$key] = $sectors[$value];
|
|
|
- }
|
|
|
- }
|
|
|
- $repeat_count = count($repeat_sector);
|
|
|
- var_dump("repeat_count",$repeat_count);
|
|
|
- // var_dump("repeat_sector", $repeat_sector);
|
|
|
- // return ($data['page'] == '2' || $data['page'] == 2);
|
|
|
|
|
|
- $sector = array_merge($repeat_sector,$sector_zuhe1);
|
|
|
// var_dump("sector",$sector);
|
|
|
// 处理头条及轮播图在随机通栏中的特殊位置特殊处理
|
|
|
$sector_specal_sort = array_column($sector,'sector_type');
|
|
|
@@ -2972,7 +2980,7 @@ class PublicRpcService implements PublicRpcServiceInterface
|
|
|
$sector[$pic_key] = $sort_1;
|
|
|
}
|
|
|
}
|
|
|
- if($data['page'] == '2' || $data['page'] == 2){
|
|
|
+ if($data['page'] == '2' || $data['page'] == 2 || in_array(5,$sector_specal_sort)){
|
|
|
$sector[0] = $cat;
|
|
|
$sector[$cat_key] = $sort_1;
|
|
|
if($toutiao_key && $pic_key){
|