WangEditor+thinkphp5【真实可用+原创】

时间:2022-08-09 05:40:54

今天公司要编辑文章,一开始准备用ueditor,但是到了linux环境下一直不行,所以最终放弃。改用另外一个编辑器WangEditor。更加轻量级。

遇到最大的问题是 一个是图片上传,一个是div中的选择器editor没有value和name,那么post过去的值就不会有这个属性。

解决问题和过程如下:

WangEditor+thinkphp5【真实可用+原创】

1.先把wangeditor放在public/static/js下面

2.然后再进入到编辑页面。

WangEditor+thinkphp5【真实可用+原创】

edit.html

{include file='public/head'}
<body>
<style media="screen" type="text/css">
header {
color: black;
}
</style>
<div class="x-body">
<form action="edit" class="layui-form" id="mainForm" method="post" style="margin-right: 20px;" enctype="multipart/form-data">
<input type="hidden" name='id' value="{$data.id}">
<div class="layui-form-item">
<label class="layui-form-label">文章标题</label>
<div class="layui-input-block">
<input type="text" name="title" required lay-verify="required" placeholder="请输入标题" value="{$data['title']}" autocomplete="off" class="layui-input">
</div>
</div> <div class="layui-form-item">
<label class="layui-form-label">文章分类</label>
<div class="layui-input-block layui-btn-xs">
{foreach $category as $key=>$vo}
<input type="radio" name="cid" value="{$vo.id}" title="{$vo.name}" {if $data['cid'] eq $vo.id} checked{/if}>
{/foreach}
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">文章内容</label>
<div class="layui-input-block">
<script src="__static__/js/wangEditor/wangEditor.min.js" type="text/javascript"></script>
<div id="editor">
{$data.content}
</div>
<textarea id="editor_content" name="content_x" style="display:none;"></textarea>
<script type="text/javascript">
var E = window.wangEditor
var editor = new E('#editor');
var editor_content = $('#editor_content');
// 或者 var editor = new E( document.getElementById('editor') )
editor.customConfig.uploadFileName = 'uploadfile';
editor.customConfig.uploadImgServer = '/index.php/admin/wangeditor/upload'; // 上传图片到服务器
editor.customConfig.onchange = function (html) {
// 监控变化,同步更新到 textarea
editor_content.val(html);
};
editor.create(); </script>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button style="margin-left: 20%" class="layui-btn" lay-submit="" lay-filter="toSubmit">提交</button>
<button id="reset" type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div> </form>
</div>
</body>
<script type="text/javascript">
// $("#status").val(0);
var form = layui.form;
var layer = layui.layer;
//自定义验证规则
form.verify({
password: function(value){
if(value.length < 3){
return '标题至少得2个字符啊';
}
}
});
//监听提交
form.on('submit(demo1)', function(data){
layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
})
return false;
});
$(document).ready(function(){
//var editorHtml = $('#editor').val(); var options = {
type:'post', //post提交
// url:'http://ask.tongzhuo100.com/server/****.php?='+Math.random(), //url
dataType:"json", //json格式
data:{}, //如果需要提交附加参数,视情况添加
clearForm: false, //成功提交后,清除所有表单元素的值
resetForm: false, //成功提交后,重置所有表单元素的值
cache:false,
async:false, //同步返回
success:function(data){
console.log(data);
if(data.code==0){
layer.msg(data.msg);
}else{
layer.msg(data.msg,{icon:1,time:500},function(){
$("#reset").click();
x_admin_close();
parent.location.reload();
});
}
//服务器端返回处理逻辑
},
error:function(XmlHttpRequest,textStatus,errorThrown){
layer.msg('操作失败:服务器处理失败');
}
}; // bind form using 'ajaxForm'
$('#mainForm').ajaxForm(options).submit(function(data){
location.href="/index.php/admin/article/getArticleList";
});
});
</script>
{include file='public/foot'}

核心代码区块:

            <div class="layui-form-item">
<label class="layui-form-label">文章内容</label>
<div class="layui-input-block">
<script src="__static__/js/wangEditor/wangEditor.min.js" type="text/javascript"></script>
<div id="editor">
{$data.content}
</div>
<textarea id="editor_content" name="content_x" style="display:none;"></textarea>
<script type="text/javascript">
var E = window.wangEditor
var editor = new E('#editor');
var editor_content = $('#editor_content');
// 或者 var editor = new E( document.getElementById('editor') )
editor.customConfig.uploadFileName = 'uploadfile';
editor.customConfig.uploadImgServer = '/index.php/admin/wangeditor/upload'; // 上传图片到服务器
editor.customConfig.onchange = function (html) {
// 监控变化,同步更新到 textarea
editor_content.val(html);
};
editor.create();
</script>
</div>
</div>

然后请求的控制:

一个是图片的上传:Wangeditor

<?php
namespace app\admin\controller; use think\Controller; /**
* wangEditor
*/
class Wangeditor extends Controller
{
public function upload()
{
$file = request()->file('uploadfile'); // 移动到框架应用根目录/public/uploads/ 目录下
$data = [];
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
$imgp = str_replace('\\','/',$info->getSaveName()); $data = [
'errno' => 0,
'data' => !empty($info) ? ['/public/uploads/'.$imgp] : []
]; } else {
$data = [
'errno' => $file->getError(),
'data' => []
]; }
} return json_encode($data);
}
}

一个是文章的编辑 Article.php

<?php
namespace app\admin\controller; use think\Controller;
use think\Db; /**
* 文章管理
*/
class Article extends Controller
{
// 文章列表
public function getArticleList()
{
$article = Db::name('article')
->alias('a')
->join('category c','c.id=a.cid')
->field('a.id as aid, a.*,c.*')
->order('a.id asc')
->paginate('15'); $page = $article->render();
$total = $article->total(); $this->assign('article', $article);
$this->assign('page', $page);
$this->assign('count', $total); return $this->fetch('article_list');
} // 編輯文章
public function editArticle()
{
$id = (int)$this->request->get('id');
$data = Db::name('article')->where('id', $id)->find(); $category = Db::name('category')->select();
return $this->fetch('edit', ['data' => $data, 'category' => $category]);
} // 保存编辑之后的文章数据
public function edit()
{
$post = $this->request->post();
$post['content'] = $post['content_x'];
unset($post['content_x']); $id = (int)$post['id'];
unset($post['id']); Db::name('article')->where('id', $id)->update($post);
$this->success('保存成功');
}
}

这样就完美的实现了。