BTemplateLogic.php 8.9 KB
<?php

namespace App\Http\Logic\Bside\BTemplate;

use App\Http\Logic\Bside\BaseLogic;
use App\Models\Blog\BlogCategory;
use App\Models\News\NewsCategory;
use App\Models\Product\Category;
use App\Models\Product\Product;
use App\Models\Service\Service as ServiceSettingModel;
use App\Models\Template\ModuleSetting;
use App\Models\Template\Template;
use App\Models\Template\BSetting;
use App\Models\Template\BTemplate;

/**
 * @remark :b端模块
 * @name   :BTemplateLogic
 * @author :lyh
 * @time   :2023/6/28 17:00
 */
class BTemplateLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();
        $this->model = new BTemplate();
        $this->param = $this->requestAll;
    }

    /**
     * @remark :获取所有公共模板
     * @name   :publicTemplateLists
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 9:34
     */
    public function publicTemplateLists($map,$page,$row,$order = 'created_at',$filed = ['id','name','image','url','created_at','status','deleted_status']){
        $templateModel = new Template();
        $map['deleted_status'] = 0;
        $map['status'] = 0;
        $lists = $templateModel->lists($map,$page,$row,$order,$filed);
        return $this->success($lists);
    }

    /**
     * @remark :获取当前选择使用的模板
     * @name   :getModuleTemplate
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 9:44
     */
    public function getTemplate(){
        $bSettingModel = new BSetting();
        $info = $bSettingModel->read(['project_id'=>$this->user['project_id']]);
        $TemplateInfo = [];
        if($info !== false){
            //查看当前模板是否已编辑保存web_template
            $TemplateInfo = $this->model->read([
                'template_id'=>$info['template_id'],
                'source'=>!isset($this->param['source']) ? 1 : $this->param['source'],
                'project_id'=>$this->user['project_id'],
                'source_id'=>!isset($this->param['source_id']) ? 0 : $this->param['source_id'],
            ]);
            if($TemplateInfo === false){
                //获取模板详情
                $ATemplateModel = new Template();
                $TemplateInfo = $ATemplateModel->read(['id'=>$info['template_id']]);
                $TemplateInfo['html'] = $this->getHeadFooter($TemplateInfo['html']);
            }
        }
        return $this->success($TemplateInfo);
    }

    /**
     * @remark :设置模板
     * @name   :setTemplate
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 9:47
     */
    public function setTemplate(){
        $bSettingModel = new BSetting();
        $info = $bSettingModel->read(['project_id'=>$this->user['project_id']]);
        if($info === false){
            $param = [
                'project_id'=>$this->user['project_id'],
                'template_id'=>$this->param['template_id'],
            ];
            $rs = $bSettingModel->add($param);
        }else{
            $rs = $bSettingModel->edit(['template_id'=>$this->param['template_id']],['project_id'=>$this->user['project_id']]);
        }
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :保存修改后的模版
     * @name   :templateSave
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 11:05
     */
    public function templateSave(){
        //查询当前模版是否已保存
        $info = $this->model->read(
            [
                'project_id'=>$this->user['project_id'],
                'source'=>$this->param['source'] ?? 1,
                'source_id'=>$this->param['source_id'] ?? 0,
                'template_id'=>$this->param['template_id'],
            ]
        );
        if($info === false){
            //字符串截取
            $this->StringProcessing();
            $this->templateSaveParam($this->param['template_id']);
            $rs = $this->model->add($this->param);
        }else{
            $this->StringProcessing();
            $this->templateSaveParam($this->param['template_id']);
            $rs = $this->model->edit($this->param,['id'=>$info['id']]);
        }
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :处理保存模版数据
     * @name   :templateParam
     * @author :lyh
     * @method :post
     * @time   :2023/7/21 16:30
     */
    public function templateSaveParam($template_id){
        $this->param['project_id'] = $this->user['project_id'];
        //获取模板详情
        $ATemplateModel = new Template();
        $TemplateInfo = $ATemplateModel->read(['id'=>$template_id]);
        //同步数据
        $this->param['name'] = $TemplateInfo['name'];
        $this->param['image'] = $TemplateInfo['image'];
        $this->param['html'] =  $this->getHeadFooter(characterTruncation($this->param['html'],'/<style id="vvvebjs-header">(.*?)<\/footer>/s'));
        return true;
    }

    /**
     * @remark :拼接获取公共头部底部
     * @name   :getHeadFooter
     * @author :lyh
     * @method :post
     * @time   :2023/7/21 17:22
     */
    public function getHeadFooter($html){
        //获取公共主题头部底部
        $serviceSettingModel = new ServiceSettingModel();
        $list = $serviceSettingModel->list(['type'=>2],'created_at');
        //拼接html
        foreach ($list as $v){
            if($v['key'] == 'head'){
                $html = $v['values'].$html;
            }
            if($v['key'] == 'footer'){
                $html = $html.$v['values'];
            }
        }
        return $html;
    }

    /**
     * @remark :字符串处理
     * @name   :StringProcessing
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 15:35
     */
    public function StringProcessing(){
        //字符串截取
        $this->param['head_html'] = characterTruncation($this->param['html'],'/<header\b[^>]*>(.*?)<\/header>/s');
        $this->param['footer_html'] = characterTruncation($this->param['html'],'/<footer\b[^>]*>(.*?)<\/footer>/s');
        $this->param['head_css'] = characterTruncation($this->param['html'],'/<style id="vvvebjs-header">(.*?)<\/style>/s');
        $this->param['footer_css'] = characterTruncation($this->param['html'],'/<style id="vvvebjs-footer">(.*?)<\/style>/s');
    }



    /**
     * @remark :获取类型
     * @name   :getModuleType
     * @author :lyh
     * @method :any
     * @time   :2023/7/17 16:03
     */
    public function getModuleType(): array
    {
        //前端会回传:products:1,news:2,blogs:3,productCategory:4
        //定义数据结构
        $data = [
            "products"=>[
                "category"=>[
                    [
                        "id"=>"all",
                        "title"=>"全部",
                    ],
                    [
                        "id"=>"hot",
                        "title"=>"热销产品",
                    ],
                    [
                        "id"=>"recommend",
                        "title"=>"推荐产品",
                    ],
                ],
                "imageType"=>[
                    [
                        "id"=>1,
                        "title"=>"产品图片",
                    ],[
                        "id"=>2,
                        "title"=>"产品分类图片",
                    ],[
                        "id"=>3,
                        "title"=>"产品图标",
                    ]
                ],
            ],
            "news"=>[
                "category"=>[
                    [
                        "id"=>"all",
                        "name"=>"全部",
                    ],
                    [
                        "id"=>"new",
                        "name"=>"最新",
                    ],
                ],
            ],
            "blogs"=>[
                "category"=>[
                    [
                        "id"=>"all",
                        "name"=>"全部",
                    ],
                    [
                        "id"=>"new",
                        "name"=>"最新",
                    ],
                ],
            ]
        ];
        //产品,新闻,博客,一级分类数据
        $productCategory = Category::where("pid",0)->get();
        $newCategory = NewsCategory::where("pid",0)->get();
        $blogCategory = BlogCategory::where("pid",0)->get();
        if (!empty($productCategory)){
            foreach ($productCategory as $item){
                $data["products"]["category"][] =$item;
            }
        }
        if (!empty($newCategory)){
            foreach ($newCategory as $item){
                $data["news"]["category"][] =$item;
            }
        }
        if (!empty($blogCategory)){
            foreach ($blogCategory as $item){
                $data["blogs"]["category"][] =$item;
            }
        }
        //返回
        return $this->success($data);
    }
}