个人博客开通将近2个月了,到目前为止,博客也就写了一篇,很大一部分原因,就是后台的编辑器的代码功能太烂了,之前用的是kindeditor在线编辑器,它的优点很多,安装方便,体积小,而且demo也很简单,像图片上传之类的功能,分分钟就能配置好,所以刚开始选择了它,我姐姐写文章的时候,用的还算可以,但是我一旦写个技术博客,贴代码的时候,一不合适就会代码跟文章内容混为一谈,字体大小也搞的乱七八糟,忍无可忍了,决定还是用回臃肿的百度编辑器吧,之所以说它臃肿,大家一定清楚,没办法,功能和体积不可兼得,可以理解。

        就这样,操蛋的一天开始了,正好是周末,结果这一天,我跟ueditor干上了,配置中的各种问题,感觉都让我遇上了,从在页面中调用、图片上传、代码高亮显示,都把我整的服服帖帖,当时,仿佛有一万只草泥马从我心中呼啸而过....

        不说了,现在把我安装的整个过程记录一下吧:

        一:下载百度编辑器,我用当时thinkphp,所以选择的是这个

        二:将整个ueditor文件夹放在你的公共文件夹下,我放在根目录下的Static文件下了。

        三:在页面中引入ueditor工作区,

<script id="myEditor" type="text/plain" name="content" style="width:100%;height:800px;">默认的文本内容</script>

引入js文件

<!--百度编辑器-->
<script src="__STATIC__/Admin/js/jquery-1.9.1.min.js"></script>
<script type="application/javascript">
   var editorUrl = '{:C('HOME_PAGE')}/{$Think.const.MODULE_NAME}'; //这里是重点,所在的模型目录
</script>
<script src="__STATIC__/ueditor/ueditor.config.js"></script>

<script src="__STATIC__/ueditor/ueditor.all.min.js"> </script>
<script src="__STATIC__/ueditor/lang/zh-cn/zh-cn.js"></script>
<script src="__STATIC__/ueditor/ueditor.parse.min.js"></script>
<script type="text/javascript">
   $(document).ready(function(){
      var $ = jQuery;

      //初始化编辑器
      uParse('.content',{
         'liiconpath':'__STATIC__/ueditor/themes/ueditor-list/'    //使用 '/' 开头的绝对路径
      })
      var ue = UE.getEditor('myEditor');

   });

</script>

配置好这些,工作区域就可以正常显示了。


        四:接下来设置图片上传,你可能看到了,上图中的错误提示,“请求后台配置项http错误,上传功能将不能正常使用!”这说明,你的上传图片的路径没配置好,下面进入ueditor.config.js文件下配置

/**
 * ueditor完整配置项
 * 可以在这里配置整个编辑器的特性
 */
/**************************提示********************************
 * 所有被注释的配置项均为UEditor默认值。
 * 修改默认配置请首先确保已经完全明确该参数的真实用途。
 * 主要有两种修改方案,一种是取消此处注释,然后修改成对应参数;另一种是在实例化编辑器时传入对应参数。
 * 当升级编辑器时,可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。
 **************************提示********************************/

(function () {

    /**
     * 编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。
     * 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。
     * "相对于网站根目录的相对路径"也就是以斜杠开头的形如"/myProject/ueditor/"这样的路径。
     * 如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,此处的URL可能不适用于每个页面的编辑器。
     * 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。
     * window.UEDITOR_HOME_URL = "/xxxx/xxxx/";
     */
    var URL = window.UEDITOR_HOME_URL || getUEBasePath();

    /**
     * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。
     */
    window.UEDITOR_CONFIG = {

        //为编辑器实例添加一个路径,这个不能被注释
        UEDITOR_HOME_URL: URL

        // 服务器统一请求接口路径
        , serverUrl: editorUrl+"/Editor/"   //这是重点,它跟页面中的editorUrl是组合使用的,Editor为上传控制器

        //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的从新定义
        , toolbars: [[
            'fullscreen', 'source', '|', 'undo', 'redo', '|',
            'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',
            'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
            'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
            'directionalityltr', 'directionalityrtl', 'indent', '|',
            'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
            'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
            'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
            'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
            'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
            'print', 'preview', 'searchreplace', 'help', 'drafts'
        ]]
        //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准
        //,labelMap:{
        //    'anchor':'', 'undo':''
        //}

这里,我把所以的上传功能都整合到了EditorController下面了,此文件我会分享到云盘中,可自行下载;

        五:下面说一下如何修改EditorController文件,主要是路径问题

private function getConfig(){
    $config = array(
        /* 上传图片配置项 */
        'imageActionName' => 'uploadimage',/* 执行上传图片的action名称 */
        "imageFieldName" => "upfile",/* 提交的图片表单名称 */
        "imageMaxSize"=> 10*1024*1024, /* 上传大小限制,10M */
        "imageAllowFiles"=> array(".png", ".jpg", ".jpeg", ".gif", ".bmp"), /* 上传图片格式显示 */
        "imageCompressEnable"=> true, /* 是否压缩图片,默认是true */
        "imageCompressBorder"=> 1600, /* 图片压缩最长边限制 */
        "imageInsertAlign"=> "none", /* 插入的图片浮动方式 */
        "imageUrlPrefix"=> '', /* 图片访问路径前缀 */
        "imagePathFormat"=> '/Upload/image/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                    /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                    /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                    /* {time} 会替换成时间戳 */
                                    /* {yyyy} 会替换成四位年份 */
                                    /* {yy} 会替换成两位年份 */
                                    /* {mm} 会替换成两位月份 */
                                    /* {dd} 会替换成两位日期 */
                                    /* {hh} 会替换成两位小时 */
                                    /* {ii} 会替换成两位分钟 */
                                    /* {ss} 会替换成两位秒 */
                                    /* 非法字符 \ : * ? " < > | */
                                    /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */

        /* 涂鸦图片上传配置项 */
        "scrawlActionName"=> "uploadscrawl", /* 执行上传涂鸦的action名称 */
        "scrawlFieldName"=> "upfile", /* 提交的图片表单名称 */
        "scrawlPathFormat"=> '/Upload/image/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */
        "scrawlMaxSize"=> 2048000, /* 上传大小限制,单位B */
        "scrawlUrlPrefix"=> '', /* 图片访问路径前缀 */
        "scrawlInsertAlign"=> "none",

        /* 截图工具上传 */
        "snapscreenActionName"=> "uploadimage", /* 执行上传截图的action名称 */
        "snapscreenPathFormat"=> '/Upload/image/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */
        "snapscreenUrlPrefix"=> '', /* 图片访问路径前缀 */
        "snapscreenInsertAlign"=> "none", /* 插入的图片浮动方式 */

        /* 抓取远程图片配置 */
        "catcherLocalDomain"=> array("127.0.0.1", "localhost", "img.baidu.com"),
        "catcherActionName"=> "catchimage", /* 执行抓取远程图片的action名称 */
        "catcherFieldName"=> "source", /* 提交的图片列表表单名称 */
        "catcherPathFormat"=> '/Upload/image/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */
        "catcherUrlPrefix"=> '', /* 图片访问路径前缀 */
        "catcherMaxSize"=> 2048000, /* 上传大小限制,单位B */
        "catcherAllowFiles"=> array(".png", ".jpg", ".jpeg", ".gif", ".bmp"), /* 抓取图片格式显示 */

        /* 上传视频配置 */
        "videoActionName"=> "uploadvideo", /* 执行上传视频的action名称 */
        "videoFieldName"=> "upfile", /* 提交的视频表单名称 */
        "videoPathFormat"=> '/Upload/video/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */
        "videoUrlPrefix"=> '', /* 视频访问路径前缀 */
        "videoMaxSize"=> 102400000, /* 上传大小限制,单位B,默认100MB */
        "videoAllowFiles"=> array(
            ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
            ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"
        ), /* 上传视频格式显示 */

        /* 上传文件配置 */
        "fileActionName"=> "uploadfile", /* controller里,执行上传视频的action名称 */
        "fileFieldName"=> "upfile", /* 提交的文件表单名称 */
        "filePathFormat"=> '/Upload/file/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */
        "fileUrlPrefix"=> '', /* 文件访问路径前缀 */
        "fileMaxSize"=> 51200000, /* 上传大小限制,单位B,默认50MB */
        "fileAllowFiles"=> array(
            ".png", ".jpg", ".jpeg", ".gif", ".bmp",
            ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
            ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
            ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
            ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
        ), /* 上传文件格式显示 */

        /* 列出指定目录下的图片 */
        "imageManagerActionName"=> "listimage", /* 执行图片管理的action名称 */
        "imageManagerListPath"=> 'Upload/image/', /* 指定要列出图片的目录 */
        "imageManagerListSize"=> 20, /* 每次列出文件数量 */
        "imageManagerUrlPrefix"=> C('EDITOR_UPLOAD_URL').'/', /* 图片访问路径前缀 */
        "imageManagerInsertAlign"=> "none", /* 插入的图片浮动方式 */
        "imageManagerAllowFiles"=> array(".png", ".jpg", ".jpeg", ".gif", ".bmp"), /* 列出的文件类型 */

        /* 列出指定目录下的文件 */
        "fileManagerActionName"=> "listfile", /* 执行文件管理的action名称 */
        "fileManagerListPath"=> C('EDITOR_UPLOAD_PATH').'/upload/file/', /* 指定要列出文件的目录 */
        "fileManagerUrlPrefix"=> C('EDITOR_UPLOAD_URL').'/', /* 文件访问路径前缀 */
        "fileManagerListSize"=> 20, /* 每次列出文件数量 */
        "fileManagerAllowFiles"=> array(
            ".png", ".jpg", ".jpeg", ".gif", ".bmp",
            ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
            ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
            ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
            ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
        ) /* 列出的文件类型 */
    );

    return json_encode($config);
}

下面的两个配置是重点,一旦路径错了,你就挂了

"imageUrlPrefix"=> '', /* 图片访问路径前缀 */
"imagePathFormat"=> '/Upload/image/{yyyy}{mm}{dd}/{time}{rand:6}', /* 上传保存路径,可以自定义保存路径和文件名格式 */

如下截图就是路径设置不对的结果,自求多福吧,希望你一切顺利

这五步,如果你都顺利配置的话,你就成功了,代码高亮显示的问题,将在下一篇中介绍...

EditorController文件下载,链接: http://pan.baidu.com/s/1kVlMsgZ 密码: mhzi