這篇文章主要介紹了Yii結合CKEditor實現圖片上傳功能,Yii是大名鼎鼎的PHP開發框架,CKEditor則是大名鼎鼎的所見即所得編輯器,需要的朋友可以參考下
這幾天做的一個專案中需要在所見即所得編輯器中實現圖片上傳的功能,我因為比較喜歡CKEditor的介面而選擇了它。雖然有跟CKEditor配合良好的CKFinder,不過這個東東的功能太複雜,簡單看了下CKEdtior的文檔,發現這個功能還是可以自己實現而不用借助CKFinder的。
下面程式碼雖然是基於Yii Framework的,但是用其他框架或語言思路卻是完全一樣的,有需要的童鞋可以參考一下。
首先要讓CkEditor出現圖片上傳的功能,需要配置編輯器的filebrowserImageUploadUrl屬性:
CKEDITOR.replace( 'editor1', { filebrowserUploadUrl : '/uploader/upload.php', filebrowserImageUploadUrl : '/uploader/upload.php?type=Images' });
然後在對應的URL上實現圖片上傳的功能,並向CKEditor返回特定格式的HTML程式碼,CKEditor就能正常預覽並插入圖片了。
下面只截取控制器的部分程式碼,Controller部分我是這樣實現的:
/** * 保存上传的图片 * * @return string javascript code * @author lfyzjck **/ public function actionImg($type, $CKEditor, $CKEditorFuncNum, $langCode = 'zh-cn') { if(empty($CKEditorFuncNum) || $type != 'Images'){ $this->mkhtml($CKEditorFuncNum,'','错误的函数调用'); } if(isset($_FILES['upload'])){ //获取关于图片上传配置 $options = Options::model()->findByPk(1); $form = new UploadForm('image',$options); $form->upload = CUploadedFile::getInstanceByName('upload'); if($form->validate()){ //文件名:时间+源文件名 $target_filename = date('Ymd-hm',time()).$form->upload->getName(); $path = Yii::app()->basePath.'/../uploads/'.$target_filename; //图片保存路径 $form->upload->saveAs($path); $this->mkhtml($CKEditorFuncNum,Yii::app()->baseUrl.'/uploads/'.$target_filename, "上传成功"); } else{ $this->mkhtml($CKEditorFuncNum,'',$form->getError('upload')); } } } /** * 返回CKEditor的提示信息 * * @return void * @author lfyzjck **/ private function mkhtml($fn, $fileurl, $message) { $str = ''; exit($str); }
需要特別說明的mkhtml函數,他會呼叫CKEditor的函數產生提示訊息。上傳成功的時候將圖片連結返回,CKEditor會根據URL產生圖片預覽。
然後是UploadForm的程式碼,這裡會驗證圖片的格式和大小是否符合要求。
class UploadForm extends CFormModel { public $upload; private $options; private $type; public function __construct($type, $options){ $this->options = $options; $this->type = $type; } /** * Declares the validation rules. * The rules state that username and password are required, * and password needs to be authenticated. */ public function rules() { return array( array('upload', 'file', 'types' => $this->options->getAttribute("allow_".$this->type."_type"), 'maxSize' => 1024 * (int)$this->options->getAttribute("allow_".$this->type."_maxsize"), 'tooLarge'=>'文件大小超过限制', ), ); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
關於Yii
Framework框架取得分類下面的所有子類別的方法
#
以上是Yii和CKEditor實現圖片上傳的功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!