yii结合ckeditor实现图片上传功能
来源: 阅读:1158 次 日期:2014-07-31 10:54:33
温馨提示: 小编为您整理了“yii结合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'=>'文件大小超过限制',

   ),

  );

 }

}

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map