1880 lines
79 KiB
PHP
1880 lines
79 KiB
PHP
<?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'] = [];
|
||
}
|
||
|