123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- <?php
- /**
- * 页面模版管理
- * @copyright 2021-浙江引擎力营销策划有限公司
- * @author Lc<sunshinecc1@163.com>
- * @since 2021-08-01
- */
- namespace App\Http\Controllers\Admin\Stencil;
- use App\Http\Controllers\Controller;
- use App\Http\Models\Site;
- use App\Http\Services\TemplateLibraryApiService;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Contracts\View\Factory;
- use Illuminate\View\View;
- use Illuminate\Support\Collection;
- use Illuminate\Http\JsonResponse;
- class TplController extends Controller
- {
- const TEMPLATE_PID = -1;
- const VARIABLE_PID = -2;
- private $templateLibraryApiService;
- /**
- * 模版站服务类
- * TplController constructor.
- * @param TemplateLibraryApiService $templateLibraryApiService
- */
- public function __construct(TemplateLibraryApiService $templateLibraryApiService)
- {
- $this->templateLibraryApiService = $templateLibraryApiService;
- }
- /**
- * 页面模版管理
- * @param $siteId
- * @return Factory|View
- */
- public function index($siteId)
- {
- try {
- $site = Site::query()->where('id', $siteId)->first();
- $templateList = $this->templateLibraryApiService->arraySort($this->getContentTemplateList($siteId), 'name');
- $templateVarList = $this->templateLibraryApiService->arraySort($this->getContentTemplateVar($siteId), 'name');
- $trees = list_to_tree(array_merge($templateList, $templateVarList), 'id', 'parent_id', 'children');
- return view('admin.stencil.tpl', [
- 'trees' => $trees,
- 'site' => $site,
- 'siteId' => $siteId,
- 'templateList' => $templateList,
- 'variable' => $this->arraySort(json_decode(json_encode($this->getTemplateList($siteId, true)), true),'name'),
- 'template' => $this->arraySort(json_decode(json_encode($this->getVariableList($siteId)), true),'name'),
- ]);
- } catch (\Throwable $exception) {
- echo $exception->getMessage();
- }
- }
- /**
- * 获取内容模版列表
- * @param $siteId
- * @return array
- */
- public function getContentTemplateList($siteId)
- {
- $templateList = $this->getTemplateList($siteId);
- $list1 = [];
- if (!empty($templateList)) {
- foreach ($templateList as $key => $value) {
- $list1 [] = [
- 'id' => $value->id,
- 'parent_id' => $value->parent_id,
- 'name' => "{$value->name}(#{$value->id})",
- 'title' => $value->name ?? '',
- 'alias' => $value->alias ?? '',
- 'rank' => $value->rank ?? 0,
- 'description' => $value->description ?? '',
- 'allow_write_file' => $value->allow_write_file ?? '',
- 'allow_clear_cache' => $value->allow_clear_cache ?? '',
- 'url_level' => $value->url_level ?? '',
- 'images' => json_decode($value->images, true) ?? [],
- 'level' => $value->level ?? 0,
- 'type' => 1,//模版,用于区分模版和变量
- ];
- }
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- $relatedIdList = $connection->table('content_template_relate')->get()->toArray();
- foreach ($list1 as $key => $value) {
- $list1[$key]['varIdList'] = [];
- foreach ($relatedIdList as $kk => $vv) {
- if ($value['id'] == $vv->tid) {
- $list1[$key]['varIdList'][] = $vv->vid;
- }
- }
- }
- }
- return $list1;
- }
- /**
- * 获取模版列表
- * @param $siteId
- * @param bool $type 是否只获取一级列表
- * @return Collection
- */
- private function getTemplateList($siteId, $type = false)
- {
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- $template = $connection->table('content_template');
- if ($type) {
- $template->where('level', 2);
- }
- $templateList = $template
- ->where('status', '<', 2)
- ->orderBy('rank', 'asc')
- ->orderBy('id', 'asc')
- ->get();
- return $templateList;
- }
- /**
- * 获取变量列表
- * @param $siteId
- * @return Collection
- */
- private function getVariableList($siteId)
- {
- $variableList = DB::connection($this->templateLibraryApiService->connection($siteId))
- ->table('content_template_var')
- ->where('status', '<', 2)
- ->orderBy('rank', 'asc')
- ->orderBy('id', 'asc')
- ->get();
- return $variableList;
- }
- /**
- * 获取模版变量
- * @param $siteId
- * @return array
- */
- public function getContentTemplateVar($siteId)
- {
- $variableList = $this->getVariableList($siteId);
- $list2 = [];
- if (!empty($variableList)) {
- $list2[] = [
- 'id' => self::VARIABLE_PID,
- 'parent_id' => 0,
- 'name' => 'Variable',
- 'title' => '',
- 'alias' => '',
- 'rank' => 0,
- 'description' => '',
- 'allow_write_file' => '',
- 'allow_clear_cache' => '',
- 'url_level' => '',
- 'html' => '',
- 'input_length' => 0,
- 'width' => 0,
- 'height' => 0,
- 'size' => 0,
- 'input_value' => '',
- 'regex_match' => '',
- 'regex_error' => '',
- 'type' => 2,//模版,用于区分模版和变量
- ];
- foreach ($variableList as $key => $value) {
- $list2 [] = [
- 'id' => $value->id,
- 'parent_id' => $list2[0]['id'],
- 'name' => "{$value->name}(#{$value->id})",
- 'title' => $value->name ?? '',
- 'alias' => $value->caption,
- 'rank' => $value->rank,
- 'description' => $value->description,
- 'allow_write_file' => $value->allow_write_file ?? '',
- 'allow_clear_cache' => $value->allow_clear_cache ?? '',
- 'url_level' => $value->url_level ?? '',
- 'html' => '',
- 'input_opts' => $value->input_opts ?? '',
- 'input_length' => $value->input_length ?? 0,
- 'width' => $value->width ?? 0,
- 'height' => $value->height ?? 0,
- 'size' => $value->size ?? 0,
- 'input_type' => $value->input_type,
- 'input_value' => $value->input_value,
- 'regex_match' => $value->regex_match,
- 'regex_error' => $value->regex_error,
- 'type' => 2,
- ];
- }
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- $relatedIdList = $connection->table('content_template_relate')->get()->toArray();
- foreach ($list2 as $key => $value) {
- $list2[$key]['templateIdList'] = [];
- foreach ($relatedIdList as $kk => $vv) {
- if ($value['id'] == $vv->vid) {
- $list2[$key]['templateIdList'][] = $vv->tid;
- }
- }
- }
- }
- return $list2;
- }
- /**
- * 保存模版
- * @param Request $request
- * @param $siteId
- * @return JsonResponse
- */
- public function templateSave(Request $request, $siteId)
- {
- $request = $request->all();
- $update = [
- 'name' => $request['title'] ?? '',
- 'description' => $request['description'] ?? '',
- 'url_rule' => $request['sub_type'] ?? 2,
- 'alias' => $request['alias'] ?? '',
- 'rank' => $request['rank'] ?? 0,
- 'url_level' => $request['url_level'] ?? 0,
- 'images' => json_encode($request['images'] ?? []),
- ];
- if (empty($request['template_id'])) {
- return response()->json(['message' => '请选择子菜单操作'], 400);
- }
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- if (!empty($request['checkboxList'])) {
- $connection->table('content_template_relate')->where('tid', $request['template_id'])->delete();
- $list = $request['checkboxList'];
- $data = [];
- foreach ($list as $value) {
- $result = [
- 'vid' => $value,
- 'tid' => $request['template_id'],
- ];
- $data[] = $result;
- }
- $connection->table('content_template_relate')->insert($data);
- } else {
- $connection->table('content_template_relate')->where('tid', $request['template_id'])->delete();
- }
- $connection->table('content_template')->where('id', $request['template_id'])->update($update);
- return response()->json(['message' => '操作成功']);
- }
- /**
- * 保存变量
- * @param Request $request
- * @param $siteId
- * @return JsonResponse
- */
- public function variableSave(Request $request, $siteId)
- {
- $request = $request->all();
- $update = [
- 'name' => $request['title2'] ?? '',
- 'description' => $request['description'] ?? '',
- 'caption' => $request['alias'] ?? '',
- 'rank' => $request['rank'] ?? 0,
- 'input_type' => $request['input_type'] ?? '',
- 'input_opts' => $request['input_opts'] ?? '',
- 'input_length' => $request['input_length'] ?? '',
- 'width' => $request['width'] ?? 0,
- 'height' => $request['height'] ?? 0,
- 'size' => $request['size'] ?? 0,
- 'input_value' => $request['input_value'] ?? '',
- 'regex_match' => $request['regex_match'] ?? '',
- 'regex_error' => $request['regex_error'] ?? '',
- ];
- if (empty($request['variable_id'])) {
- return response()->json(['message' => '请选择子菜单操作'], 400);
- }
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- if (!empty($request['checkboxList'])) {
- $connection->table('content_template_relate')->where('vid', $request['variable_id'])->delete();
- $list = $request['checkboxList'];
- $data = [];
- foreach ($list as $value) {
- $result = [
- 'vid' => $request['variable_id'],
- 'tid' => $value,
- ];
- $data[] = $result;
- }
- $connection->table('content_template_relate')->insert($data);
- } else {
- $connection->table('content_template_relate')->where('vid', $request['variable_id'])->delete();
- }
- $connection->table('content_template_var')->where('id', $request['variable_id'])->update($update);
- return response()->json(['message' => '操作成功']);
- }
- /**
- * 添加变量
- * @param Request $request
- * @param $siteId
- * @return JsonResponse
- */
- public function templateAddNode(Request $request, $siteId)
- {
- $result = $request->all();
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- if ($result['pid'] == self::TEMPLATE_PID && $result['type'] == 1) {
- $data = [
- 'name' => $result['node'],
- 'parent_id' => self::TEMPLATE_PID,
- 'alias' => $result['node'],
- 'level' => ++$result['level'] ?? 0,
- 'description' => '',
- 'html' => '',
- 'rank' => 0,
- 'allow_write_file' => 0,
- 'allow_clear_cache' => 0,
- 'create_time' => time()
- ];
- $connection->table('content_template')->insert($data);
- } elseif ($result['pid'] != self::TEMPLATE_PID && $result['type'] == 1) {
- $data = [
- 'name' => $result['node'],
- 'parent_id' => $result['pid'],
- 'alias' => $result['node'],
- 'level' => ++$result['level'] ?? 0,
- 'description' => '',
- 'html' => '',
- 'rank' => 0,
- 'allow_write_file' => 0,
- 'allow_clear_cache' => 0,
- 'create_time' => time()
- ];
- $connection->table('content_template')->insert($data);
- } elseif ($result['pid'] == self::VARIABLE_PID && $result['type'] == 2) {
- $data = [
- 'name' => $result['node'],
- 'caption' => $result['node'],
- 'description' => '',
- 'input_type' => 'text',
- 'input_value' => '',
- 'input_opts' => '',
- 'input_length' => 0,
- 'allow_blank' => 0,
- 'regex_match' => '',
- 'regex_error' => '',
- 'rank' => 0,
- 'status' => 0,
- 'width' => 0,
- 'height' => 0,
- 'size' => 0,
- 'create_time' => time(),
- ];
- $connection->table('content_template_var')->insert($data);
- } else {
- return response()->json(['message' => '不允许添加子级变量'], 400);
- }
- return response()->json(['message' => '操作成功']);
- }
- /**
- * 删除变量
- * @param Request $request
- * @param $siteId
- * @return JsonResponse
- */
- public function templateDelNode(Request $request, $siteId)
- {
- $request = $request->all();
- $connection = DB::connection($this->templateLibraryApiService->connection($siteId));
- if ($request['pid'] == self::VARIABLE_PID) {
- $result = $connection->table('content_template_var')->where('id', $request['id'])->delete();
- } else {
- $result = $connection->table('content_template')->where('id', $request['id'])->delete();
- }
- if (empty($result)) {
- return response()->json(['message' => '服务器发生错误', '400']);
- } else {
- return response()->json(['message' => '操作成功']);
- }
- }
- }
|