VisualEditorController.php 3.8 KB

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