帝国CMS7.5整合ueditor 1.4.3百度编辑器教程
微wx笑
2019-06-20【帝国CMS】
548
30
0关键字:
帝国cms ueditor
帝国CMS7.5的编辑器有多少人喜欢?我不知道,反正我是非常的不喜欢!首先一个最关键的问题就是不支持图片的粘贴上传,这太不方便了。然后就是UI和其它的功能方面也不是很满意,个人对编辑器这块也是有些了解的,也用过不少,但个人感觉还是UEditor好用一些,所以决定换上ueditor 1.4.3。
帝国CMS7.5的编辑器有多少人喜欢?我不知道,反正我是非常的不喜欢!首先一个最关键的问题就是不支持图片的粘贴上传,这太不方便了。然后就是UI和其它的功能方面也不是很满意,个人对编辑器这块也是有些了解的,也用过不少,但个人感觉还是UEditor好用一些,所以决定换上ueditor 1.4.3。
更换方法
主要是参考:帝国CMS7.5整合ueditor 1.4.3百度编辑器教程
1、下载ueditor 1.4.3
他是提供了一个整合过的版本提供下载,个人觉得只能做个参照,编辑器的文件还是要使用官方下载的,当然是要下载 php版本。UEditor - 下载
下载页面提到的:
UEditor 所提供的所有后端代码都仅为 DEMO 作用,切不可直接使用到生产环境中,目前已知 php 的代码会存在 ssrf 的安全漏洞。修复方式:使用最新的 Uploader https://github.com/fex-team/ueditor/blob/dev-1.5.0/php/Uploader.class.php
文件已经找不到了,应该是移动到了:https://github.com/fex-team/ueditor/blob/dev-2.0.0/php/Uploader.class.php
查看了一下 ueditor 1.4.3 版本中的 Uploader.class.php 时间是16年8月10日,应该是较新的版本,所以也没有做替换,有哪位高手可以测试一下是否还存在ssrf漏洞。
2、上传并解压到 /e/extend/ 目录下
当然你可以直接在服务哭上下载并解压;
如果你是下载到本地,再上传到服务器,那么最好是上传之后再解压,否则的话上传过程可能会非常的慢。
3、编辑配置文件
我的配置文件位置在:/e/extend/ueditor/php/config.json
主要是修改:
1 2 | "imageUrlPrefix" : "https://www.ivu4e.com" , /* 图片访问路径前缀 */ "imagePathFormat" : "/ue-upload/image/{yyyy}{mm}{dd}/{time}{rand:6}" , /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
后面还有:videoPathFormat,filePathFormat 等,用到的话可以一并修改了。
4、登录帝国CMS后台,单击“系统”-“数据表与系统模型”-“管理数据表”-在你使用的系统数据表点击“管理字段”(默认是新闻系统数据表,小编使用的是文章系统数据表,所以就修改文章系统数据表的“管理字段”)-“修改newstext字段”下面的“输入表单替换html代码(增加字段时请留空)”
复制粘贴以下代码提交即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <?php $ziduan = 'newstext' ; //编辑器使用的字段名称 if ( $enews == 'MAddInfo' || $enews == 'MEditInfo' ){ //前台投稿 $qiantai =1; $ziduanzhi = $ecmsfirstpost ==1? "" :DoReqValue( $mid , $ziduan , stripSlashes ( $r [ $ziduan ])); } else { //后台 $qiantai =0; $ziduanzhi = $ecmsfirstpost ==1? "" : stripSlashes ( $r [ $ziduan ]); } ?> <script> var classid= '<?=$classid?>' ,infoid= '<?=$id?>' ,filepass= '<?=$filepass?>' ,ehash= '<?=$ecms_hashur[ehref]?>' ,qiantai= '<?=$qiantai?>' ; //把参数传给编辑器,增加支持7.2版本的金刚模式</script> <script type= "text/javascript" charset= "utf-8" src= "<?=$public_r['newsurl']?>e/extend/ueditor/ueditor.config.js" ></script> <script type= "text/javascript" charset= "utf-8" src= "<?=$public_r['newsurl']?>e/extend/ueditor/ueditor.all.min.js" ></script> <script type= "text/javascript" charset= "utf-8" src= "<?=$public_r['newsurl']?>e/extend/ueditor/lang/zh-cn/zh-cn.js" ></script> <textarea id= "<?=$ziduan?>" name= "<?=$ziduan?>" ></textarea> <script type= "text/javascript" > <?= $ziduan ?>=UE.getEditor( '<?=$ziduan?>' ,{ serverUrl: "<?=$public_r['newsurl']?>e/extend/ueditor/php/controller.php" , //自己的请求接口 //toolbars:Default,//工具栏配置文件,具体参考ueditor.toolbarconfig.js文件中说明 pageBreakTag: '' , //帝国分页标签 initialFrameWidth: '100%' , //编辑器宽 initialFrameHeight:300 //编辑器高 //等等其它配置自行添加,参考UE默认配置文件复制修改即可 }); //自定义请求参数 <?= $ziduan ?>.ready( function (){ <?= $ziduan ?>.execCommand( 'serverparam' ,{ 'filepass' : '<?=$filepass?>' , //修改时候是信息ID 'classid' : '<?=$classid?>' , 'qiantai' :<?= $qiantai ?> }); <?= $ziduan ?>.setContent( "<?= str_replace(array(" \r\n ", " \r ", " \n "), " \\r\\n ", addslashes($ziduanzhi))?>" , false); }); </script> <table width= "100%" border= "0" cellpadding= "3" cellspacing= "1" bgcolor= "#DBEAF5" > <tr height= "25" > <td bgcolor= "#FFFFFF" > <input name= "dokey" type= "checkbox" value= "1" <?= $r [dokey]==1? ' checked' : '' ?>> 关键字替换 <input name= "copyimg" type= "checkbox" id= "copyimg" value= "1" > 远程保存图片( <input name= "mark" type= "checkbox" id= "mark" value= "1" > <a href= "SetEnews.php" target= "_blank" >加水印</a>) <input name= "copyflash" type= "checkbox" id= "copyflash" value= "1" > 远程保存FLASH(地址前缀: <input name= "qz_url" type= "text" id= "qz_url" size= "" > )</td> </tr> <tr height= "25" > <td bgcolor= "#FFFFFF" ><input name= "repimgnexturl" type= "checkbox" id= "repimgnexturl" value= "1" > 图片链接转为下一页 <input name= "autopage" type= "checkbox" id= "autopage" value= "1" >自动分页 ,每 <input name= "autosize" type= "text" id= "autosize" value= "5000" size= "5" > 个字节为一页 取第 <input name= "getfirsttitlepic" type= "text" id= "getfirsttitlepic" value= "1" size= "1" > 张上传图为标题图片( <input name= "getfirsttitlespic" type= "checkbox" id= "getfirsttitlespic" value= "1" > 缩略图: 宽 <input name= "getfirsttitlespicw" type= "text" id= "getfirsttitlespicw" size= "3" value= "<?=$public_r[spicwidth]?>" > *高 <input name= "getfirsttitlespich" type= "text" id= "getfirsttitlespich" size= "3" value= "<?=$public_r[spicheight]?>" > )</td> </tr> </table> |
做了几处修改:
a、删除
1 | e/extend/ueditor/ueditor.toolbarconfig.js " cdata_tag=" script " _ue_custom_node_=" true "> |
b、添加
1 | e/extend/ueditor/lang/zh-cn/zh-cn.js " cdata_tag=" script " _ue_custom_node_=" true"> |
c、添加
1 | <?= $ziduan ?>.setContent( "<?= str_replace(array(" \r\n ", " \r ", " \n "), " \\r\\n ", addslashes($ziduanzhi))?>" , false); |
解决修改时不能加载已有内容的问题。
5、修改 controller.php 文件
为了安全,要添加一些验证,代码是根据参考文章中的修改的,我在整合的过程中完全使用参考文章中提供的代码上传文件失败,提示没有权限或创建目录失败,所以删除了一部分代码。
修改并格式化之后的完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | <?php //header('Access-Control-Allow-Origin: http://www.baidu.com'); //设置http://www.baidu.com允许跨域访问 //header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With'); //设置允许的跨域header date_default_timezone_set( "Asia/chongqing" ); error_reporting (0); //E_ERROR header( "Content-Type: text/html; charset=utf-8" ); require ( '../../../class/connect.php' ); //引入数据库配置文件和公共函数文件 require ( '../../../class/db_sql.php' ); //引入数据库操作文件 require ( '../../../data/dbcache/class.php' ); //栏目缓存 $CONFIG = json_decode(preg_replace( "/\/\*[\s\S]+?\*\//" , "" , file_get_contents ( "config.json" )), true); //begin $link =db_connect(); //连接MYSQL $empire = new mysqlquery(); //声明数据库操作 $qiantai =(int) $_GET [ 'qiantai' ]; //是否前台 if ( $qiantai ){ $userid = (int)getcvar( 'mluserid' ); $username =RepPostVar(getcvar( 'mlusername' )); $user_fj = '[Member]' . $username ; } else { $userid =getcvar( 'loginuserid' ,1); $username =getcvar( 'loginusername' ,1); $rnd =getcvar( 'loginrnd' ,1); $adminr = $empire ->fetch1( "select userid,groupid,classid,userprikey from {$dbtbpre}enewsuser where userid='$userid' and username='" . $username . "' and rnd='" . $rnd . "' and checked=0 limit 1" ); $user_fj = $username ; } $classid = (int) $_GET [ 'classid' ]; $filepass = (int) $_GET [ 'filepass' ]; $action =RepPostVar( $_GET [ 'action' ]); //验证权限并用帝国的配置项 if ( $action != 'config' ) { //获取配置 $pr = $empire ->fetch1( "select * from {$dbtbpre}enewspublic" ); $check =check(); if ( $check ){ echo $check ; exit (); } else { //通过验证用帝国配置项及目录等 if ( $qiantai ){ //前台大小 后缀等限制 $qaddtransize = $public_r [ 'qaddtransize' ]*1024; $CONFIG [ 'imageMaxSize' ] = $qaddtransize ; $CONFIG [ 'scrawlMaxSize' ] = $qaddtransize ; $CONFIG [ 'catcherMaxSize' ] = $qaddtransize ; $qaddtranimgtype = substr ( $pr [ 'qaddtranimgtype' ],1,-1); $qaddtranimgtype = explode ( '|' , $qaddtranimgtype ); $CONFIG [ 'imageAllowFiles' ] = $qaddtranimgtype ; $CONFIG [ 'imageManagerAllowFiles' ] = $qaddtranimgtype ; $CONFIG [ 'catcherAllowFiles' ] = $qaddtranimgtype ; $qaddtranfilesize = $pr [ 'qaddtranfilesize' ]*1024; $CONFIG [ 'fileMaxSize' ] = $qaddtranfilesize ; $CONFIG [ 'videoMaxSize' ] = $qaddtranfilesize ; $qaddtranfiletype = substr ( $pr [ 'qaddtranfiletype' ],1,-1); $qaddtranfiletype = explode ( '|' , $qaddtranfiletype ); $CONFIG [ 'fileAllowFiles' ] = $qaddtranfiletype ; $CONFIG [ 'fileManagerAllowFiles' ] = $qaddtranfiletype ; } else { //后台大小 后缀等限制 $filesize = $public_r [ 'filesize' ]*1024; $CONFIG [ 'imageMaxSize' ]= $filesize ; $CONFIG [ 'scrawlMaxSize' ]= $filesize ; $CONFIG [ 'catcherMaxSize' ]= $filesize ; $CONFIG [ 'videoMaxSize' ]= $filesize ; $CONFIG [ 'fileMaxSize' ]= $filesize ; $filetype = substr ( $pr [ 'filetype' ],1,-1); $filetype = explode ( '|' , $filetype ); $CONFIG [ 'fileAllowFiles' ]= $filetype ; $CONFIG [ 'fileManagerAllowFiles' ] = $filetype ; } } } //验证函数 function check(){ global $adminr , $dbtbpre , $action , $empire , $pr , $qiantai ; if ( $qiantai ==1){ //前台的验证 if ( $pr [ 'addnews_ok' ]==1) { $error = '{"state": "网站已关闭投稿功能!"}' ; } else if (( $action == 'uploadimage' || $action == 'uploadscrawl' || $action == 'catchimage' )&&(! $pr [ 'qaddtran' ])) { $error = '{"state": "网站已关闭上传图片功能!"}' ; } else if (( $action == 'uploadvideo' || $action == 'uploadfile' )&&! $pr [ 'qaddtranfile' ]) { $error = '{"state": "网站已关闭上传附件功能!"}' ; } } else { //后台的验证 if ( $adminr ){ //通过验证 } else { $error = '{"state": "请重新登录"}' ; } } return $error ; } //end switch ( $action ) { case 'config' : $result = json_encode( $CONFIG ); break ; /* 上传图片 */ case 'uploadimage' : /* 上传涂鸦 */ case 'uploadscrawl' : /* 上传视频 */ case 'uploadvideo' : /* 上传文件 */ case 'uploadfile' : $result = include ( "action_upload.php" ); break ; /* 列出图片 */ case 'listimage' : $result = include ( "action_list.php" ); break ; /* 列出文件 */ case 'listfile' : $result = include ( "action_list.php" ); break ; /* 抓取远程文件 */ case 'catchimage' : $result = include ( "action_crawler.php" ); break ; default : $result = json_encode( array ( 'state' => '请求地址出错' )); break ; } /* 输出结果 */ if (isset( $_GET [ "callback" ])) { if (preg_match( "/^[\w_]+$/" , $_GET [ "callback" ])) { echo htmlspecialchars( $_GET [ "callback" ]) . '(' . $result . ')' ; } else { echo json_encode( array ( 'state' => 'callback参数不合法' )); } } else { echo $result ; } |
变量都是拼音,看不惯,但也懒的改了。
基本就是这样,貌似也不难。
但还是存在一个问题,上传的图片没有进入数据表,取第N张上传图为标题图片的功能失效了。
相关:
另外 UEditor 官网上的插件页面有一个项目:UEditor深度整合帝国ECMS,UEditor提供非常完善的后端通信API接口,使得UE编辑器整合CMS项目相当简单方便。所有图片、附件、视频等文件存放目录与后台数据记录,都延续使用ECMS的存放方式。本项目将持续已插件形式更新最新的UEditor和ECMS。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/EmpireCMS/2019-06-20/6.html