首页 > IT.IT > 在Cakephp下使用fckeditor的三种方法

在Cakephp下使用fckeditor的三种方法

2009年5月20日  如果本文对您有帮助,请留下您宝贵的足印!==>

      Fckeditor作为现在流行的编辑器,确实比mce等确有过人之处,可以说是coder们最喜欢的所见即所得编辑器了,今天讨论的主题主要是在Cakephp下如何使用fckeditor,并不涉及fckeditor的具体配置问题,这个东东博大精深,不是一天两天能配置精通的事情。
PS:
fckeditor的最新版3.0系列貌似要改名成CKeditor了,少了个F,真是够震惊的。怎么看都是别扭的很。

一、参考文章
官方说明:
http://bakery.cakephp.org/articles/view/using-fckeditor-with-cakephp
在这个官方说明里面,不少东东都已经过时了。各位看客就将就着看吧,反正肯定是有问题。
Fckeditor 2.6.4
http://sourceforge.net/project/downloading.php?groupname=fckeditor&filename=FCKeditor_2.6.4.zip&use_mirror=nchc
本文将基于fckeditor2.6.4和Cakephp1.2.3.8166进行处理。
二、试验步骤
2.1、精简文件
将下载回来的fckeditor去除冗余的文件。*.asp,*.aspx,*.cfm,*.lasso,*.py,*.cfc,*.afp,*.txt,*.pl,还有以“_”开头的文件夹或者文件“_*.* ”等等。当然还有editor\filemanager\connectors下面那些非php的文件夹。当然还有editor\lang下面的那些语言配置文件,留下简体中文zh-cn.js和英文en.js的语言配置就ok了,还有editor\skins目录下那些你不喜欢的皮肤文件,也del掉吧。去掉这些东东之后,世界就清净了很多。哈。
2.2、配置htaccess
当然这个步骤不是必须得,要看你把文件放置到哪里,如果你按照说明上说的放到/webroot/js目录下面的话,就不需要配置htaccess,但是如果你按照文件夹的含义放到“第三方文件”app/vendors目录下面的话,就需要一个htaccess文件,具体可以参照我以前的一个文章。http://newsn.net/20090513/417.html。让fckeditor先脱离Cakephp的霸权管制。
fckeditor 

3、调用方法
3.1、直接调用方法
fckeditor2 
官方文档中的那个vendor函数已经不复存在了。取而代之的是app::import,其实说白了,就是个require_once,而且只要写对了路径,其实和普通的php里面调用起来是没有什么区别的。当然也可以把app::import放到ctp里面去,也有很多人倾向于写个对应的helper出来。这个是比较符合Cakephp的逻辑的。

3.2、helper调用方法2种
不过这个helper因为是自定义的结果,所以100个人写出来必然有100个不同的写法,那么我就随便根据我的理解,调用一下好了。本helper位置为:app/views/helpers/fck.php。fckeditor位置是vendors/fckeditor。

<?php
class FckHelper extends Helper
{
	var $toolbar="Default";
	var $basepath="";
	var $type="";
	function init($basepath="",$toolbar="Default",$type="js"){
		$this->basepath=$basepath;
		$this->toolbar=$toolbar;
		$this->type=$type;
		if ($this->type=="js"){
			return "<script language='javascript' src='".$basepath."fckeditor.js'></script>\r\n";
		}
		else{
			$root=realpath(dirname(__FILE__)."/../../../");
			require_once($root.$this->basepath."fckeditor.php");
		}
	}
	function load($name,$value=""){
		if ($this->type=="js"){
			return $this->load_by_js($name,$value);
		}
		else{
			return $this->load_by_php($name,$value);
		}
	}
	function load_by_js($name,$value){
		$name = Inflector::camelize(str_replace('.','',$name));
		return <<<FCK_CODE
			<textarea id="$name" name="$name">$value</textarea>
			<script type="text/javascript">
			fckLoader_$name = function () {
			    var bFCKeditor_$name = new FCKeditor("$name");
			    bFCKeditor_$name.BasePath = "$this->basepath";
			    bFCKeditor_$name.ToolbarSet = "$this->toolbar";
			    bFCKeditor_$name.ReplaceTextarea();
			}
			fckLoader_$name();
			</script>
FCK_CODE;
	}
	function load_by_php($name,$value){
          $oFCKeditor=new FCKeditor($name);
          $oFCKeditor->BasePath=$this->basepath;
          $oFCKeditor->ToolBar=$this->toolbar;
          $oFCKeditor->Value=$value;
          $oFCKeditor->Create();
	}
}
?>

这个是我写的,分为2种模式调用,一种是js,一种是php调用。

调用的时候,在controller里面

var $helpers=Array("Html","Javascript","fck");

在ctp视图里面,

echo $fck->init("/test/vendors/fckeditor/","","php");
echo $fck->load("test_name","test_value");

      init方法里面的三个参数分别是 fckeditor的 路径、toolbar名称(大小写敏感)、调用的方式(默认为js调用),load方法的第一个参数为编辑框的名字,第二个为对应的编辑框的内容值。 当然fckeditor里面有很多的选项,这里面只是选了比较重要的toolbar进行了配置,其他的设置等以后再说。哈。BTW: 在php类里面的变量定义的时候居然不能使用“.”做字符串连接,真是崩溃。


本文来自苏南的博客, 转载请注明网址:http://newsn.net, 谢谢!
我的淘宝小店:http://68zz.com
我的Sina圈子:http://q.blog.sina.com.cn/pctalk


作者: 苏南 分类: IT.IT 标签: , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.