《HongCMS开发者手册》二次开发指南.docx
《《HongCMS开发者手册》二次开发指南.docx》由会员分享,可在线阅读,更多相关《《HongCMS开发者手册》二次开发指南.docx(23页珍藏版)》请在三一办公上搜索。
1、HongCMS开发者手册二次开发指南HongCMS开发者手册-二次开发指南 模板语法参阅:/bbs/?thread-index-fid-1-tid-19.htm 一、前言: 说实在的,很怕写文档,特别是这种开发文档,无法知道别人需要什么样或者说什么程度的描述,自己高兴的事别人未必开心。所以,这个文档总的想法是将重点介绍清楚,让用户了解系统脉络,细枝末节的技术google就行了。 前些日子因参与其它公司的项目,研究了些PHP开发框架,如CI, ThinkPHP等这些,觉得这些小型框架对我来说很不爽,因为本人一直 喜欢4S的开发理念,即:Safe, Simple, Small, Stable (安
2、全,简单,小巧,稳定),不刻意追求大而全的东西,认为简单是最美的。 这和性格有关,也很难改变。就拿CI来说吧,前台游客只要一进入网站,就有至少1个数据库写入及1个session生成,一个session在服务器就要写入一个文件,试想如果网站同时来了1万个用户访问,文件IO开销巨大,说得不好听点,服务器可能就死球了。对于框架,业内一直有这么一句话:学之者生,用之者死。本人觉得这句话很值得琢磨一下。 如今没有几个公司不要求程序员有MVC的开发理念,MVC确实有好处,本人也喜欢,但也不去刻意追求. 当然也有反对MVC的, 包括PHP创始人。HongCMS开发中有V和C,M基本没有,因为不需要或者说使用
3、M编程反而累了,但完全可以使用Model,系统框架已经为它设计好了,程序包models/目录下有实例。特别是后台admin/models/目录下的admin.php, 它就是后台用户的模型。说白了,模型就是一些类啦。 HongCMS系统框架APP.php非常小巧,仅5K大小,再加上XTpl超小模板引擎,HongCMS核心非常小巧、快速和高效。有基础的朋友,如果对HongCMS进行二次开发,或是参考其中的理念,足可以开发出大型系统来。 这些思想,加上多年做双语企业网站的经验,同时有朋友要我开发一个中英双语的小型企业网站,于是HongCMS出生了。对于一些从事网站开发的朋友来说,我想HongCMS
4、更适合成为你的工具,像很多使用weenCompany的用户能赚钱一样,使用HongCMS当然能赚钱,同时在技术上会有更大的提高。对于一般用户,HongCMS是中英文网站系统,对于懂程序的朋友来说,它是小型开发框架,开发由你。 二、目录布局与重要文件介绍 1. 根目录下的几个文件 .htaccess: 此文件是apache服务器下的伪静态规则文件,另外此文件还限制了浏览器可以访问或进入哪个目录或文件夹,增强了系统安全性。如果你添加了一个目录如blog,这个目录下独立安装了另一个blog系统,那么需要修改htaccess文件,以便允许浏览器访问blog目录。 index.php: HongCMS是
5、单入口系统,所有前台页面的访问均从index.php进入。 robots.txt: 此文件列举了一些目录,禁止SEO进入。基本上HongCMS除index.php文件夹都不希望SEO进入,因为SEO在其它目录或文件上抓不到有用的信息,但如果进入的话,反而可能会增加网站负担。 2. Admin目录: 后台管理目录, 里面存放的是后台管理入口文件,控制器和模型,也就是说,基本上后台管理的功能由其中的文件来完成。3.0.0版本开始, 后台管理有自己独立的入口文件index.php,同时后台管理目录可以任意修改。后台管理相当于一个独立的模块。 3. Cache目录: 此目录动态保存模板的缓存文件,一般
6、不需要手动管理其中的文件。 4. Config目录: 系统配置目录,此目录下的config.php保存数据库连接信息等;settings.php保存网站基本设置信息,可以在后台管理中设置其中的信息,当然也可以手动直接修改其中的内容。 5. Controllers目录: 前台控制器文件目录,基本上前台的功能由此目录下的文件完成。 6. Images目录: 此目录为预留目录,在.htaccess中已经设置好了浏览器可以进入此目录,方便用户上传一些图片等,然后在文章内容中直接显示。 7. Includes目录: 此目录存放函数库文件或系统加载的核心文件,在core.php中对系统加载进行基本配置,f
7、unctions.admin.php后台管理的函数库文件,mon.php前台需要使用的函数库文件,functions.global.php里面是前后台都需要使用的函数库文件。 8. Install目录: 系统安装目录,在浏览器中进入此目录安装HongCMS。 9. Medels目录: 前台模型文件目录。 10. Public目录: 此目录存放前台模板文件,后台模板文件,前后台的JS文件等。 11. System目录: 系统框架核心目录,其中的backup目录用于保存后台管理中的数据库备份文件,errors目录中是系统出错时显示的错误信息页面。plugins目录的是系统需要使用的一些类文件,如前
8、后台的基础类文件,数据库类文件,JSON类文件,XTpl模板引擎类等等。system目录中的APP.php文件最重要,它是系统框架的核心类文件。可以这么说,系统的MVC开发模式由它确定。有兴趣的朋友可以仔细地分析一下此文件,有利于理解框架。 12. Uploads目录: 很明显,此目录将保存的是后台管理中各种上传文件,包括编辑器中上传的各种文件。 三、core.php系统加载配置核心文件 上面介绍了HongCMS为单入口网站系统,基本上所有的动态功能或动作均由根目录下的index.php文件引导完成。打开index.php文件,我们看到引入了includes/core.php,可见core.p
9、hp文件在系统加载方面起作核心作用。 core.php需要仔细了解一下,其中最重要的是_autoload自动加载魔术函数,这个函数作用巨大,它允许实例化扩展类或模型类时,不需要在程序中加载相应的类文件,PHP服务器会自动加载相应的类文件,所以说它是魔术函数。这个自动加载函数主要是配合核心框架文件system/APP.php工作的。APP.php是核心框架文件,它的主要工作是对URL进行路由,简单地说就是把URL中的各种参数解释成相应的PHP程序文件去执行相关动作。APP.php文件的工作机制,有兴趣的朋友可以分析它,此文件很小仅5K,但它是框架的核心。 然后,在core.php文件中定义了一些
10、前后台公共的常量,判断前台语言。再就是实例化数据库类,为后面的工作做准备。做二次开发的话,此文件一定要比较熟悉,因为它为系统加载运行做了最开始的一些准备工作。 四、URL路由及动作控制 APP.php核心框架文件的主要工作是解释URL中传递的各种参数到相应的程序中,然后由程序中的动作来完成相关功能,也就是说APP.php行使的路由功能。下面,我们来看几个具体的实例: 例1: / admin/ index.php / products / save 网址 / 模块 / 入口文件 / 控制器 / 动作 上例中,admin是指admin模块,HongCMS按模块来保存关联的程序,后台管理的控制器和模
11、型程序放在admin目录下,我们称admin为后台模块。 products指示APP系统需要调用哪个控制器,由admin和products组合确定了需要加载admin/controllers/products.php文件,这是由APP.php框架决定的。打开admin/controllers/products.php文件,其中可以看到,这是一个类文件,类名为c_products,由SAdmin后台管理基类扩展而来。类名c_products中的c_表示它是一个控制器, 为什么不直接使用products作为类名呢?这是为了同模型类区分开来,以便APP框架能自动识别。控制器的类名做了如此约束后,模型
12、类的类名就可以自由书写了,达到互不冲突的目的。这里SAdmin基类我们稍后介绍。 save指admin/controllers/products.php文件中的save函数,这个函数来完成产品信息的保存功能,看似就像做了某个动作,不难理解。参数可以通过URL来传递,如 / admin / index.php / products / save / ?id=1, 也可以这样写 . save?id=1,当然也可以传递多个参数。 例2:加载哪个控制器呢? 首先它肯定是访问根目录下的index.php文件,由于在URL中没有指定控制器和动作,APP框架默认解释为index / index,系统将加载根
13、目录下controllers目录的index.php文件,并执行此文件中的index函数,此函数显示首页的相关内容。也就是说,如果URL中未指定控制器时为index控制器,未指定动作时为index动作。 可以看出相当于: / index.php / index / index,如果希望APP完成默认的路由,必须由后至前的方式来省略书写URL。比如 / index.php / news就解释成了news控制器的index动作。 五、伪静态及URL处理函数 现在的搜索引擎已经非常厉害了,即使是动态页面也能很好地抓取其中的内容。当然伪静态更有利于SEO,同时URL也更简单。如上面 有时用户的服务器或
14、空间不支持伪静态,有时又支持,HongCMS后台基本设置中有一个开关,当服务器支持伪静态时,可以开启伪静态功能,不支持时可以关闭。那么我们在页面或程序里URL的写法就不能固定,需要随着伪静态功能的开关而相应变化。因而HongCMS默认有2个伪静态处理函数,前台URL和后台BURL。这2个函数分别保存在functions.global.php和functions.admin.php文件中。 以前台URL处理函数URL为例,我们在程序中或模板页面中如何写URL呢?有了这个函数,可以说非常简单了。如上index.php/news/index如何写呢?前台PHP程序中这样写: URL(news),in
15、dex.php文件名肯定不需要写了(index动作也不需要写,因为没有指定动作时默认为index动作),URL这个函数会根据伪静态是否开启自动加上index.php。传送参数也容易,如:URL(news/index?id=888&name=someone) 前台模板中如何调用URL函数呢?很简单,在需要显示URL的地方使用花括号上例中,如果写在模板里,这样写:echo URL(news/index?id=888&name=someone), 呵呵,echo输出并加一个花括号而已。 为了方便在模板文件中输出URL,系统前台函数库文件mon.php有这么个函数PURL,P就是print的意思,意为
16、直接输出URL。那么,在模板里,就这可以这样写URL:PURL(news/index?id=888&name=someone) 六、SAdmin后台基类和SWeb前台基类 这两个基类的类文件均保存在system/plugins/目录下,此目录下还有一些其它的类文件或插件,其中类的命名规则是必须是大写S开头,这是为了让autoload自动加载函数能识别某个类是基础类还是模型类。 admin目录下的后台控制器类都是由SAdmin后台基类继承而来,这样,在SAdmin基类中就可以完成一些后面管理页面中都需要的功能,比如页头、页尾、后台授权等。这个类因为是后台控制器的基类,所以需要做得尽可能的小。在S
17、Admin基类中,我们实例化了admin管理员用户模型,那么用户验证,权限,登录与退出等均由admin模型来完成,模型文件保存在: admin/models/admin.php 系统根目录下controllers目录保存的是前台控制器类,同理均由SWeb前台基类继承而来,但与SAdmin基类稍有不同。因为前台页面输出时都需要加载模板引擎,所以设计成SWeb基类由STpl模板引擎类继承而来,同时在SWeb基类中对STpl模板引擎类进行基本的设置,让其符合前台页面输出的要求,这样在编写前台控制器程序时就非常方便省事了。默认情况下,HongCMS系统前台是没有用户权限控制的,如果需要的话,前台的用户
18、权限控制可以加在SWeb前台基类中。 总结一下,如果某些功能或者设置在前台或者后台总是出现,那么就要考虑将其代码写在SWeb前台或SAdmin后台两个基础类中,这是为了减少代码重复,提高程序效率。比如,前台的产品多级分类功能在所有的页面中均显示,那么我们就在SWeb前台基类中实现它,并将它的内容赋值给一个模板变量,在模板页面中调用就可以了。 如果我想给系统添加一个blog功能,该如何做呢? 给网站添加一个简单的blog功能,可以直接在controllers下添加一个blog控制器来实现。如果这个blog相当复杂, 也可以参考admin模块做一个独立的blog模块来实现。 七、后台Ajax介绍
19、首先说明一下,后台ajax同前台ajax稍有不同,这一节先说说后台ajax。在后台管理中,我们做ajax时不能输出页头,页尾,也不能输出数据库访问错误,因为这些信息返回后,js无法识别。同时,后台ajax也需要权限认证,否则是非法的,这几项都是基本要求。 一般地,后台ajax的URL这样写: BURL(language/ajax?action=delete),看完上面的介绍后我们知道:language指控制器,也就是要执行admin/controllers/language.php程序文件;ajax指language控制器中的ajax动作。这样约定后,与控制器相关的ajax动作可以写到对应的控
20、制器文件里,而不需要做一个独立的ajax文件,便于管理。如果某个控制器有多个ajax,我们可以通过参数action来确定执行哪个ajax。 打开system/plugins/SAdmin.class.php文件,我们看这个后台基类的构造函数,在这里决定了当动作名称为ajax时,禁止输出数据库错误,也不输出页头和页尾,同时实例化admin模型时加了一个参数$this-admin = new admin(1),这个1告诉admin模型,这是进行ajax操作,请做适合ajax相关的权限认证。打开admin/models/admin.php模型文件,可以看出在ajax授权时没有登录框的输出,只返回是否
21、有权限的admin。 在SAdmin.class.php文件中,我们可以看出ajax返回三个变量的JSON数据: $this-ajaxs s=status 表示ajax状态,1表示操作成功,0表示操作失败 $this-ajaxi i 指提示信息,ajax成功或失败都可以通过它返回一条信息 $this-ajaxd d 指实际返回的ajax数据,如果有数据的话,供后续的JS处理。 再打开public/admin/admin.js文件,我们对jquery的ajax做了一个简单的封装:ajax(url, send_data, callback)函数,了解ajax的朋友看一下就清楚了。 在后台管理中,使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HongCMS开发者手册 HongCMS 开发者 手册 二次开发 指南
链接地址:https://www.31ppt.com/p-3063364.html