CreateHtmlService.php
4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2024/2/19
* Time: 15:46
*/
namespace App\Services\Html;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Services\TdkService;
class CreateHtmlService
{
public function __construct(){}
/**
* 返回最终需要的HTML
* @return string
*/
public function getHtml($project_id, $route, $lang = [], $page = 0)
{
$projectModel = new Project();
$projectInfo = $projectModel->with(['payment', 'deploy_build'])->where(['id'=>$project_id])->first()->toArray();
$routeMapModel = new RouteMap();
$routeInfo = $routeMapModel->read(['route'=>$route]);
if($routeInfo === false){
if($route == 'top-search' || $route == 'products' || $route == 'news' || $route == 'blog'){
$html = '';
}else{
$html = '';
}
}else{
//TODO::5.0,6.0获取html,自定义页面还需要单独处理
if(($routeInfo['source'] == RouteMap::SOURCE_PAGE) && ($route != 'index')){
$customTemplateService = new CustomTemplateService();
$data = $customTemplateService->getHtml($projectInfo,$routeInfo['source_id']);
if($data === false){
return false;
}
$html = $data['html'];
}else{
$generatePageService = new GeneratePageService();
$data = $generatePageService->generateHtml($projectInfo,$routeInfo);
if($data === false){
return false;
}
$html = $data['html'];
}
}
//处理页面tdk
$tdkService = new TdkService();
$html = $tdkService->pageTdkHandle($projectInfo,$html,$routeInfo['source'],$routeInfo);
return ['html'=>$html];
}
/**
* 返回6.0页面最终HTML
* @return mixed
*/
public function getHtmlV6($project_id,$route)
{
// 初始化后续需要渲染页面需要的数据 路由、主语种、tdk、嵌入等信息
$origin_html = $this->originHtml($project_id,$route);
$html = $this->renderData($origin_html);
$html = $this->plugHead($html);
$html = $this->processFinal($html);
/** ... 调用其他方法, 直至返回完整的正确的HTML */
return $html;
}
/**
* 根据路由信息 返回 路由属性及详细信息
* @param string $route
* @return array
*/
public function getInfoByRoute($route)
{
$routeMapModel = new RouteMap();
$routeInfo = $routeMapModel->read(['route'=>$route]);
if($routeInfo === false){
if($route == 'top-search' || $route == 'products' || $route == 'news' || $route == 'blog'){
$routeInfo = $route;
}else{
$routeInfo = [];
}
}
// TODO 获取详情需要通过路由查下路由信息, 以及数据信息, 要处理特殊几个路由: top-search、products、news、blog, 这几个如果存在就用查下的信息, 如果不存在要初始化信息
return $routeInfo;
}
/**
* 获取可视化HTML
* @return string
*/
public function originHtml($project_id,$route)
{
}
/**
* 补充其他信息
* TDK mate信息等
* @param $html
* @return mixed
*/
public function plugHead($html)
{
/** 渲染tdk信息、 mate信息、 嵌入信息、 图标信息*/
return $html;
}
/**
* 处理最终信息
* 处理标签、最后代码标识、特殊规则或者字符等
* @param string $html
* @return string
*/
public function processFinal($html)
{
return $html;
}
/**
* 渲染页面数据
* @param string $html
* @return string
*/
public function renderData($html, $page)
{
/**
* 根据可视化HTML中关键词渲染数据
* 这个方法还需要进行拆分, 这个功能内容应该会比较多
* 并且还会根据路由信息和分页信息不同, 渲染不同数据, 只要针对列表页面
*/
return $html;
}
}