VisualEditorController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. //DistAppearancePublishList::publish($appearanceId, $distId);
  60. return ['status'=>1,'message'=>admin_trans('admin.update_succeeded')];
  61. }
  62. /*
  63. * 上传图片
  64. */
  65. public function upload()
  66. {
  67. $disk = $this->disk('oss');
  68. // 判断是否是删除文件请求
  69. if ($this->isDeleteRequest()) {
  70. // 删除文件并响应
  71. //return $this->deleteFileAndResponse($disk);
  72. return $this->responseDeleted();
  73. }
  74. // 获取上传的文件
  75. $file = $this->file();
  76. // 获取上传的字段名称
  77. // $column = $this->uploader()->upload_column;
  78. $column = uniqueCode("img");
  79. $dir = config("distributor.upload.gjs_directory.image").'/'.date('Ymd');
  80. $newName = $column.'.'.$file->getClientOriginalExtension();
  81. $result = $disk->putFileAs($dir, $file, $newName);
  82. $result = CommonHelper::ossUrl($result);
  83. $response = [
  84. 'data'=>[[
  85. 'src' => $result,
  86. 'type'=>'image',
  87. ]]
  88. ];
  89. return json_encode($response);
  90. }
  91. private function getURlHTML($url,$uri)
  92. {
  93. $siteUrl = $url . $uri;
  94. // 检查URL中是否已经包含?
  95. if (strpos($siteUrl, '?') !== false) {
  96. // 如果包含?则添加&mtb-preview=1
  97. $siteUrl .= "&mtb-preview=1";
  98. } else {
  99. // 如果不包含?则添加?mtb-preview=1
  100. $siteUrl .= "?mtb-preview=1";
  101. }
  102. $ch = curl_init($siteUrl);
  103. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回原生的(Raw)输出
  104. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查(在生产环境中,应将其设置为true并指定CA证书路径)
  105. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过证书主机名验证
  106. $html = curl_exec($ch);
  107. if (curl_errno($ch)) {
  108. echo 'cURL error: ' . curl_error($ch);exit;
  109. }
  110. curl_close($ch);
  111. $pattern = '/<(link|script|img)[^>]*\s+(href|src)=["\'](\/[^"\']+)["\'][^>]*>/i';
  112. $replacement = function($matches) use ($url) {
  113. // $matches[3] 是匹配到的以 / 开头的路径
  114. return str_replace($matches[3], $url . $matches[3], $matches[0]);
  115. };
  116. $html = preg_replace_callback($pattern, $replacement, $html);
  117. //把form去掉
  118. $pattern = '/<form[^>]*>(.*?)<\/form>/is';
  119. $html = preg_replace($pattern, '$1', $html);
  120. return $html;
  121. }
  122. }