ThinkPHP集成FCKeditor
首先我要先BS一下我自己。有两个原因。
- 第一个就是学了ThinkPHP这么久,对于ThinkPHP一些内置的路径还是很不熟,对于__WEBROOT__或者__PUBLIC__这种路径还是很不了解!
- 第二个,就是我弄了半天,才将FCKeditor给集成到ThinkPHP中,问题是,原先就可以很简单集成进去的,被我无限复杂化了~
Flex, Java, PHP学习, ThinkPHP学习
首先我要先BS一下我自己。有两个原因。
Flex, Java, PHP学习, ThinkPHP学习
迷惘不是最终目的,目的是要提高~
于是,把ThinkPHP的源代码看了一遍。说是看了一遍,其实远远不是,大概的看了一遍,把它的文件结构已经一些实现方法看了一遍。
说句实话,真的是获益匪浅啊!!!
至少,与我而言,是肯定不可能写出那样子的代码出来的!为什么?条理真的很强。一个ThinkPHP1.0.3的核心包总共的文件只有76个文件,其中真正使用到的还没有这么多!大小也不过1M多一点点(PS:其中有不少是注释的内容)!从ThinkPHP.php文件来分析看一下的话,其实真正实现了MVC的方法关键也不过是一下几个文件,App.class.php(整个ThinkPHP运行的过程)、Model.class.php(最大的一个文件,3000多行,完美实现了Model的定义以及常用方法)、Action.class.php(实现了Action的定义已经对于Model的使用方法),View.class.php(模板操作,实现接口功能,比如Smarty的接口),Dispatch.class.php(实现了路径的解析),Route.class.php(路由功能的实现),functions.php(将上述文件中需要的功能全部封装),defines.php(常量定义),convertion.php(RoR中很重要的惯例的概念)。至于其他的Db类、Filter类什么的在整个运作中实现了数据库连接、过滤器调用(其实,这个我觉得过滤器的名称还是怪异的,我看了半天,觉得其实作用就是针对一种操作的不同种类的选择,比如Cache中的MemCache、DBCache、FileCache几种类型,Cookie中是用File还是DB等等的选择,所以觉得是不是改名选择器好一点?个人看法),起到了辅助的作用。还有一些ThinkAjax之类的就没有看了,主要是觉得还需要学习一个新的类库,现在有protype、JQuery等等选择,所以就略过没有看。
从上面的分析看一下,其实TP的框架结构真的是非常清晰,将MVC完全放在了分属的三个文件中,Dispatch和Route也是同样。需要使用的方法没有在各自所属的文件中单独定义,而是定义在了一个公用的functions.php中,是的核心部分不会显得冗余(当然,每个部分的专属功能还是写在了各自文件中,比如Model的_query、_delete等等,毕竟这个是输入Model的一部分)。然后对于常量定义和惯例配置也是写在了各自文件中。好处是以后如果需要修改,那么只需要修改各自的文件,而不需要去特定文件中进行修改。然后在所有的MVC、dispatch、route工作做好之后,使用App.class.php将这一切联系在一起,最终完成了框架的运作!
其实还不只是这些,单纯的一个THINK_PLUGIN_ON的常量固定了是否可以打开插件(PlugIns目录中),如果有,那么读取其目录下的文件并进行操作(暂时用的比较多应该是模板插件)。在其Vender目录中可以导入其他的一些类库,比如PERR之类,一定程度上也增强了TP的扩展性,毕竟TP需要实现的是一个框架而不是所有。PEAR这种纯粹的类库配合TP应该说是定位很准的操作方法!
总的来说,TP的编码确实是非常优秀的编码,将PHP这种不纯的OO写出一个尽可能OO的框架,已经是非常的棒了~加上TP的优秀的开发文档,完善的API文档,应该会成为不少PHP开发人员的首选框架。
从ThinkPHP官方网站上面看到原来yhutc已经写了不少的东西,内容很全并且解释的也很不错~所以相较之下我的暂时就不打算更新了。
加上最近需要准备开题等等一系列事情要做,而且为了准备提升一下自己的PHP水平,准备开题后看一下XOOPS的源代码~~所以估计最近对ThinkPHP只是学习,不会写一些教程什么了。
不过倒是可以做做笔记。
OK.Let go on~
上次说到config.php文件的配置。那么,肯定要问一下,如何判断能否连接上呢?OK,今天我们就来验证一下这个问题,顺便说一下Action和Model的基本内容。
在我们开始之前,首先建立一个数据库表。由于我们是简单的CMS,那么数据库表也是非常简单。SQL语言如下
这样子我们就把我们需要的数据库建立好了。然后,我们开始对这个数据库进行操作吧。
操作数据库之前,我们要建立一个Model。在说Model和Action之前,先交代一下Model和Action的保存位置。Model保存在程序目录中lib/Model文件夹中,Action保存在程序目录中lib/Action文件夹中。ThinkPHP系统默认的Model规则是这样子的:Model文件文明名类似“Model类名+Model.class.php,并且Model默认的操作数据库表名字为我们在config.php中定义的DB_PREFIX+Model类名,Model类名和文件名需要大写”在Model文件中,定义一个类,扩展Model类,一般写法如下
class 类名Model extends Model{
}
那么,现在我们来定义一个Model吧。
由于我们数据库表名称为cms_article,
class ArticleModel extends Model{
}
文件保存为ArticleModel.class.php。什么都不用写,一个Model已经定义完成了。那么现在,我们继续我们的Action知识吧。
Action和Model很多的规则很接近,不同的是Action不直接操作数据库,而是需要通过Model对数据库进行操作。现在我们来定义一个Action来完成操作。
class IndexAction extends Action{
function index(){
$Article = D(”Article”);
}
}
将文件保存为IndexAction.class.php。OK,现在我们刷新一下首页,如果没有任何的提示,那么恭喜你,数据库连接Model、Action定义都是正常的。Action中D方法就是调用Model,Article就是我们刚刚定义的那个ArticleModel.class.php中的Model类~也就是说在定义Model的同时,我们已经完成了对数据库的连接和对数据库表操作的准备~
OK,这次就这样子了。下次说一下基本的CURD方法,也就是create、update、read、delete四种数据库的操作方法~~
首先说一下大概的目标。
大概的目标就是利用ThinkPHP快速的开发一个简单的CMS。什么叫简单呢?就是简单到前台只有数据显示,文章评论、后台只有增加删除编辑分类、文章、评论。怎么样?够简单的了吧?等我们把这个雏形搭好了之后哦,再在雏形基础上增加其他例如手动更新、广告管理等功能。
总之呢,在整个过程中,一切都以简单为基础,但是尽量涉及到ThinkPHP的开发的每个过程(除了那个ThinkTemplate,实在是不喜欢)
Are You Ready?Let’s Go~~
在我看来,ThinkPHP1.0.2的升级是一个比较重要的升级。Why?最关键的就是在于只需要建立一个入口文件并且运行一次之后,所有的需要的目录就会自动帮你建立好。不要小看这个功能。在每个框架都需要建立N多文件夹的时代,这种特性还是很需要的。有时候我们可以清楚的知道每个文件夹放入什么样子的内容,但是我们不能清楚的记得每一个文件夹~ThinkPHP这个特性使得ROR的特性更加的前进了一步~
废话少说,进入正题吧。
既然这样子,我们首先先写一个入口文件吧。
对于TP来说,所有的入口文件都是一样,你要做的,就是定义很少的一部分东西而已。
下面是一个典型的ThinkPHP的入口文件。
define(”THINK_PATH”,”./ThinkPHP/”);
define(”APP_NAME”,”cms”);
define(”APP_PATH”,”./cms”);
require_once(THINK_PATH.”ThinkPHP.php”);
$app = new App();
$app->run();
稍加解释一下,前面三行主要定义了一些和项目有关的东西。THINK_PATH定义了ThinkPHP所在的目录。APP_NAME说的是项目名称(大多数情况下都没用,基本上可以不用定义),APP_PATH比较重要。这个告诉了我们整个程序所在的相对位置(相对于入口文件index.php),这个决定了我们所有和程序有关目录的建立(不过这个不用着急,ThinkPHP会在第一次执行的时候哦根据你的入口文件帮你建好的)。下面三行基本上都是一样的,首先将ThinkPHP.php包含进来,然后建立一个App实例之后运行它。OK,done!程序已经跑起来了~
既然是CMS,那么数据库肯定是少不了的了。框架中,我们不需要进行mysql_connect之类的操作,ThinkPHP会帮我们全部做好,我们需要做的,仅仅是定义一个config.php文件。
将下列内容写入Conf目录下的config.php文件中
return array(
“DB_TYPE”=>”mysql”,
“DB_HOST”=>”locahost”,
“DB_NAME”=>”test”,
“DB_USER”=>”dba”,
“DB_PWD”=>”",
“DB_PREFIX”=>”cms_”
);
这个用我们的语言描述就是“以用户名dba,空密码来连接位于localhost的test的数据库,这个数据库中所有我们即将操作的数据库表都是以cms_为前缀的”。只要确认你的信息都是正确的,那么连接就没有问题了。
第一次就是这么的简单,算是一个好的开始吧。至于如何验证我们的连接时正确的呢,下次说一下简单的Action和Model的相关内容中会提到的哦~~
PS:竟然到现在都没有人祝我生日快乐~~囧!!MMD,就算住院,偶还活着呢,NND,莫非都以为我死了~~算了,自己祝自己生日快乐了!!生日快乐!!
最近很多事情,让我什么都做不了~Blog更新也是关于一些感情的事情。
不过这些事情终于处理完成了——虽然最终的结果不是我想要的,不过也是处理完成了。现在也该要重新回到原来的生活轨迹上面来。
ThinkPHP一直在看着,没有想到去写什么东西。不过鉴于老沙说的“掌握一个框架最好的办法就是用它写一个东西出来”,所以还是决定动手写一个CMS出来尝试一下吧。
就这个CMS开发过程中我会写成一篇教程,希望能对所有的THINKPHP的朋友有所帮助。
不过今天就不写了,一方面时间不早了,另一方面明天生日,今天想好好休息一下。
说句实话,个人是非常的不喜欢Smarty这个PHP的模板插件~~Why?可能是我比较偏置,就是认为: