VisualEditorController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace App\Distributor\Controllers;
  3. use App\Distributor\Metrics\DistMessage;
  4. use App\Distributor\Repositories\DistAdminDistributor;
  5. use App\Distributor\Repositories\DistAppearancePublishList;
  6. use App\Distributor\Repositories\DistAppearanceTemplate;
  7. use App\Distributor\Repositories\SiteMenu;
  8. use App\Http\Controllers\Controller;
  9. use App\Libraries\CommonHelper;
  10. use Dcat\Admin\Layout\Column;
  11. use Dcat\Admin\Layout\Content;
  12. use Dcat\Admin\Layout\Row;
  13. use Dcat\Admin\Traits\HasUploadedFile;
  14. class VisualEditorController extends Controller
  15. {
  16. use HasUploadedFile;
  17. /*
  18. * 可视化编辑器
  19. */
  20. public function index()
  21. {
  22. $mid = isset($_GET['mid'])? intval($_GET['mid']) : 0;
  23. $uri = isset($_GET['uri'])? $_GET['uri'] : '';
  24. //网站html内容
  25. $url = getSiteDomain();
  26. $html = $this->getURlHTML($url,$uri);
  27. //菜单
  28. $siteMenu = SiteMenu::showAllSelectOptions();
  29. foreach ($siteMenu as $key => $value) {
  30. if ($value['url'] == '/' && $mid == 0) {
  31. $mid =$value['id'];
  32. break;
  33. }
  34. }
  35. //
  36. $publish = admin_trans_label('publish');
  37. $visualEdit = admin_trans_label('visual_edit');
  38. return view('distributor.pages-custom.visual-editor',[
  39. 'html'=>$html,
  40. 'siteMenu'=>json_encode($siteMenu),
  41. 'mid'=>$mid,
  42. 'publish' => $publish,
  43. 'visualEdit' => $visualEdit,
  44. ]);
  45. }
  46. /*
  47. * 保存预览修改
  48. */
  49. public function previewSave()
  50. {
  51. $html = isset($_POST['html'])? $_POST['html'] : '';
  52. if (empty($html) == false) {
  53. DistAppearanceTemplate::previewSave($html);
  54. }
  55. return response()->json(['status' => 1]);
  56. }
  57. /*
  58. * 发布
  59. */
  60. public function publish()
  61. {
  62. $info = DistAdminDistributor::getInfo();
  63. $distId = $info->id;
  64. $appearanceId = $info->appearance_id;
  65. //发布
  66. DistAppearancePublishList::publish($appearanceId, $distId);
  67. //清除缓存
  68. DistAdminDistributor::clearCache();
  69. return ['status'=>1,'message'=>admin_trans('admin.update_succeeded')];
  70. }
  71. /*
  72. * 上传图片
  73. */
  74. public function upload()
  75. {
  76. $disk = $this->disk('oss');
  77. // 判断是否是删除文件请求
  78. if ($this->isDeleteRequest()) {
  79. // 删除文件并响应
  80. //return $this->deleteFileAndResponse($disk);
  81. return $this->responseDeleted();
  82. }
  83. // 获取上传的文件
  84. $file = $this->file();
  85. // 获取上传的字段名称
  86. // $column = $this->uploader()->upload_column;
  87. $column = uniqueCode("img");
  88. $dir = config("distributor.upload.gjs_directory.image").'/'.date('Ymd');
  89. $newName = $column.'.'.$file->getClientOriginalExtension();
  90. $result = $disk->putFileAs($dir, $file, $newName);
  91. $result = CommonHelper::ossUrl($result);
  92. $response = [
  93. 'data'=>[[
  94. 'src' => $result,
  95. 'type'=>'image',
  96. ]]
  97. ];
  98. return json_encode($response);
  99. }
  100. private function getURlHTML($url,$uri)
  101. {
  102. $siteUrl = $url . $uri;
  103. // 检查URL中是否已经包含?
  104. if (strpos($siteUrl, '?') !== false) {
  105. // 如果包含?则添加&mtb-preview=1
  106. $siteUrl .= "&mtb-preview=1";
  107. } else {
  108. // 如果不包含?则添加?mtb-preview=1
  109. $siteUrl .= "?mtb-preview=1";
  110. }
  111. $ch = curl_init($siteUrl);
  112. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回原生的(Raw)输出
  113. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查(在生产环境中,应将其设置为true并指定CA证书路径)
  114. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过证书主机名验证
  115. $html = curl_exec($ch);
  116. if (curl_errno($ch)) {
  117. echo 'cURL error: ' . curl_error($ch);exit;
  118. }
  119. curl_close($ch);
  120. $pattern = '/<(link|script|img)[^>]*\s+(href|src)=["\'](\/[^"\']+)["\'][^>]*>/i';
  121. $replacement = function($matches) use ($url) {
  122. // $matches[3] 是匹配到的以 / 开头的路径
  123. return str_replace($matches[3], $url . $matches[3], $matches[0]);
  124. };
  125. $html = preg_replace_callback($pattern, $replacement, $html);
  126. //把form去掉
  127. $pattern = '/<form[^>]*>(.*?)<\/form>/is';
  128. $html = preg_replace($pattern, '$1', $html);
  129. return $html;
  130. }
  131. }