用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6413|回复: 3
收起左侧

[版本 2.x] 整理了使用ckeditor,ckfinder编辑,上传使用说明

[复制链接]
发表于 2012-9-20 17:30:22 | 显示全部楼层 |阅读模式
参考的页面:
http://codeigniter.org.cn/forums ... hread&tid=14216

http://codeigniter.org.cn/forums ... thread&tid=8735

谢谢两个帖子。
注意两点:
1,CI2.x 不支持php4,只支持php5了
2,目录的权限问题。
3,开启:$this->load->helper('url');

步骤:
1,
下载官方的ckeditor和ckfinder文件,可以把里面没用的东西删除,进行瘦身,这个网上搜下很多的,把下载好的目录放到项目中,位置自己选定。

2,
ckeditor/ckeditor_php5.php 拷贝至 library 目录重命名为 ckeditor.php
ckfinder/core/ckfinder_php5.php 拷贝至 library 目录重命名为 ckfinder.php

3,
在CI的application/config/config.php文件末尾添加ckeditor和ckfinder的配置信息,代码如下:
PHP复制代码
/*
 * ckeditor和ckfinder的配置选项
 * ckeditorPath是ckeditor目录的位置
 * ckfinderPath是ckfinder目录的位置
 * editor_config为ckeditor的标题配置文件
 */

$config['ckeditorPath'] = 'js/ckeditor/';//根据自己的路径来定义
$config['ckfinderPath'] = 'js/ckfinder/';//根据自己的路径来定义
$config['editor_config'] = array(
            'language'=> 'zh-cn',           //默认语言
            'skin'    => 'kama',            //皮肤方案kama(默认) office2003 v2 三种皮肤
            'resize_enable' => 'false'      //是否可拖动改变尺寸
);
$config['toolbar_Full'] = array(
    array('Source','-','Save','NewPage','Preview','-','Templates'),     //源码,保存,新建,预览,模版
    array('TextColor','BGColor'),
    array('Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'),
    array('Styles','Format','Font','FontSize'),
    array('Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'),
    array('Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'),
    array('Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'),
    array('Bold','Italic','Underline','Strike','-','Subscript','Superscript'),
    array('NumberedList','BulletedList','-','Outdent','Indent','Blockquote'),
    array('JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'),
    array('Link','Unlink','Anchor'),
);
复制代码


4,
在application/helpers/目录下创建ckeditor_helper.php文件,代码如下:

PHP复制代码
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

if( ! function_exists('ckeditor')){
    /*
     *  name是创建的textarea的name名字
     *  type是工具栏调用功能,如果为空的话调用全部
     *  content是编辑器默认显示的内容,默认为空
     */

    function ckeditor($name='content',$type = array(0,3,2,1),$content = ''){
        $CI =& get_instance();  
        $config = $CI->config->config;      //取得配置文件中的配置信息
        if(!empty($config['ckeditorPath'])){
            $ckeditorPath = base_url().$config['ckeditorPath'];     //ckeditor路径
        }
        if(!empty($config['ckfinderPath'])){
            $ckfinderPath = base_url().$config['ckfinderPath'];     //ckfinder路径
        }
        if(!empty($config['editor_config'])){
            $editor_config = $config['editor_config'];              //配置文件
        }else{
            $editor_config = '';
        }
        if(!empty($config['toolbar_Full'])){                        //头部功能建设置
            if(is_array($type) && count($type) > 0){
                 foreach($type as $k => $v){
                    $editor_config['toolbar_Full'][] = $config['toolbar_Full'][$v];
                 }
            }else{
                $editor_config['toolbar_Full'] = '';
                $editor_config['toolbar'] = 'Full';
            }
        }else{
            $editor_config['toolbar'] = 'Full';
        }
        $CI->load->library('ckeditor');                     //导入application/library/ckeditor.php文件
        $CI->load->library('ckfinder');                     //导入application/library/ckfinder.php文件
        $CI->ckfinder->BasePath = $ckfinderPath;            //初始化ckfinder路径
        $CI->ckeditor->returnOutput = true;                 //设置返回输出
        $CI->ckeditor->basePath = $ckeditorPath;            //初始化ckeditor路径
       
        $CI->ckfinder->SetupCKEditor($CI->ckeditor,$ckfinderPath);  //ckfinder中自带集成ckeditor函数
        $ckeditor = $CI->ckeditor->editor($name,$content,$editor_config);   //生成ckeditor编辑器,带上传文件功能
        return $ckeditor;
    }
}
?>
复制代码



5,
修改ckfinder的上传文件路径,这里他本身引用的好像是决定路径。。刚在论坛里看到有个朋友已经解决了这个问题,这里就引用他的方法。
修改ckfinder目录下的config.php文件,找到$baseUrl这行代码,将其注释掉,并更换成代码:

PHP复制代码
$right_ulr = explode('/',$_SERVER['PHP_SELF']);
$len = count($right_ulr);
for($i=0;$i<6;$i++)
    unset($right_ulr[count($right_ulr)-1]);
//var_dump($right_ulr);
$baseUrl = implode('/', $right_ulr).'/public/upload/';
复制代码


6、ckfinder上传文件后采用的是原文件名,修改方法是在网上找的,
打开/ckfinder/core /connector/php/php5/CommandHandler/FileUpload.php 找到
$sUnsafeFileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(CKFinder_Connector_Utils_Misc::mbBasename($uploadedFile['name']));

后面加上
$sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sUnsafeFileName);
$sUnsafeFileName=date('YmdHis').'.'.$sExtension;
7、上传权限问题,找到/ckfinder/config.php文件,第一个函数CheckAuthentication()是用来判断上传文件权限的,自己根据业务逻辑进行权限判断,这个函数返回true,就表示能够上传,返回false则不能上传文件。测试时可将其直接返回true。
PHP复制代码
function CheckAuthentication(){
                 return ture;
}
 
复制代码


8,controller 调用:
PHP复制代码
 
public function index() {
       
        // CKeditor载入
        $this->load->library ( 'ckeditor' );
        $this->ckeditor->basePath = base_url () . 'ckeditor/';
        $this->ckeditor->returnOutput = true;
       
        // CKFinder载入
        $this->load->library ( 'ckfinder' );
        $this->ckfinder->basePath = base_url () . 'ckfinder/';
       
        // 让CKEditor和CKFinder结合起来
        $this->ckfinder->SetupCKEditorObject ( $this->ckeditor );
       
        // 初始化编辑器
        $data ['ck'] = $this->ckeditor->editor ( 'contents' );
        // 之后在试图view中,就直接可以 echo $ck; 就可以在页面中看到编辑器了。
       
        $this->load->view ( 'welcome',$data );
    }
 
复制代码



9, view 调用:首先是头部加载JS
JS复制代码
<script charset="utf-8" src="<?php echo base_url(); ?>js/ckeditor/ckeditor.js" type="text/javascript"></script>
<script charset="utf-8" src="<?php echo base_url(); ?>js/ckfinder/ckfinder.js" type="text/javascript"></script>
复制代码

然后是页面内部使用,也有js
PHP复制代码
<textarea id="post_area" cols="85" rows="30" name="content" ></textarea>
                        <script type="text/javascript">
                            CKEDITOR.replace( 'post_area',
                            {
                                filebrowserBrowseUrl : '<?php echo base_url();?>js/ckfinder/ckfinder.html',
                                filebrowserImageBrowseUrl : '<?php echo base_url();?>js/ckfinder/ckfinder.html?type=Images',
                                filebrowserFlashBrowseUrl : '<?php echo base_url();?>js/ckfinder/ckfinder.html?type=Flash',
                                filebrowserUploadUrl :
                                    '<?php echo base_url();?>js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files¤tFolder=/archive/',
                                filebrowserImageUploadUrl :
                                    '<?php echo base_url();?>js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images¤tFolder=/cars/',
                                filebrowserFlashUploadUrl : '<?php echo base_url();?>js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
                            }
                        );
                        </script>
复制代码


PS:
关于上传图片的一点问题:
一般而言,我们的程序都是本地测试后上传到服务器,本地的上传路径是已知的,而服务器可就不一定知道了,而且即使知道,一旦程序的路径有所变动,你的CKfinder还要重新配置,所以,一般而言,我都是用以下代码替代config.php中
$baseUrl那一行。

$right_url = explode('/',$_SERVER['PHP_SELF']);
$len = count($right_url);
for($i=0;$i<6;$i++)
    unset($right_url[count($right_url)-1]);
//var_dump($right_ulr);
$baseUrl = implode('/', $right_url).'/upload/';


解释下代码
在for语句中$i<6中的6是指
ckfinder/core/connector/php中的connector.php
离网站根目录的目录数量,这个得依据你的ckfinder在网站逻辑根目录的路径决定
循环1:去除connector.php
循环 2:去除php
循环 3:去除connector
循环 4:去除core
循环 5:去除ckfinder
循环 6:去除ckfinder所属的plugins目录(这里看你自己的网站目录咯)

文件夹权限
/upload/是指放在我网站根目录的upload/文件夹下,注意权限777(win7允许完全控制)

这样,你的CI就能畅通无阻的享受ckfinder,而不必担心恼人的路径问题了
我的一些配置:

1.png

2.PNG

3.PNG






发表于 2012-9-20 19:05:11 | 显示全部楼层
LZ根据我的那个方法没调试出来吗?我的那个方法视图中不需要在进行JS导入了,在ckeditor和ckfingder两个自带的类库中已经包含有导入JS文件和调用编辑器的方法了,可以打开类库找下。。。 那两个类库里面的方法挺全面的。
发表于 2012-12-7 18:03:02 | 显示全部楼层
为什么要这么复杂啊?
我是只接在视图中调用就行了,然后把CKFinder里的东西配置一下,用CI的cookies验证权限。
其它什么都没有动,目前运行起来一切正常。
我很好奇为什么要那么复杂呢?
本人新手,还请大家多多指教
发表于 2014-8-21 22:49:36 | 显示全部楼层
为什么我下的ckeditor里面没有ckeditor_php05.php。。。

本版积分规则