Yii结合CKEditor实现图片上传功能

2015-01-24信息快讯网

这篇文章主要介绍了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'=>'文件大小超过限制', ), ); } }

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
php实现singleton()单例模式实例
PHP动态编译出现Cannot find autoconf的解决方法
PHP实现模仿socket请求返回页面的方法
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
PHP has encountered a Stack overflow问题解决方法
完美实现wordpress禁止文章修订和自动保存的方法
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
PHP处理Oracle的CLOB实例
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
仿dedecms下拉分页样式修改的thinkphp分页类实例
Smarty中调用FCKeditor的方法
php中socket的用法详解
ThinkPHP整合百度Ueditor图文教程
PHP中使用gettext解决国际化问题的例子(i18n)
在Yii框架中使用PHP模板引擎Twig的例子
PHP中多维数组的foreach遍历示例
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Codeigniter出现错误提示Error with CACHE directory的解决方案
Codeigniter中禁止A Database Error Occurred错误提示的方法
PHP读取RSS(Feed)简单实例
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
PHP捕获Fatal error错误的方法
CI框架中集成CKEditor编辑器的教程
浅谈php扩展imagick
php定时计划任务与fsockopen持续进程实例
PhpDocumentor 2安装以及生成API文档的方法
dedecms函数分享之获取某一栏目所有子栏目
PHP中spl_autoload_register()和__autoload()区别分析
php中curl、fsocket、file_get_content三个函数的使用比较
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
php使用imagick模块实现图片缩放、裁剪、压缩示例
©2014-2024 dbsqp.com