|
参考的页面:
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,而不必担心恼人的路径问题了
我的一些配置:
|
|