ThinkCMF简介:ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发商场应用的用户无需关心开发SNS应用时如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。
在过去的一两个月里,一直在苦心学习thinkphp,thinkphp作为国内php开源界的领军者,这么说一点也不为过,毕竟上到开源中国上去看看php的开源项目,没有几个不是基于thinkphp的。说是作为中小企业的最佳选择一点不为过。而在所有的thinkphp项目中,我看中了thinkcmf这个cmf框架,cmf对于我们来说,还是一个比较新的概念。本来我是准备好好看看thinkphp官方推出的onethink,但是无奈这个大神之作,我小菜难以琢磨其意图。只能等着他日学有所成的时候在好好体会一下那些个工作了n年的哲人们的思想。暂时thinkcmf这个框架还是最符合我的要求的,既接程序员的地气,也接用户的地气,相关的第三方登录也都整合好了,确实是省了不少事啊。在这里暂时分享一下我在研究这个cmf框架的一些笔记。
系统扩展的核心-插件系统是怎么实现的?
首先thinkcmf这点不得不说是借鉴了onethink的优秀思想,
看图:
在网站的根目录下有个plugins的目录,里面有三个插件目录分别为Demo,Jam,Snow。在管理员后台会通过文件扫描的方式扫到这些个文件,并显示在扩展管理->钩子里,但是要注意插件的文件规范具体在官方文档(http://www.thinkcmf.com/document/article/id/372.html)上写的很详细,并且该程序还有一个Demo可以参考,使用起来非常方便。当你在后台点击安装的时候,会把相关的配置文件写到数据库中,其中包括钩子的介绍,和挂载点(比如:footer)。
知道了这些之后,当我们每次访问页面的时候系统都要从数据库里读取钩子和所要运行的函数进行函数注册,当运行到这个钩子(就比如hook("footer))的时候就会触发这些个插件的函数。
或许你会很疑惑到底什么是钩子,这个其实很简单,这么做个小小的程序比喻:
<?php function do($name){ switch ($name) { case 'footer': //钩子 func1(){} //插件一 func2(){} //插件二 func3(){} //插件三 break; case 'footer_end': func1(){} //插件五 func2(){} //插件六 func3(){} //插件七 break; } } do("footer");// 这里就是footer钩子的执行了 ,相对应thinkcmf的hooks('hooks')
如果有熟悉thinkphp的朋友还有个对于钩子的疑惑为什么普通的程序都XXXXBehavior这样写的,因为他们更改了thinkphp框架Hook类源码,具体看thinkphp中的Hook类
。
原文地址:http://blog.csdn.net/jam_lee/article/details/42922873