Yii2 手动安装ueditor 各种疑难杂症整理 [ 技术分享 ]
1.下载 百度UEditor GitHub地址 https://github.com/BigKuCha/yii2-ueditor-widget
2.在web的同级目录新建widgets文件夹,如图
3.把ueditor放入widgets文件夹
4.修改ueditor目录下的php文件的命名空间 例如 我的目录 gjj/backend/widgets/ueditor/Uploader.php
那么我的Uploader.php的代码为 namespace backend\widgets\ueditor;
5.配置ueditor的配置文件 config.php 我保存的目录为web/images/{rand:2}/ 修改 "imagePathFormat" => "images/{rand:2}/{time}{rand:6}" 注意:绝对路径在调用插件的控制器设置 "imageManagerListPath" => "images/", 注意:这个是配置图片显示的路径,如果没配置对,就会出现点击图片,显示出错
6.配置控制器 代码如下 /** 用于ueditor插件
* (non-PHPdoc)
* @see \yii\base\Controller::actions()
* by suiyue
*/
public function actions(){
$actions = parent::actions();
$actions['upload'] = [
'class'=>'backend\widgets\ueditor\UEditorAction',
'config'=>[
'imageUrlPrefix'=>"https://".$_SERVER['SERVER_NAME']."/gjj/backend/web/images/",//图片访问路径前缀
'imagePathFormat'=>'{rand:2}/{time}{rand:6}',
'imageRoot'=>\Yii::getAlias("images")
]
];
return $actions;
}
注意:如果控制器验证了action操作允许访问 _access(){} 要加入upload
7.为了和之前的编辑器所上传的资源路径相融合,一开始配置了绝对路径但是没有加入域名,导致目录创建失败, 然后 'imageUrlPrefix'=>"https://".$_SERVER['SERVER_NAME'] , 这样就成功了
8.但是这样配置,出现的问题是,读取的时候带了域名,存储数据到数据库也带了域名,这样很不美观,但是如果把域名去掉,就会出现之前的只是用绝对路径没有加入域名导致的目录创建失败。 9.接下来,我们解决这个问题!控制器设置图片路径前缀代码不改变,保持域名 A.打开ueditor.all.js 查找到function callback(){} 找到 24527行 修改link为绝对路径 如: link = "/gjj/backend/web/images/"+ json.url;
B. 设置_src属性为空 ,否则图片的src属性值会被_src属性值覆盖 loader.setAttribute('src', link);
C.找到 9967行 UE.plugins['defaultfilter'] = function () {return ;}
这是过滤机制,直接在函数第一行return掉,不去跑下面的方法体
D.打开 ueditor.all.min.js 找到 imageUrlPrefix+f.url,"SUCCESS"==f.state&&f.url?(g=c.document.getElementById(d),g.setAttribute("src",e),g.setAttribute("_src",'e')
改为 imageUrlPrefix+f.url,"SUCCESS"==f.state&&f.url?(g=c.document.getElementById(d),g.setAttribute("src",e),g.setAttribute("_src",'')
10.最后一步,删除web/access下 ueditor的缓存文件,清空浏览器缓存,关闭浏览器,重新运行!
新增 单图上传修改了,但是多图上传还未修改。以下是多图上传修改步骤 1.打开ueditor.all.js
找到 function unhtmlData(imgCi) { 下面的11177行
可以看到 src被ci.src覆盖了 ci.src就是绝对路径,带了域名 如 http://www.baidu.com的
那么我们需要把域名去掉,所以需要重新赋值ci.src
加入代码段
if (opt.length == 1) { //这行代码的 下面加入
// 设置ci.src
var pos=nthIndexOf(ci.src,"/",2);
var str=ci.src.substr(pos);
ci.src=str;
} else {
for (var i = 0; ci = opt[i++];) {
unhtmlData(ci); //这行代码下面加入
var pos=nthIndexOf(ci.src,"/",2);
var str=ci.src.substr(pos);
//截取字符串
ci.src=str;
就这么简单,完工啦!记得清空web下的assets 目录哦,再清理服务器缓存,测试,搞定!
共 0 条回复
碎月玥
最后登录:2018-07-02
在线时长:6小时11分
- 粉丝0
- 金钱105
- 威望0
- 积分165