1, 'is_cart'=>1]), null, 'id'); // 读取指定文章数据 $article_data = empty($article_ids) ? [] : array_column(ArticleService::AppointArticleList($article_ids), null, 'id'); // 读取指定品牌数据 $brand_data = empty($brand_ids) ? [] : array_column(BrandService::AppointBrandList($brand_ids), null, 'id'); // 处理数据 foreach($config['diy_data'] as &$v) { if(!empty($v['com_data']) && !empty($v['com_data']['content'])) { switch($v['key']) { // 商品列表 case 'goods-list' : $v['com_data']['content'] = self::ConfigViewGoodsHandle($v['com_data']['content'], $goods_data); break; // 商品选项卡 case 'goods-tabs' : if(!empty($v['com_data']['content']['tabs_list'])) { foreach($v['com_data']['content']['tabs_list'] as &$gtv) { $gtv = self::ConfigViewGoodsHandle($gtv, $goods_data); } } break; // 文章列表 case 'article-list' : $v['com_data']['content'] = self::ConfigViewArticleHandle($v['com_data']['content'], $article_data); break; // 文章选项卡 case 'article-tabs' : if(!empty($v['com_data']['content']['tabs_list'])) { foreach($v['com_data']['content']['tabs_list'] as &$gtv) { $gtv = self::ConfigViewArticleHandle($gtv, $article_data); } } break; // 数据魔方 case 'data-magic' : if(!empty($v['com_data']['content']['data_magic_list'])) { foreach($v['com_data']['content']['data_magic_list'] as &$dmv) { if(!empty($dmv['data_content']) && isset($dmv['data_content']['data_type']) && $dmv['data_content']['data_type'] == 'goods' && !empty($dmv['data_content']['goods_ids']) && !empty($dmv['data_content']['goods_list'])) { $temp = self::ConfigViewGoodsHandle(['data_type'=>0, 'data_ids'=>$dmv['data_content']['goods_ids'], 'data_list'=>$dmv['data_content']['goods_list']], $goods_data); if(!empty($temp['data_list'])) { $dmv['data_content']['goods_list'] = $temp['data_list']; } } } } break; // 自定义 case 'custom' : if(!empty($v['com_data']['content']['data_source'])) { // 动态数据 if(!empty($v['com_data']['content']['data_source_content_value'])) { // 使用可变变量自动映射数据 $temp_value = $v['com_data']['content']['data_source_content_value']; $temp_source = $v['com_data']['content']['data_source'].'_data'; if(isset($temp_source) && isset($$temp_source) && is_array($$temp_source) && array_key_exists($temp_value, $$temp_source)) { $v['com_data']['content']['data_source_content'] = $$temp_source[$temp_value]; } } // 固定数据、用户信息 if($v['com_data']['content']['data_source'] == 'user-info') { $ret = DiyApiService::UserHeadData(); $ret['data']['user_avatar'] = empty($ret['data']['user']) ? UserDefaultAvatar() : $ret['data']['user']['avatar']; $ret['data']['user_name_view'] = empty($ret['data']['user']) ? '用户名称' : $ret['data']['user']['user_name_view']; unset($ret['data']['user']); $v['com_data']['content']['data_source_content'] = $ret['data']; } } break; // 用户信息 case 'user-info' : if(!empty($v['com_data']['content'])) { $business_type = empty($v['com_data']['content']['config']) ? [] : $v['com_data']['content']['config']; $ret = DiyApiService::UserHeadData(); $v['com_data']['content']['data'] = $ret['data']; } break; } } // 唯一key生成 $v['id'] = empty($v['com_data']) ? (empty($v['id']) ? '' : $v['id']) : md5(json_encode($v['com_data'], JSON_UNESCAPED_UNICODE)); } // diy显示数据处理钩子 $hook_name = 'plugins_module_diy_view_data_handle'; MyEventTrigger($hook_name, [ 'hook_name' => $hook_name, 'is_backend' => true, 'config' => &$config, 'params' => $params, ]); } return $config; } /** * 文章配置显示数据处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2024-09-14 * @desc description * @param [array] $config [配置数据] * @param [array] $article_data [指定文章的数据] */ public static function ConfigViewArticleHandle($config, $article_data = []) { $data_type = isset($config['data_type']) ? $config['data_type'] : 0; if($data_type == 1) { $data_params = [ 'article_category_ids' => isset($config['category_ids']) ? $config['category_ids'] : '', 'article_number' => isset($config['number']) ? $config['number'] : 4, 'article_order_by_type' => isset($config['order_by_type']) ? $config['order_by_type'] : 0, 'article_order_by_rule' => isset($config['order_by_rule']) ? $config['order_by_rule'] : 0, 'article_is_cover' => isset($config['is_cover']) ? $config['is_cover'] : 0, ]; $config['data_auto_list'] = ArticleService::AutoArticleList($data_params); } else { if(!empty($config['data_list']) && !empty($article_data)) { foreach($config['data_list'] as $dk=>$dv) { if(!empty($dv['data_id']) && array_key_exists($dv['data_id'], $article_data)) { $config['data_list'][$dk]['data'] = $article_data[$dv['data_id']]; } } } } return$config; } /** * 商品配置显示数据处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2024-09-14 * @desc description * @param [array] $config [配置数据] * @param [array] $goods_data [指定商品的数据] */ public static function ConfigViewGoodsHandle($config, $goods_data = []) { $data_type = isset($config['data_type']) ? $config['data_type'] : 0; if($data_type == 1) { $data_params = [ 'goods_category_ids' => isset($config['category_ids']) ? $config['category_ids'] : '', 'goods_brand_ids' => isset($config['brand_ids']) ? $config['brand_ids'] : '', 'goods_number' => isset($config['number']) ? $config['number'] : 4, 'goods_order_by_type' => isset($config['order_by_type']) ? $config['order_by_type'] : 0, 'goods_order_by_rule' => isset($config['order_by_rule']) ? $config['order_by_rule'] : 0, ]; $config['data_auto_list'] = GoodsService::AutoGoodsList($data_params, ['is_spec'=>1, 'is_cart'=>1]); } else { if(!empty($config['data_list']) && !empty($goods_data)) { foreach($config['data_list'] as $dk=>$dv) { if(!empty($dv['data_id']) && array_key_exists($dv['data_id'], $goods_data)) { $config['data_list'][$dk]['data'] = $goods_data[$dv['data_id']]; } } } } return$config; } /** * 配置数据展示附件地址处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2024-09-05 * @desc description * @param [array] $data [配置数据] */ public static function ConfigViewAnnexHandle($data) { if(!empty($data) && is_array($data)) { foreach($data as $k=>$v) { if(!empty($v) && is_array($v)) { // 附件 if(!empty($v[0]) && isset($v[0]['url'])) { $data[$k][0]['url'] = ResourcesService::AttachmentPathViewHandle($v[0]['url']); // 富文本 } elseif(!empty($v['content']) && !empty($v['content']['html'])) { $data[$k]['content']['html'] = ResourcesService::ContentStaticReplace($v['content']['html'], 'get'); } else { $data[$k] = self::ConfigViewAnnexHandle($v); } } } } return $data; } /** * 配置数据保存处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2024-08-22 * @desc description * @param [array] $config [配置数据] */ public static function ConfigSaveHandle($config) { if(!empty($config)) { // 非数组处理 if(!is_array($config)) { $config = json_decode(htmlspecialchars_decode($config), true); } // 数据处理 $config = self::ConfigSaveAnnexHandle($config); // diy保存数据处理钩子 $hook_name = 'plugins_module_diy_save_data_handle'; MyEventTrigger($hook_name, [ 'hook_name' => $hook_name, 'is_backend' => true, 'config' => &$config, ]); // 转为json格式 $config = json_encode($config, JSON_UNESCAPED_UNICODE); } return $config; } /** * 配置数据保存附件地址处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2024-09-05 * @desc description * @param [array] $data [配置数据] */ public static function ConfigSaveAnnexHandle($data) { if(!empty($data) && is_array($data)) { foreach($data as $k=>$v) { if(!empty($v) && is_array($v)) { // 附件 if(!empty($v[0]) && isset($v[0]['url'])) { $data[$k][0]['url'] = ResourcesService::AttachmentPathHandle($v[0]['url']); // 富文本 } elseif(!empty($v['content']) && !empty($v['content']['html'])) { $data[$k]['content']['html'] = ResourcesService::ContentStaticReplace($v['content']['html'], 'add'); } else { $data[$k] = self::ConfigSaveAnnexHandle($v); } } } } return $data; } } ?>