Ggongfuxiangv6.8.0
bdf1fe5c创建于 3月4日历史提交
<?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;
    }
}
?>