vr-shopxo-plugin/shopxo/app/service/ThemeDataService.php

1880 lines
79 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\service;
use think\facade\Db;
use app\service\ResourcesService;
use app\service\AttachmentService;
use app\service\ConfigService;
use app\service\StoreService;
use app\service\GoodsService;
use app\service\GoodsCategoryService;
use app\service\ArticleService;
use app\service\SystemService;
use app\service\AdminService;
/**
* 主题数据服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class ThemeDataService
{
// 排除的文件后缀
private static $exclude_ext = ['php'];
/**
* 主题数据管理数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-04-02
* @desc description
* @param [array] $params [输入参数]
*/
public static function ThemeDataAdminData($params = [])
{
// 指定了就存储session、则从session读取
$status_key = 'user_is_theme_data_admin_sttaus_'.$params['default_theme'];
if(isset($params['is_theme_data_admin']))
{
$status = intval($params['is_theme_data_admin']);
MySession($status_key, $status);
} else {
$status = MySession($status_key);
if($status === null)
{
$status = 0;
}
}
if($status == 1)
{
$admin = AdminService::LoginInfo();
if(empty($admin))
{
$status = 0;
}
}
// 管理url地址
$admin_key = 'user_is_theme_data_admin_url_data_'.$params['default_theme'];
if(empty($params['admin_url_data']))
{
$admin_url_data = MySession($admin_key);
} else {
$admin_url_data = json_decode(base64_decode(urldecode($params['admin_url_data'])), true);
MySession($admin_key, $admin_url_data);
}
return [
'status' => $status,
'admin_url_data' => $admin_url_data,
];
}
/**
* 主题数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-04-02
* @desc description
* @param [array] $params [输入参数]
*/
public static function ThemeData($params = [])
{
$result = [];
if(!empty($params['mca']) && !empty($params['default_theme']))
{
// 页面条件、默认读取没有指定页面的数据
$view = [-1];
// 页面条件
$theme_view_list = MyConst('common_theme_view_list');
if(!empty($theme_view_list) && is_array($theme_view_list))
{
$theme_view_list = array_column($theme_view_list, 'value', 'type');
if(array_key_exists($params['mca'], $theme_view_list))
{
$view[] = $theme_view_list[$params['mca']];
}
}
// 条件
$where = [
['is_enable', '=', 1],
['view', 'in', $view],
['theme', '=', $params['default_theme']]
];
$result = array_column(self::ThemeDataListHandle(Db::name('ThemeData')->where($where)->field('id,unique,name,theme,type,data')->select()->toArray(), ['is_view'=>1]), null, 'unique');
}
return $result;
}
/**
* 列表数据处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-03-31
* @desc description
* @param [array] $data [列表数据]
* @param [array] $params [输入参数]
*/
public static function ThemeDataListHandle($data, $params = [])
{
if(!empty($data) && is_array($data))
{
// 指定的商品和文章
$appoint = self::ListAppointGoodsArticleData($data);
// 当前站点地址
$domain_url = SystemService::DomainUrl();
// 是否页面展示读取
$is_view = isset($params['is_view']) && $params['is_view'] == 1;
// 循环处理数据
foreach($data as &$v)
{
// 配置数据
if(!empty($v['data']))
{
// 非数组则解析json
if(!is_array($v['data']))
{
$v['data'] = json_decode($v['data'], true);
}
if(is_array($v['data']) && isset($v['type']))
{
// 配置数据处理
foreach($v['data'] as $ks=>$vs)
{
// 当前url地址当前所有数据类型都有基础标题的数据
if(isset($vs['url_data']))
{
$vs['url'] = self::UrlHandle($domain_url, $vs['url_data']);
}
// 附件url地址处理
if(substr($ks, 0, 7) == 'images_' && isset($vs['value']))
{
$vs['value'] = ResourcesService::AttachmentPathViewHandle($vs['value']);
}
// 不同数据类型处理
switch($v['type'])
{
// 单图文
case 0 :
// 自定义数据
if($ks == 'custom_data' && !empty($vs) && is_array($vs))
{
foreach($vs as $kss=>$vss)
{
// 图标
$vs[$kss]['icon'] = empty($vss['icon']) ? '' : ResourcesService::AttachmentPathViewHandle($vss['icon']);
// 当前url地址
$vs[$kss]['url'] = empty($vss['url_data']) ? '' : self::UrlHandle($domain_url, $vss['url_data']);
}
}
break;
// 多图文
case 1 :
if($ks == 'data' && !empty($vs) && is_array($vs))
{
foreach($vs as $kss=>$vss)
{
if(!empty($vss) && is_array($vss))
{
foreach($vss as $ksss=>$vsss)
{
// 附件url地址处理
if(substr($ksss, 0, 7) == 'images_' && isset($vsss['value']))
{
$vs[$kss][$ksss]['value'] = ResourcesService::AttachmentPathViewHandle($vsss['value']);
}
// 当前url地址
if(isset($vsss['url_data']))
{
$vs[$kss][$ksss]['url'] = self::UrlHandle($domain_url, $vsss['url_data']);
}
}
}
}
}
break;
// 商品
case 3 :
if(isset($v['data']['goods_data_type']) && $v['data']['goods_data_type'] == 1)
{
if($ks == 'goods_data' && !empty($vs) && is_array($vs))
{
foreach($vs as $kss=>$vss)
{
// 处理商品自定义封面图片
if(!empty($vss['custom_cover']))
{
$vs[$kss]['custom_cover'] = ResourcesService::AttachmentPathViewHandle($vss['custom_cover']);
}
// 商品
if(!empty($appoint['goods_data']) && !empty($vss['data_id']) && array_key_exists($vss['data_id'], $appoint['goods_data']))
{
// 商品数据合并
$vs[$kss] = array_merge($appoint['goods_data'][$vss['data_id']], $vs[$kss]);
// 是否页面展示
if($is_view && !empty($vs[$kss]['custom_cover']))
{
$vs[$kss]['images'] = $vs[$kss]['custom_cover'];
}
} else {
// 不存在对应的数据则删除
unset($vs[$kss]);
}
}
$vs = array_values($vs);
}
}
break;
// 文章
case 4 :
if(isset($v['data']['article_data_type']) && $v['data']['article_data_type'] == 1)
{
if($ks == 'article_data' && !empty($vs) && is_array($vs))
{
foreach($vs as $kss=>$vss)
{
// 处理文章自定义封面图片
if(!empty($vss['custom_cover']))
{
$vs[$kss]['custom_cover'] = ResourcesService::AttachmentPathViewHandle($vss['custom_cover']);
}
// 文章
if(!empty($appoint['article_data']) && !empty($vss['data_id']) && array_key_exists($vss['data_id'], $appoint['article_data']))
{
// 文章数据合并
$vs[$kss] = array_merge($appoint['article_data'][$vss['data_id']], $vs[$kss]);
// 是否页面展示
if($is_view && !empty($vs[$kss]['custom_cover']))
{
$vs[$kss]['cover'] = $vs[$kss]['custom_cover'];
}
} else {
// 不存在对应的数据则删除
unset($vs[$kss]);
}
}
$vs = array_values($vs);
}
}
break;
// 商品组
case 5 :
if($ks == 'data' && !empty($vs) && is_array($vs))
{
foreach($vs as $kss=>$vss)
{
if(!empty($vss) && is_array($vss))
{
foreach($vss as $ksss=>$vsss)
{
// 当前url地址当前所有数据类型都有基础标题的数据
if(isset($vsss['url_data']))
{
$vs[$kss][$ksss]['url'] = self::UrlHandle($domain_url, $vsss['url_data']);
}
// 附件url地址处理
if(substr($ksss, 0, 7) == 'images_' && isset($vsss['value']))
{
$vs[$kss][$ksss]['value'] = ResourcesService::AttachmentPathViewHandle($vsss['value']);
}
}
}
// 手动指定的商品
if(isset($vss['goods_data_type']) && $vss['goods_data_type'] == 1 && !empty($vss['goods_data']) && is_array($vss['goods_data']))
{
foreach($vss['goods_data'] as $ksss=>$vsss)
{
// 处理商品自定义封面图片
if(!empty($vsss['custom_cover']))
{
$vs[$kss]['goods_data'][$ksss]['custom_cover'] = ResourcesService::AttachmentPathViewHandle($vsss['custom_cover']);
}
// 商品
if(!empty($appoint['goods_data']) && !empty($vsss['data_id']) && array_key_exists($vsss['data_id'], $appoint['goods_data']))
{
// 商品数据合并
$vs[$kss]['goods_data'][$ksss] = array_merge($appoint['goods_data'][$vsss['data_id']], $vs[$kss]['goods_data'][$ksss]);
// 是否页面展示
if($is_view && !empty($vs[$kss]['goods_data'][$ksss]['custom_cover']))
{
$vs[$kss]['goods_data'][$ksss]['images'] = $vs[$kss]['goods_data'][$ksss]['custom_cover'];
}
} else {
// 不存在对应的数据则删除
unset($vs[$kss]['goods_data'][$ksss]);
}
}
$vs[$kss]['goods_data'] = array_values($vs[$kss]['goods_data']);
} else {
$vs[$kss]['goods_data'] = [];
}
// 自动读取商品
if(!isset($vss['goods_data_type']) || $vss['goods_data_type'] == 0)
{
$vs[$kss]['goods_data'] = self::AutoGoodsList($vss);
}
}
}
break;
// 文章组
case 6 :
if($ks == 'data' && !empty($vs) && is_array($vs))
{
foreach($vs as $kss=>$vss)
{
if(!empty($vss) && is_array($vss))
{
foreach($vss as $ksss=>$vsss)
{
// 当前url地址当前所有数据类型都有基础标题的数据
if(isset($vsss['url_data']))
{
$vs[$kss][$ksss]['url'] = self::UrlHandle($domain_url, $vsss['url_data']);
}
// 附件url地址处理
if(substr($ksss, 0, 7) == 'images_' && isset($vsss['value']))
{
$vs[$kss][$ksss]['value'] = ResourcesService::AttachmentPathViewHandle($vsss['value']);
}
}
}
// 手动指定的文章
if(isset($vss['article_data_type']) && $vss['article_data_type'] == 1 && !empty($vss['article_data']) && is_array($vss['article_data']))
{
foreach($vss['article_data'] as $ksss=>$vsss)
{
// 处理文章自定义封面图片
if(!empty($vsss['custom_cover']))
{
$vs[$kss]['article_data'][$ksss]['custom_cover'] = ResourcesService::AttachmentPathViewHandle($vsss['custom_cover']);
}
// 文章
if(!empty($appoint['article_data']) && !empty($vsss['data_id']) && array_key_exists($vsss['data_id'], $appoint['article_data']))
{
// 文章数据合并
$vs[$kss]['article_data'][$ksss] = array_merge($appoint['article_data'][$vsss['data_id']], $vs[$kss]['article_data'][$ksss]);
// 是否页面展示
if($is_view && !empty($vs[$kss]['article_data'][$ksss]['custom_cover']))
{
$vs[$kss]['article_data'][$ksss]['images'] = $vs[$kss]['article_data'][$ksss]['custom_cover'];
}
} else {
// 不存在对应的数据则删除
unset($vs[$kss]['article_data'][$ksss]);
}
}
$vs[$kss]['article_data'] = array_values($vs[$kss]['article_data']);
} else {
$vs[$kss]['article_data'] = [];
}