前言
Summernote富文本编辑器功能强大,可以直接从word直接复制内容过来而不破坏原有的文档格式,非常适合做商品详情等内容的编辑工具。本文将展示如何在php高性能框架webman中使用summernote编辑器。
下载
去Bootstrap 中文网、Summernote、jQuery官网下载bootstrap、summernote和jquery所需要的css、js和font文件
css文件复制到plugin/admin/public/admin/css
目录
js文件复制到plugin/admin/public/admin/js
目录
font文件将summernote解压得到的整个font目录并复制到plugin/admin/public/admin/css
目录下
使用
-
引入css
<link rel="stylesheet" href="/app/admin/admin/css/summernote.min.css" /> <link rel="stylesheet" href="/app/admin/admin/css/bootstrap.min.css" />
-
引入js
<script src="/app/admin/admin/js/jquery-3.7.1.min.js"></script> <script src="/app/admin/admin/js/bootstrap.min.js"></script> <script src="/app/admin/admin/js/summernote.min.js"></script>
-
设置字段
例如商品详情字段,需要设置一个有id和一个name属性的
div
<div class="layui-form-item"><label class="layui-form-label required">商品详情</label><div class="layui-input-block"><div id="summernote" name="desciption"></div></div> </div>
-
初始化编辑器,复制下面的js到
script
中需要修改ajax上传的url地址和插入到summernote的div的id属性名,例如我的id是summernote
//调用富文本编辑 $(document).ready(function () {$('#summernote').summernote({height: 500,width:800,minHeight: 300,maxwidth: 800,minwidth: 800,maxHeight: 500,focus: false,callbacks: {onImageUpload: function (files, editor) {var $files = $(files);// 通过each方法遍历每一个file$files.each(function () {var file = this;// FormData,新的form表单封装,具体可百度,但其实用法很简单,如下var data = new FormData();// 将文件加入到file中,后端可获得到参数名为“file”data.append("file", file);// ajax上传$.ajax({data: data,type: "POST",url: "/app/admin/upload/image",// div上的actioncache: false,contentType: false,processData: false,// 成功时调用方法,后端返回json数据success: function (response) {console.log(response)if (response.msg != "上传成功") {alert("上传失败:" + response.msg)} else {// 插入到summernote$('#summernote').summernote('insertImage', response.data.url);}},});})}}}); });
-
给富文本编辑器赋值,修改默认的
给表单初始化数据
逻辑,例如我这里添加一个商品详情desciption
字段的判断,并将字段值赋值给编辑器// 给表单初始化数据 layui.each(res.data[0], function (key, value) {let obj = $('*[name="'+key+'"]');if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;if (obj[0].nodeName.toLowerCase() === "textarea") {obj.val(layui.util.escape(value));} else {obj.attr("value", value);}//富文本-商品详情赋值,div上必须加上name属性,value为你的字段名if (key == 'desciption'){$('#summernote').summernote('code', value);} });
-
获取富文本内容并提交,我这里是修改提交事件逻辑,将富文本编辑器内容并赋值给商品详情字段
data.field.desciption
//提交事件 layui.use(["form", "popup"], function () {layui.form.on("submit(save)", function (data) {data.field[PRIMARY_KEY] = layui.url().search[PRIMARY_KEY];//富文本-商品详情获取数据data.field.desciption = $('#summernote').summernote('code');layui.$.ajax({url: UPDATE_API,type: "POST",dateType: "json",data: data.field,success: function (res) {if (res.code) {return layui.popup.failure(res.msg);}return layui.popup.success("操作成功", function () {parent.refreshTable();parent.layer.close(parent.layer.getFrameIndex(window.name));});}});return false;}); });
-
其他
使用
bootstrap.css
或干扰layui-form-label
样式(如图),可以在当前页面标签添加内联样式修复<style>label.layui-form-label{width: 100px;} </style>