1、把百度編輯器放到項目的Public目錄下 命名爲:UEditor
2、在ThinkPHP/Library/Think/Template/Taglib 目錄下編輯 Html.class.php 加上下面的代碼:
public function _editor($tag,$content) { $id = !empty($tag['id'])?$tag['id']: '_editor'; $name = $tag['name']; $style = !empty($tag['style'])?$tag['style']:''; $width = !empty($tag['width'])?$tag['width']: '100%'; $height = !empty($tag['height'])?$tag['height'] :'320px'; // $content = $tag['content']; $type = $tag['type'] ; switch(strtoupper($type)) { case 'FCKEDITOR': $parseStr = '<!-- 編輯器調用開始 --><script type="text/javascript" src="__ROOT__/Public/Js/FCKeditor/fckeditor.js"></script><textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea><script type="text/javascript"> var oFCKeditor = new FCKeditor( "'.$id.'","'.$width.'","'.$height.'" ) ; oFCKeditor.BasePath = "__ROOT__/Public/Js/FCKeditor/" ; oFCKeditor.ReplaceTextarea() ;function resetEditor(){setContents("'.$id.'",document.getElementById("'.$id.'").value)}; function saveEditor(){document.getElementById("'.$id.'").value = getContents("'.$id.'");} function InsertHTML(html){ var oEditor = FCKeditorAPI.GetInstance("'.$id.'") ;if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG ){oEditor.InsertHtml(html) ;}else alert( "FCK必須處於WYSIWYG模式!" ) ;}</script> <!-- 編輯器調用結束 -->'; break; case 'FCKMINI': $parseStr = '<!-- 編輯器調用開始 --><script type="text/javascript" src="__ROOT__/Public/Js/FCKMini/fckeditor.js"></script><textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea><script type="text/javascript"> var oFCKeditor = new FCKeditor( "'.$id.'","'.$width.'","'.$height.'" ) ; oFCKeditor.BasePath = "__ROOT__/Public/Js/FCKMini/" ; oFCKeditor.ReplaceTextarea() ;function resetEditor(){setContents("'.$id.'",document.getElementById("'.$id.'").value)}; function saveEditor(){document.getElementById("'.$id.'").value = getContents("'.$id.'");} function InsertHTML(html){ var oEditor = FCKeditorAPI.GetInstance("'.$id.'") ;if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG ){oEditor.InsertHtml(html) ;}else alert( "FCK必須處於WYSIWYG模式!" ) ;}</script> <!-- 編輯器調用結束 -->'; break; case 'EWEBEDITOR': $parseStr = "<!-- 編輯器調用開始 --><script type='text/javascript' src='__ROOT__/Public/Js/eWebEditor/js/edit.js'></script><input type='hidden' id='{$id}' name='{$name}' value='{$conent}'><iframe src='__ROOT__/Public/Js/eWebEditor/ewebeditor.htm?id={$name}' frameborder=0 scrolling=no width='{$width}' height='{$height}'></iframe><script type='text/javascript'>function saveEditor(){document.getElementById('{$id}').value = getHTML();} </script><!-- 編輯器調用結束 -->"; break; case 'NETEASE': $parseStr = '<!-- 編輯器調用開始 --><textarea id="'.$id.'" name="'.$name.'" style="display:none">'.$content.'</textarea><iframe ID="Editor" name="Editor" src="__ROOT__/Public/Js/HtmlEditor/index.html?ID='.$name.'" frameBorder="0" marginHeight="0" marginWidth="0" scrolling="No" style="height:'.$height.';width:'.$width.'"></iframe><!-- 編輯器調用結束 -->'; break; case 'UBB': $parseStr = '<script type="text/javascript" src="__ROOT__/Public/Js/UbbEditor.js"></script><div style="padding:1px;width:'.$width.';border:1px solid silver;float:left;"><script LANGUAGE="JavaScript"> showTool(); </script></div><div><TEXTAREA id="UBBEditor" name="'.$name.'" style="clear:both;float:none;width:'.$width.';height:'.$height.'" >'.$content.'</TEXTAREA></div><div style="padding:1px;width:'.$width.';border:1px solid silver;float:left;"><script LANGUAGE="JavaScript">showEmot(); </script></div>'; break; case 'KINDEDITOR': $parseStr = '<script type="text/javascript" src="__ROOT__/Public/Js/KindEditor/kindeditor.js"></script><script type="text/javascript"> KE.show({ id : \''.$id.'\' ,urlType : "absolute"});</script><textarea id="'.$id.'" style="'.$style.'" name="'.$name.'" >'.$content.'</textarea>'; break; case 'UEDITOR': $parseStr = "\n".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.config.js"></script>'."\n".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.all.js"></script>'."\n".'<script type="text/plain" id="'.$id.'" name="'.$name.'" style="'.$style.'">'.$content.'</script>'."\n".'<script type="text/javascript">var ue_'.$id.' = UE.getEditor("'.$id.'");</script>'."\n"; break; case 'UEDITORMULTI': $parseStr = "\n".'<script type="text/plain" id="'.$id.'" name="'.$name.'" style="'.$style.'">'.$content.'</script>'."\n".'<script type="text/javascript">var editor_'.$id.' = new baidu.editor.ui.Editor();editor_'.$id.'.render("'.$id.'");</script>'."\n"; break; case 'MINI': $parseStr = "\n".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.config.js"></script>'."\n".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.all.js"></script>'."\n".'<link rel="stylesheet" type="text/css" href="__ROOT__/Public/UEditor/themes/default/css/ueditor.css"/>'."\n".'<textarea id="'.$id.'" name="'.$name.'" style="'.$style.'">'.$content.'</textarea>'."\n".'<script type="text/javascript">var editorOption = {minFrameHeight:175,toolbars:[[\'Undo\', \'Redo\',\'|\', \'bold\', \'italic\', \'underline\',\'forecolor\',\'backcolor\',\'fontfamily\',\'fontsize\' ]],autoClearinitialContent:true,wordCount:false, elementPathEnabled:false};var editor_'.$id.' = new baidu.editor.ui.Editor(editorOption);editor_'.$id.'.render("'.$id.'");</script>'."\n"; break; case 'MINIMULTI': $parseStr = "\n".'<link rel="stylesheet" type="text/css" href="__ROOT__/Public/UEditor/themes/default/css/ueditor.css"/>'."\n".'<textarea id="'.$id.'" name="'.$name.'" style="'.$style.'">'.$content.'</textarea>'."\n".'<script type="text/javascript">var editorOption = {minFrameHeight:200,toolbars:[[\'Undo\', \'Redo\',\'|\', \'bold\', \'italic\', \'underline\',\'forecolor\',\'backcolor\',\'fontfamily\',\'fontsize\' ]],autoClearinitialContent:false,wordCount:false, elementPathEnabled:false};var editor_'.$id.' = new baidu.editor.ui.Editor(editorOption);editor_'.$id.'.render("'.$id.'");</script>'."\n"; break; default : $parseStr = '<textarea id="'.$id.'" style="'.$style.'" name="'.$name.'" >'.$content.'</textarea>'; } return $parseStr; }
3、在需要用到編輯器的模板head內加上:
<taglib name="html" />
4、在用到編輯器的地方加上:
<html:editor id="info" name="info" type="UEDITOR" style="width:660px;height:240px;">{$info.info}</html:editor>
在百度編輯器目錄的ueditor.config.js文件內修改:
// 服務器統一請求接口路徑 , serverUrl: URL + "../../index.php/Home/Index/ueditup"
5、就是你需要的用TP自帶上傳類處理上傳了,在Home模塊的Index控制器里加上下面的方法:
public function ueditup(){ header("Content-Type: text/html; charset=utf-8"); $editconfig = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true); //dump($editconfig); $action = I('get.action'); //echo $action; switch ($action) { case 'config': $result = json_encode($editconfig); break; /* 上傳圖片 */ case 'uploadimage': $result = $this->editup('img'); break; /* 上傳塗鴉 */ case 'uploadscrawl': $result = $this->editup('img'); break; case 'uploadvideo': $result = $this->editup('video'); break; case 'uploadfile': $result = $this->editup('file'); //$result = include("action_upload.php"); break; /* 列出圖片 */ case 'listimage': $result = $this->editlist('listimg'); break; /* 列出文件 */ case 'listfile': $result = $this->editlist('listfile'); 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; } } public function editup($uptype){ if($this->islogin==false){ $_re_data['state'] = '請登陸'; return json_encode($_re_data); } $editconfig = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true); switch ($uptype) { case 'img': $upload = new \Think\Upload();// 實例化上傳類 $upload->rootPath = '.'; $upload->maxSize = $editconfig['imageMaxSize']; $upload->exts = explode('.', trim(join('',$editconfig['imageAllowFiles']),'.')); $upload->savePath = $editconfig['imagePathFormat']; $upload->saveName = time().rand(100000,999999); $info = $upload->uploadOne($_FILES[$editconfig['imageFieldName']]); break; case 'file': $upload = new \Think\Upload();// 實例化上傳類 $upload->rootPath = '.'; $upload->maxSize = $editconfig['fileMaxSize']; $upload->exts = explode('.', trim(join('',$editconfig['fileAllowFiles']),'.')); $upload->savePath = $editconfig['filePathFormat']; $upload->saveName = time().rand(100000,999999); $info = $upload->uploadOne($_FILES[$editconfig['fileFieldName']]); break; case 'video': $upload = new \Think\Upload();// 實例化上傳類 $upload->rootPath = '.'; $upload->maxSize = $editconfig['videoMaxSize']; $upload->exts = explode('.', trim(join('',$editconfig['videoAllowFiles']),'.')); $upload->savePath = $editconfig['videoPathFormat']; $upload->saveName = time().rand(100000,999999); $info = $upload->uploadOne($_FILES[$editconfig['videoFieldName']]); break; default: return false; break; } if(!$info) {// 上傳錯誤提示錯誤信息 $_re_data['state'] = $upload->getError(); $_re_data['url'] = ''; $_re_data['title'] = ''; $_re_data['original'] = ''; $_re_data['type'] = ''; $_re_data['size'] = ''; }else{// 上傳成功 獲取上傳文件信息 $_re_data['state'] = 'SUCCESS'; $_re_data['url'] = $info['savepath'].$info['savename']; $_re_data['title'] = $info['savename']; $_re_data['original'] = $info['name']; $_re_data['type'] = '.'.$info['ext']; $_re_data['size'] = $info['size']; } return json_encode($_re_data); } public function editlist($listtype){ $editconfig = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true); switch ($listtype) { case 'listimg': $allowFiles = $editconfig['imageManagerAllowFiles']; $listSize = $editconfig['imageManagerListSize']; $path = $editconfig['imageManagerListPath']; break; case 'listfile': $allowFiles = $editconfig['fileManagerAllowFiles']; $listSize = $editconfig['fileManagerListSize']; $path = $editconfig['fileManagerListPath']; break; default: return false; break; } /* 獲取參數 */ $size = isset($_GET['size']) ? htmlspecialchars($_GET['size']) : $listSize; $start = isset($_GET['start']) ? htmlspecialchars($_GET['start']) : 0; $end = $start + $size; /* 獲取文件列表 */ $path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "":"/") . $path; $files = $this->getfiles($path, $allowFiles); if (!count($files)) { return json_encode(array( "state" => "no match file", "list" => array(), "start" => $start, "total" => count($files) )); } /* 獲取指定範圍的列表 */ $len = count($files); for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--){ $list[] = $files[$i]; } //倒序 //for ($i = $end, $list = array(); $i < $len && $i < $end; $i++){ // $list[] = $files[$i]; //} /* 返回數據 */ $result = json_encode(array( "state" => "SUCCESS", "list" => $list, "start" => $start, "total" => count($files) )); return $result; } /** * 遍歷獲取目錄下的指定類型的文件 * @param $path * @param array $files * @return array */ public function getfiles($path, $allowFiles, &$files = array()) { if (!is_dir($path)) return null; if(substr($path, strlen($path) - 1) != '/') $path .= '/'; $handle = opendir($path); while (false !== ($file = readdir($handle))) { if ($file != '.' && $file != '..') { $path2 = $path . $file; if (is_dir($path2)) { $this->getfiles($path2, $allowFiles, $files); } else { if(in_array('.'.pathinfo($file, PATHINFO_EXTENSION), $allowFiles)){ $files[] = array( 'url'=> substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])), 'mtime'=> filemtime($path2) ); } } } } return $files; }
記得把 ueditconfig.json這個文件放到配置文件目錄下也就是Home/Conf/這個目錄下
這個文件的內容如下:
/* 前後端通信相關的配置,註釋只允許使用多行方式 */ { /* 上傳圖片配置項 */ "imageActionName": "uploadimage", /* 執行上傳圖片的action名稱 */ "imageFieldName": "upfile", /* 提交的圖片表單名稱 */ "imageMaxSize": 2048000, /* 上傳大小限制,單位B */ "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上傳圖片格式顯示 */ "imageCompressEnable": true, /* 是否壓縮圖片,默認是true */ "imageCompressBorder": 1600, /* 圖片壓縮最長邊限制 */ "imageInsertAlign": "none", /* 插入的圖片浮動方式 */ "imageUrlPrefix": "", /* 圖片訪問路徑前綴 */ /* "imagePathFormat": "/Uploads/editor/image/{time}{rand:6}", */ "imagePathFormat": "/Uploads/editor/image/", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ /* 塗鴉圖片上傳配置項 */ "scrawlActionName": "uploadscrawl", /* 執行上傳塗鴉的action名稱 */ "scrawlFieldName": "upfile", /* 提交的圖片表單名稱 */ "scrawlPathFormat": "/Uploads/editor/image/", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "scrawlMaxSize": 2048000, /* 上傳大小限制,單位B */ "scrawlUrlPrefix": "", /* 圖片訪問路徑前綴 */ "scrawlInsertAlign": "none", /* 截圖工具上傳 */ "snapscreenActionName": "uploadimage", /* 執行上傳截圖的action名稱 */ "snapscreenPathFormat": "/Uploads/editor/image/", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "snapscreenUrlPrefix": "", /* 圖片訪問路徑前綴 */ "snapscreenInsertAlign": "none", /* 插入的圖片浮動方式 */ /* 抓取遠程圖片配置 */ "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], "catcherActionName": "catchimage", /* 執行抓取遠程圖片的action名稱 */ "catcherFieldName": "source", /* 提交的圖片列表表單名稱 */ "catcherPathFormat": "/Uploads/editor/image/", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "catcherUrlPrefix": "", /* 圖片訪問路徑前綴 */ "catcherMaxSize": 2048000, /* 上傳大小限制,單位B */ "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取圖片格式顯示 */ /* 上傳視頻配置 */ "videoActionName": "uploadvideo", /* 執行上傳視頻的action名稱 */ "videoFieldName": "upfile", /* 提交的視頻表單名稱 */ "videoPathFormat": "/Uploads/editor/video/", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "videoUrlPrefix": "", /* 視頻訪問路徑前綴 */ "videoMaxSize": 102400000, /* 上傳大小限制,單位B,默認100MB */ "videoAllowFiles": [ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上傳視頻格式顯示 */ /* 上傳文件配置 */ "fileActionName": "uploadfile", /* controller裏,執行上傳視頻的action名稱 */ "fileFieldName": "upfile", /* 提交的文件表單名稱 */ "filePathFormat": "/Uploads/editor/file/", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */ "fileUrlPrefix": "", /* 文件訪問路徑前綴 */ "fileMaxSize": 51200000, /* 上傳大小限制,單位B,默認50MB */ "fileAllowFiles": [ ".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": "/Uploads/editor/image/", /* 指定要列出圖片的目錄 */ "imageManagerListSize": 1000, /* 每次列出文件數量 */ "imageManagerUrlPrefix": "", /* 圖片訪問路徑前綴 */ "imageManagerInsertAlign": "none", /* 插入的圖片浮動方式 */ "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件類型 */ /* 列出指定目錄下的文件 */ "fileManagerActionName": "listfile", /* 執行文件管理的action名稱 */ "fileManagerListPath": "/Uploads/editor/file/", /* 指定要列出文件的目錄 */ "fileManagerUrlPrefix": "", /* 文件訪問路徑前綴 */ "fileManagerListSize": 1000, /* 每次列出文件數量 */ "fileManagerAllowFiles": [ ".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" ] /* 列出的文件類型 */ }