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

416 lines
14 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\NavigationService;
use app\service\RegionService;
use app\service\GoodsCategoryService;
/**
* 面包屑导航服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class BreadcrumbService
{
/**
* 面包屑数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-07-20
* @desc description
* @param [string] $method [方法类型]
* @param [array] $params [输入参数]
*/
public static function Data($method = '', $params = [])
{
// 默认首页
$result = [
[
'type' => 0,
'name' => MyLang('home_title'),
'url' => SystemService::DomainUrl(),
'icon' => 'am-icon-home',
],
];
// 根据页面自动添加面包屑导航
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5);
if(!empty($backtrace))
{
// 用户中心
if(!empty($backtrace[3]) && !empty($backtrace[3]['class']) && $backtrace[3]['class'] == 'app\index\controller\Center')
{
$result[] = [
'type' => 0,
'name' => MyLang('common_service.navigation.user_center_left_list.center'),
'url' => MyUrl('index/user/index'),
];
// 当前控制器
$user_center_menu = NavigationService::UserCenterLeftList();
if(!empty($user_center_menu))
{
// 临时导航
$temp_nav = [];
// 当前控制器
$controller = RequestController();
// 是否插件
if($controller == 'plugins')
{
$url = PluginsHomeUrl(PluginsRequestName());
} else {
$url = MyUrl('index/'.$controller.'/index');
}
// 是否存在对应
foreach($user_center_menu as $v)
{
// 一级菜单是否存在
if(!empty($v['url']) && stripos($v['url'], $url) !== false)
{
$temp_nav = $v;
break;
}
// 子级数据
if(!empty($v['item']) && is_array($v['item']))
{
foreach($v['item'] as $vs)
{
if(!empty($vs['url']) && stripos($vs['url'], $url) !== false)
{
$temp_nav = $vs;
break 2;
}
}
}
}
if(!empty($temp_nav))
{
$result[] = [
'type' => 0,
'name' => $temp_nav['name'],
'url' => $temp_nav['url'],
];
}
}
}
}
// 根据类型调用方法
$temp_result = [];
if(!empty($method))
{
if(method_exists(__CLASS__, $method))
{
$temp_result = self::$method($params);
}
}
return array_merge($result, $temp_result);
}
/**
* 商品搜索
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-07-20
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsSearch($params = [])
{
$result = [];
// 商品分类
if(!empty($params['cid']))
{
// 一级
$where = [
['id', '=', intval($params['cid'])],
['is_enable', '=', 1],
];
$category = Db::name('GoodsCategory')->where($where)->field('id,pid,name')->find();
if(!empty($category))
{
$where = [
['pid', '=', $category['pid']],
['is_enable', '=', 1],
];
$category_list = Db::name('GoodsCategory')->where($where)->field('id,pid,name')->select()->toArray();
if(!empty($category_list))
{
array_unshift($result, [
'id' => $category['id'],
'name' => $category['name'],
'type' => 1,
'data' => array_map(function($v)
{
$v['url'] = MyUrl('index/search/index', ['cid'=>$v['id']]);
return $v;
}, $category_list),
]);
// 二级
$where = [
['id', '=', $category['pid']],
['is_enable', '=', 1],
];
$category = Db::name('GoodsCategory')->where($where)->field('id,pid,name')->find();
if(!empty($category))
{
$where = [
['pid', '=', $category['pid']],
['is_enable', '=', 1],
];
$category_list = Db::name('GoodsCategory')->where($where)->field('id,pid,name')->select()->toArray();
if(!empty($category_list))
{
array_unshift($result, [
'id' => $category['id'],
'name' => $category['name'],
'type' => 1,
'data' => array_map(function($v)
{
$v['url'] = MyUrl('index/search/index', ['cid'=>$v['id']]);
return $v;
}, $category_list),
]);
// 三级
$where = [
['id', '=', $category['pid']],
['is_enable', '=', 1],
];
$category = Db::name('GoodsCategory')->where($where)->field('id,pid,name')->find();
if(!empty($category))
{
$where = [
['pid', '=', $category['pid']],
['is_enable', '=', 1],
];
$category_list = Db::name('GoodsCategory')->where($where)->field('id,pid,name')->select()->toArray();
if(!empty($category_list))
{
array_unshift($result, [
'id' => $category['id'],
'name' => $category['name'],
'type' => 1,
'data' => array_map(function($v)
{
$v['url'] = MyUrl('index/search/index', ['cid'=>$v['id']]);
return $v;
}, $category_list),
]);
}
}
}
}
}
}
}
// 品牌、价格、关键字、属性、规格
// 集合名称
$temp_name = [];
// 品牌
$bid = empty($params['bid']) ? (empty($params['brand']) ? 0 : intval($params['brand'])) : intval($params['bid']);
if(!empty($bid))
{
$brand = Db::name('Brand')->where(['id'=>$bid])->value('name');
if(!empty($name))
{
$temp_name[] = $name;
}
}
// 价格区间
if(!empty($params['peid']))
{
$name = Db::name('ScreeningPrice')->where(['id'=>intval($params['peid'])])->value('name');
if(!empty($name))
{
$temp_name[] = $name;
}
}
// 商品产地
if(!empty($params['poid']))
{
$name = RegionService::RegionName(intval($params['poid']));
if(!empty($name))
{
$temp_name[] = $name;
}
}
// 搜索关键字
if(!empty($params['wd']))
{
$temp_name[] = AsciiToStr($params['wd']);
}
// 属性
if(!empty($params['psid']))
{
$temp_name[] = AsciiToStr($params['psid']);
}
// 规格
if(!empty($params['scid']))
{
$temp_name[] = AsciiToStr($params['scid']);
}
if(!empty($temp_name))
{
$result[] = [
'type' => 0,
'name' => implode(' / ', $temp_name).MyLang('common_service.search.search_breadcrumb_result_last_text'),
];
}
return $result;
}
/**
* 商品详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-07-20
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsDetail($params = [])
{
$result = [];
if(!empty($params['goods']))
{
// 商品分类
$cids = Db::name('GoodsCategoryJoin')->where(['goods_id'=>$params['goods']['id']])->column('category_id');
if(!empty($cids))
{
// 仅一个分类则读取上级分类数据
if(count($cids) == 1)
{
$where = [
['id', 'in', GoodsCategoryService::GoodsCategoryParentIds($cids)],
['is_enable', '=', 1],
];
$category = Db::name('GoodsCategory')->where($where)->field('id,name')->select()->toArray();
if(!empty($category))
{
foreach($category as $v)
{
$result[] = [
'type' => 0,
'name' => $v['name'],
'url' => MyUrl('index/search/index', ['cid'=>$v['id']]),
];
}
}
} else {
$where = [
['id', 'in', $cids],
['is_enable', '=', 1],
];
$category = Db::name('GoodsCategory')->where($where)->field('id,name')->select()->toArray();
if(!empty($category))
{
$category = array_map(function($v)
{
$v['url'] = MyUrl('index/search/index', ['cid'=>$v['id']]);
return $v;
}, $category);
$result[] = [
'type' => 1,
'name' => MyLang('goods_category_title'),
'data' => $category,
];
}
}
}
// 当前商品名称
$result[] = [
'type' => 0,
'name' => $params['goods']['title'],
];
}
return $result;
}
/**
* 文章分类
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-07-20
* @desc description
* @param [array] $params [输入参数]
*/
public static function ArticleCategory($params = [])
{
$result = [];
if(!empty($params['category_info']))
{
// 当前文章分类名称
$result[] = [
'type' => 0,
'name' => $params['category_info']['name'],
];
}
return $result;
}
/**
* 文章详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-07-20
* @desc description
* @param [array] $params [输入参数]
*/
public static function ArticleDetail($params = [])
{
$result = [];
if(!empty($params['article']))
{
// 文章分类
if(!empty($params['article']['article_category_id']))
{
$category_name = Db::name('ArticleCategory')->where(['id'=>$params['article']['article_category_id']])->value('name');
if(!empty($category_name))
{
$result[] = [
'type' => 0,
'name' => $category_name,
'url' => MyUrl('index/article/category', ['id'=>$params['article']['article_category_id']]),
];
}
}
// 当前文章名称
$result[] = [
'type' => 0,
'name' => $params['article']['title'],
];
}
return $result;
}
}
?>