本文基于ThinkPHP+WangEditor实现了富文本+上传图片+上传视频,前端框架采用的是layuimini-2,步骤非常详细,当然也非常简单,例如没有处理上传失败具体情况的返回等。文末提供了WangEditor的压缩包,下面是最终实现效果
下面是具体步骤:
1、编辑器的html:
<div class="layui-form-item"> <label class="layui-form-label">新闻内容</label> <div class="layui-input-block" style="border: 1px solid #ccc;"> <div id="editor-toolbar" style="border-bottom: 1px solid #ccc;"></div> <div id="editor-text-area" style="height: 500px"></div> </div> </div>
2、引入编辑器(引入layui等框架在这里不写了)
<link href="/static/admin/wangeditor/style.css" rel="stylesheet"> <script src="/static/admin/wangeditor/index.js"></script>
3、js初始化配置WangEditor,并回显后端读取的富文本内容
const E = window.wangEditor /*编辑器配置,开始*/ // 切换语言 window.editor = E.createEditor({ selector: '#editor-text-area', // 回显数据库查询到的富文本,这里要转换下,否则会把标签也显示到编辑器中,如果是新增,这里留空 html: `{$data.content|html_entity_decode|raw}`, mode: 'simple', config: { placeholder: '请输入新闻内容', MENU_CONF: { // 上传图片配置,这里的server为后端上传地址,fieldName为后端接收的文件参数 uploadImage: { server: '/admin/news/uploadImg', fieldName: 'file', // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 [] allowedFileTypes: ['image/*'], maxFileSize: 10 * 1024 * 1024, // 单个文件的最大体积限制,默认为 2M base64LimitSize: 1 * 1024 * 1024 // 1M 以下插入 base64 }, // 上传视频配置,这里的server为后端上传地址,fieldName为后端接收的文件参数 uploadVideo: { server: '/admin/news/uploadVideo', fieldName: 'file', // 选择文件时的类型限制,默认为 ['video/*'] 。如不想限制,则设置为 [] allowedFileTypes: ['video/*'], maxFileSize: 100 * 1024 * 1024 // 单个文件的最大体积限制,默认为 2M }, } } }) E.createToolbar({ editor, selector: '#editor-toolbar', config: { excludeKeys: ["codeBlock"] } }) /*编辑器配置,结束*/
4、在保存时,利用editor.getHtml()获取编辑器的内容
layui.use(['form'], function () { var form = layui.form, layer = layui.layer, $ = layui.$; //监听提交 form.on('submit(saveBtn)', function (data) { // 保存时,获取编辑器填写的内容 data.field.content = editor.getHtml() $.ajax({ type: 'PUT', url: '/admin/news/'+{$news.id}, data:data.field, success:(res) => { var indexWindow = window.top.document.querySelector('[src="admin/news"]') indexWindow.setAttribute('src','admin/news'); // 关闭当前窗口 var iframeIndex = parent.layer.getFrameIndex(window.name); parent.layer.close(iframeIndex); } }) return false; }); });
5、php代码,注意上传后返回的数据格式必须按照下面的来,否则WangEditor无法解析结果,就无法将图片、视频插入到编辑器内
public function uploadImg(Request $request) { // file('file') 为富文本的文件对应的字段名 $file = $request -> file('file'); $path = \think\facade\Filesystem::putFile('news', $file, 'md5'); $path = str_replace('\\','/',$path); if($path) { return json(['errno' => 0, 'data' => ['url' => '/storage/'.$path, 'alt' => '茉酸奶', 'href' => '/storage/'.$path,]]); } else { return json(['errno' => 1, 'message' => '上传失败!']); } } public function uploadVideo(Request $request) { // file('file') 为富文本的文件对应的字段名 $file = $request -> file('file'); $path = \think\facade\Filesystem::putFile('news', $file, 'md5'); $path = str_replace('\\','/',$path); if($path) { // poster为视频封面图,这里就不写了,可以前端实现也可以php实现 return json(['errno' => 0, 'data' => ['url' => '/storage/'.$path, 'poster' => '',]]); } else { return json(['errno' => 1, 'message' => '上传失败!']); } }
最后,附上WangEditor下载地址:https://pan.baidu.com/s/1bvVAJ3V_QFDc0w3V1BbDKQ 提取码: r8p3