Yii Framework结合CKEditor在线编辑器实现图片上传功能
分类:PHP_Python| 发布:佚名| 查看:494 | 发表时间:2014/8/4
这几天做的一个项目中需要在所见即所得编辑器中实现图片上传的功能,我因为比较喜欢CKEditor的界面而选择了它。虽然有跟CKEditor配合良好的CKFinder,不过这个东东的功能太复杂,简单看了下CKEdtior的文档,发现这个功能还是可以自己实现而不用借助CKFinder的。
下面代码虽然基于Yii Framework的,但是用其他框架或者语言思路却是完全一样的,有需要的童鞋可以参考一下。
首先要让CkEditor出现图片上传的功能,需要配置编辑器的filebrowserImageUploadUrl属性:
代码如下:
1 | CKEDITOR.replace( 'editor1' , |
3 | filebrowserUploadUrl : '/uploader/upload.php' , |
然后在对应的URL上实现图片上传的功能,并向CKEditor返回特定格式的HTML代码,CKEditor就能正常预览并插入图片了。
下面只截取控制器的部分代码,Controller部分我是这样实现的:
代码如下:
07 | public function actionImg( $type , $CKEditor , $CKEditorFuncNum , $langCode = 'zh-cn' ) |
09 | if ( empty ( $CKEditorFuncNum ) || $type != 'Images' ){ |
10 | $this ->mkhtml( $CKEditorFuncNum , '' , '错误的函数调用' ); |
12 | if (isset( $_FILES [ 'upload' ])){ |
14 | $options = Options::model()->findByPk(1); |
15 | $form = new UploadForm( 'image' , $options ); |
16 | $form ->upload = CUploadedFile::getInstanceByName( 'upload' ); |
17 | if ( $form ->validate()){ |
19 | $target_filename = date ( 'Ymd-hm' ,time()). $form ->upload->getName(); |
20 | $path = Yii::app()->basePath. '/../uploads/' . $target_filename ; |
21 | $form ->upload->saveAs( $path ); |
22 | $this ->mkhtml( $CKEditorFuncNum ,Yii::app()->baseUrl. '/uploads/' . $target_filename , "上传成功" ); |
25 | $this ->mkhtml( $CKEditorFuncNum , '' , $form ->getError( 'upload' )); |
35 | private function mkhtml( $fn , $fileurl , $message ) |
需要特别说明的mkhtml函数,他会调用CKEditor的函数产生提示信息。上传成功的时候将图片链接返回,CKEditor会根据URL生成图片预览。
然后是UploadForm的代码,这里会验证图片的格式和大小是否符合要求。
代码如下:
01 | class UploadForm extends CFormModel |
06 | public function __construct( $type , $options ){ |
07 | $this ->options = $options ; |
15 | public function rules() |
18 | array ( 'upload' , 'file' , |
19 | 'types' => $this ->options->getAttribute( "allow_" . $this ->type. "_type" ), |
20 | 'maxSize' => 1024 * (int) $this ->options->getAttribute( "allow_" . $this ->type. "_maxsize" ), |
21 | 'tooLarge' => '文件大小超过限制' , |