VisualEditorController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. //
  30. $publish = admin_trans_label('publish');
  31. $visualEdit = admin_trans_label('visual_edit');
  32. return view('distributor.pages-custom.visual-editor',[
  33. 'html'=>$html,
  34. 'siteMenu'=>json_encode($siteMenu),
  35. 'mid'=>$mid,
  36. 'publish' => $publish,
  37. 'visualEdit' => $visualEdit,
  38. ]);
  39. }
  40. /*
  41. * 保存预览修改
  42. */
  43. public function previewSave()
  44. {
  45. $html = isset($_POST['html'])? $_POST['html'] : '';
  46. if (empty($html) == false) {
  47. DistAppearanceTemplate::previewSave($html);
  48. }
  49. return response()->json(['status' => 1]);
  50. }
  51. /*
  52. * 发布
  53. */
  54. public function publish()
  55. {
  56. $info = DistAdminDistributor::getInfo();
  57. $distId = $info->id;
  58. $appearanceId = $info->appearance_id;
  59. //发布
  60. DistAppearancePublishList::publish($appearanceId, $distId);
  61. //清除缓存
  62. DistAdminDistributor::clearCache();
  63. return ['status'=>1,'message'=>admin_trans('admin.update_succeeded')];
  64. }
  65. /*
  66. * 上传图片
  67. */
  68. public function upload()
  69. {
  70. $disk = $this->disk('oss');
  71. // 判断是否是删除文件请求
  72. if ($this->isDeleteRequest()) {
  73. // 删除文件并响应
  74. //return $this->deleteFileAndResponse($disk);
  75. return $this->responseDeleted();
  76. }
  77. // 获取上传的文件
  78. $file = $this->file();
  79. // 获取上传的字段名称
  80. // $column = $this->uploader()->upload_column;
  81. $column = uniqueCode("img");
  82. $dir = config("distributor.upload.gjs_directory.image").'/'.date('Ymd');
  83. $newName = $column.'.'.$file->getClientOriginalExtension();
  84. $result = $disk->putFileAs($dir, $file, $newName);
  85. $result = CommonHelper::ossUrl($result);
  86. $response = [
  87. 'data'=>[[
  88. 'src' => $result,
  89. 'type'=>'image',
  90. ]]
  91. ];
  92. return json_encode($response);
  93. }
  94. private function getURlHTML($url,$uri)
  95. {
  96. $siteUrl = $url . $uri;
  97. // 检查URL中是否已经包含?
  98. if (strpos($siteUrl, '?') !== false) {
  99. // 如果包含?则添加&mtb-preview=1
  100. $siteUrl .= "&mtb-preview=1";
  101. } else {
  102. // 如果不包含?则添加?mtb-preview=1
  103. $siteUrl .= "?mtb-preview=1";
  104. }
  105. $ch = curl_init($siteUrl);
  106. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回原生的(Raw)输出
  107. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查(在生产环境中,应将其设置为true并指定CA证书路径)
  108. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过证书主机名验证
  109. $html = curl_exec($ch);
  110. if (curl_errno($ch)) {
  111. echo 'cURL error: ' . curl_error($ch);exit;
  112. }
  113. curl_close($ch);
  114. $pattern = '/<(link|script|img)[^>]*\s+(href|src)=["\'](\/[^"\']+)["\'][^>]*>/i';
  115. $replacement = function($matches) use ($url) {
  116. // $matches[3] 是匹配到的以 / 开头的路径
  117. return str_replace($matches[3], $url . $matches[3], $matches[0]);
  118. };
  119. $html = preg_replace_callback($pattern, $replacement, $html);
  120. //把form去掉
  121. $pattern = '/<form[^>]*>(.*?)<\/form>/is';
  122. $html = preg_replace($pattern, '$1', $html);
  123. return $html;
  124. }
  125. }