文件
xionggeshop/addons/shopro/model/Decorate.php

184 行
6.1 KiB
PHP

<?php
namespace addons\shopro\model;
use addons\shopro\model\DecorateContent;
use think\Model;
use addons\shopro\exception\Exception;
/**
* 模板装修
*/
class Decorate extends Model
{
// 表名,不含前缀
protected $name = 'shopro_decorate';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
protected $hidden = ['createtime', 'updatetime', 'deletetime'];
// 追加属性
protected $append = [
];
// 获取当前平台模板装修数据
public static function getCurrentPlatformDecorate($platform = '', $id = 0)
{
$where = ['deletetime' => null];
if ($id !== 0) {
$where['id'] = $id;
}
if ($platform == 'preview') {
$decorate = self::where($where)->order('id asc')->find();
} else {
$where['status'] = 'normal';
$where['type'] = 'shop';
$decorate = self::where('find_in_set(:platform,platform)', ['platform' => $platform])->where($where)->order('id asc')->find();
}
if (!$decorate) {
new Exception('未找到模板');
}
$template = self::getDecorateContent($decorate);
return $template;
}
public static function getCustomDecorate($id)
{
$decorateContent = DecorateContent::all(['decorate_id' => $id]);
foreach ($decorateContent as &$v) {
$v['content'] = self::getDecorateContentByType($v);
}
return $decorateContent;
}
public static function asyncDecorateScreenShot($params)
{
$decorate = self::get($params['shop_id']);
if ($decorate) {
$decorate->image = $params['image'];
$decorate->save();
}
}
public static function getDecorateContent($decorate)
{
$template['home'] = []; //首页
$template['user'] = []; //个人中心
$template['tabbar'] = []; //底部菜单
$template['popup'] = []; //弹出提醒
$template['float-button'] = []; //悬浮按钮
$decorateContent = DecorateContent::all(['decorate_id' => $decorate->id]);
foreach ($decorateContent as $k => $v) {
$v['content'] = self::getDecorateContentByType($v);
$template[$v->category][] = $v;
}
return $template;
}
public static function getDecorateContentByType($templateValue)
{
$content = json_decode($templateValue->content, true);
if (!is_array($content)) {
$content = [];
}
switch ($templateValue['type']) {
case 'search':
case 'coupons':
case 'live':
case 'seckill':
case 'groupon':
case 'wallet-card':
case 'order-card':
case 'rich-text':
case 'nav-bg':
break;
case 'banner':
case 'menu':
case 'adv':
case 'grid-list':
case 'popup':
case 'nav-list':
if (!empty($content['list']) && is_array($content['list'])) {
foreach ($content['list'] as &$l) {
$l['image'] && $l['image'] = cdnurl($l['image'], true);
}
unset($l);
$content['list'] = array_values(array_filter($content['list'], function ($item) {
return !self::isHiddenMenuItem($item);
}));
} else {
$content['list'] = [];
}
break;
case 'user':
case 'title-block':
case 'goods-list':
case 'goods-group':
case 'image-goods':
$content['image'] && $content['image'] = cdnurl($content['image'], true);
break;
case 'tabbar':
if (isset($content['style']) && $content['style'] < 3 && !empty($content['list']) && is_array($content['list'])) {
foreach ($content['list'] as &$l) {
$l['image'] && $l['image'] = cdnurl($l['image'], true);
$l['activeImage'] && $l['activeImage'] = cdnurl($l['activeImage'], true);
}
unset($l);
} elseif (!isset($content['list']) || !is_array($content['list'])) {
$content['list'] = [];
}
break;
case 'float-button':
$content['image'] = cdnurl($content['image'], true);
if (!empty($content['list']) && is_array($content['list'])) {
foreach ($content['list'] as &$l) {
if ($l['style'] == 1) {
$l['image'] && $l['image'] = cdnurl($l['image'], true);
}
$l['btnimage'] && $l['btnimage'] = cdnurl($l['btnimage'], true);
}
unset($l);
} else {
$content['list'] = [];
}
break;
}
return $content;
}
/**
* 已关闭的功能入口,不在前端展示
*/
protected static function isHiddenMenuItem($item)
{
if (!is_array($item)) {
return false;
}
$name = isset($item['name']) ? (string) $item['name'] : '';
$path = isset($item['path']) ? (string) $item['path'] : '';
$hiddenNames = ['我的报修', '门店管理', '我的拼团', '今日必拼'];
if (in_array($name, $hiddenNames, true)) {
return true;
}
$hiddenPaths = ['/pages/activity/groupon', '/pages/app/merchant', '/pages/order/after-sale/list'];
foreach ($hiddenPaths as $hiddenPath) {
if ($path && strpos($path, $hiddenPath) !== false) {
return true;
}
}
return false;
}
}