CmsTop开发手册.doc_第1页
CmsTop开发手册.doc_第2页
CmsTop开发手册.doc_第3页
CmsTop开发手册.doc_第4页
CmsTop开发手册.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CmsTop开发手册目录 入门基础 程序框架 系统类库 系统函数 JS规范 JS库 常见问题入门基础LAMPLAMP是基于Linux,Apache,MySQL和PHP的开放资源网络开发平台,PHP是一种有时候用Perl或Python可代替的编程语 言。这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境。名字来源于每个程序的第一个字母。每个程序在所有权里都符合开放源代码标 准:Linux是开放系统;Apache是最通用的网络服务器;MySQL是带有基于网络管理附加工具的关系数据库;PHP是流行的对象脚本语言,它包含 了多数其它语言的优秀特征来使得它的网络开发更加有效。开发者在Windows操作系统下使用这些Linux环境里的工具称为使用WAMP。 虽然这些开放源代码程序本身并不是专门设计成同另外几个程序一起工作的,但由于它们都是影响较大的开源软件,拥有很多共同特点,这就导致了 这些组件经常在一起使用。在过去的几年里,这些组件的兼容性不断完善,在一起的应用情形变得更加普遍。并且它们为了改善不同组件之间的协作,已经创建了某 些扩展功能。目前,几乎在所有的Linux发布版中都默认包含了这些产品。Linux操作系统、Apache服务器、MySQL数据库和Perl、PHP 或者 Python语言,这些产品共同组成了一个强大的Web应用程序平台。OOP面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。OOP 主要有以下的概念和组件: 组件 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。 抽象性 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。 封装 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提 供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。 多态性 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。 继承性 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的 类的扩展,这样就 可以将类组织成树形或网状结构,这体现了动作的通用性。由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行。MVC MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器 (C),它们各自处理自己的任务。 视图:视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应 用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理 发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。 模型:模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和 ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于 模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。 控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控 制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。 现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制 器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。 单一入口 单一入口通常是指一个项目或者应用具有一个统一(但并不一定是唯一)的入口文件,也就是说项目的所有功能操作都是通过这个入口文件进行的,并且往往 入口文件是第一步被执行的。 单一入口的好处是项目整体比较规范,因为同一个入口,往往其不同操作之间具有相同的规则。另外一个方面就是单一入口带来的好处是控制较为灵 活,因为拦截方便了,类似如一些权限控制、用户登录方面的判断和操作可以统一处理了。 或者有些人会担心所有网站都通过一个入口文件进行访问,是否会造成太大的压力,其实这是杞人忧天的想法。 环境要求详见系统部署文档程序框架目录结构|-apps(应用程序)| | | |-system(系统)| | | | | |-controller(控制器)| | | | | | |-admin(后台控制器)| | | | | |-model(模型)| | | | | | |-admin(后台模型)| | | | | |-lib(类库)| | | | | |-helper(助手类库)| | | | | |-view(后台视图)| | | |-member(会员)| | |-config(配置文件)|-data(数据)| | |-cache(缓存目录)| | | | |-apps(各应用缓存目录)| | | | |-setting(各应用设置缓存)| | | | |-table(数据表缓存)| | | | |-templates(模板缓存)| | | |-dbkv(key=value文本数据库目录)| | |-logs(日志)| | |-sessions(SESSION)| | |-tmp(临时文件目录)|-framework(框架)| | | |-acl(权限)| | | |-cache(缓存)| | | |-client(客户端)| | | |-core(核心)| | | |-db(数据库)| | |-dbkv(key=value文本数据库)| | |-env(环境)| | |-filter(过滤)| | |-form(表单)| | |-helper(助手类)| | |-session(SESSION)|-public(公开发布目录)| | |-admin(后台)| | |-app(动态)| | |-img(公共图片、JS、CSS)| | |-upload(附件)| | |-www(html)|-resources(资源)|-templates(模板)|-cmstop.php(项目公共执行入口)需要 777 权限的目录: ./config ./data ./templates ./public/upload./public/www运行流程 架设通过浏览器访问 http:/admin.cmstop.dev/?app=system&controller=admin&action=login 则程序运行流程为: ./public/admin/index.php ./cmstop.php ./apps/system/controller/abstract.php ./apps/system/controller/admin/admin.php ./apps/member/model/member.php ./apps/system/model/admin/admin.php入口文件1define(CMSTOP_START_TIME, microtime(true);2define(RUN_CMSTOP, true); define(IN_ADMIN, 1);3/后台4require ././cmstop.php;5$cmstop = new cmstop(admin); /admin, frontend6$cmstop-execute();程序加载 1/加载框架类库2import(helper.upload);3/加载模型并返回对象4$content = loader:model(content);控制器前台控制器文件保存在 ./apps/appname/controller/ 目录示例代码:01class controller_index extends controller_abstract0203 function _construct(& $app)04 05 parent:_construct($app);06 07 function index() 08 $this-template-display(index);09 10后台控制器文件保存在 ./apps/appname/controller/admin/ 目录 示例代码:1class controller_admin_index extends controller_abstract23 function _construct(& $app)4 5 parent:_construct($app);6 function index() 7 $this-view-display(index);8 9控制器内置方法和变量:01/当前用户信息02$this-_userid; /当前用户ID03$this-_username; /当前用户名04$this-_roleid; /当前用户角色ID05$this-_groupid; /当前用户组ID06$this-setting; /当前应用设置,数组07 08/JSON 对象09$this-json; /JSON 对象10$data = $this-json-encode($data); /JSON 加密11$data = $this-json-decode($data); /JSON 解密12 13/后台视图(模板)14$this-view; /视图对象15$this-view-assign(varname, $value); /注册模板变量16$this-view-assign($array); /把数组注册为变量17$this-view-display(category/index); /直接显示解析后的模板内容18$data = $this-view-fetch(category/index); /获取解析后的模板内容到变量19 20/前台模板21$this-template; /视图对象22$this-template-assign(varname, $value); /注册变量23$this-template-assign($array); /把数组注册为变量24$this-template-display(system/index.html); /显示 system/index.html 模板25$data = $this-template-fetch(system/index.html);/获取 system/index.html 模板输出内容26/加载model27$content = loader:model(admin/content, system);/加载 ./apps/system/model/admin/content.php,并返回对象28/判断是否为 GET 请求29$this-is_get(); /返回 bool 值30/判断是否为 POST 请求 $this-is_post(); /返回 bool 值31/判断是否为 AJAX 请求 $this-is_ajax(); /返回 bool 值32 33/执行另外一个action34$this-forward($app, $controller, $action, array $args = array();35/URL 跳转36$this-redirect($app, $controller, $action, array $args = array(); /37/显示提示信息并且停止执行38$this-showmessage($message, $url = null, $ms = 2000);模型模型示例:001class model_admin_content extends model002003 function _construct()004 005 parent:_construct();006 /定义数据表007 $this-_table = $this-db-optionsprefix.content;008 /定义主键009 $this-_primary = contentid;010 /定义数据表字段011 $this-_fields = array(contentid, catid, modelid, title, color,icon, thumb, tags, sourceid,author,original, url, weight,instruct, locked, lockedby, published, interactived,unpublished,created, createdby, modified, modifiedby, checked, checkedby,version, status, workflow_step, workflow_roleid, pv, comment_allow,comment_count);012 /定义只读字段013 $this-_readonly = array(contentid, modelid, created, createdby);014 /定义创建数据时自动填充字段015 $this-_create_autofill = array(created=TIME, createdby=$this-_userid, version=1);016 /定义更新数据时自动填充字段017 $this-_update_autofill = array(modified=TIME, modifiedby=$this-_userid, version=version+1);018 /定义输入过滤019 $this-_filters_input = array();020 /定义输出过滤021 $this-_filters_output = array();022 /定义输入时自动验证023 $this-_validators = array(024 title = array( not_empty=array(标题不能为空),025 max_length =array(80, 标题不得超过80字节) ),026 catid= array( not_empty=array(请选择栏目),027 max_length=array(5, 栏目ID不得超过5字节),028 is_numeric=array(栏目ID格式不正确) ),029 modelid= array( not_empty=array(请选择内容模型),030 max_length =array(3, 内容模型ID不得超过3字节),031 is_numeric=array(内容模型ID格式不正确), min =array(1, 请选择内容模型),032 max =array(255, 内容模型ID不得大于255)033 )034 );035 036 function test()037 038 $data = array(catid=1, title=标题);039 040 /插入数据并返回主键ID041 $id = $this-insert($data);042 $this-catid = 1;043 $this-title = 标题;044 $id = $this-insert();045 $data = array(catid=1, title=修改标题);046 /更新数据047 $this-update($data, contentid=$id);048 $this-where(contentid=$id)-update($data);049 $this-contentid = 1; $this-catid = 1; $this-title = 标题; $id =$this-update();050 /设置字段值051 $this-set_field(catid, 1, contentid=1);052 /字段值加一053 $this-set_inc(pv, contentid=1);054 /字段值减一055 $this-set_dec(comment_count, contentid=1);056 /查询数据057 $data = $this-select(catid=1, contentid, title, contentid desc);058 /分页数据059 $data = $this-page(catid=1, contentid, title, contentid desc, 1, 20);060 /取得一条记录061 $r = $this-get(contentid=1, contentid, title);062 /取得主键值为1的一条记录063 $r = $this-get(1);064 $this-contentid = 1;065 $r = $this-get();066 /取得主键值为 1,2,3 的多条记录067 $data = $this-select(1,2,3, contentid, title, contentid desc);068 $data = $this-select(array(1, 2, 3), contentid, title, contentid desc); /可传数组069 /按字段值取得一条记录070 $r = $this-get_by(contentid, 1, contentid, title);071 $r = $this-get_by_contentid(1, contentid, title);072 /按字段值取得多条记录073 $data = $this-gets_by(catid, 1, contentid, title, contentid desc);074 $data = $this-gets_by_catid(1, contentid, title, contentid desc);075 /取得符合条件的字段值076 $title = $this-get_field(title, contentid=1);077 /取得符合条件的字段值数组078 $array = $this-gets_field(title, catid=1);079 /计算符合条件的记录数080 $count = $this-count(catid=1);081 /取得主键082 $primary = $this-primary();083 /判断字段值是否存在084 $this-exists(contentid, 1);085 /连写查询多条记录086 $data = $this-field(catid, title)-where(catid=1)-order(contentid desc)-limit(10)-select(); /连写查询一条记录087 $r = $this-field(catid, title)-where(contentid=1)-get();088 /复制一条记录089 $newid = $this-copy_by_id(1);090 /删除数据091 $this-delete(contentid=$id);092 /删除主键值为1的数据093 $this-delete(1);094 $this-contentid = 1;095 $this-delete();096 /删除主键值为 1,2,3 的数据097 $this-delete(1,2,3);098 $this-delete(array(1, 2, 3); /可传数组099 /按字段值删除数据100 $this-delete_by(contentid, 1);101 102模板1、后台视图 在控制器中可以直接调用模板对象 $this-view1/后台视图2$this-view-assign(varname, $value);/注册变量3$this-view-assign($array);/把数组注册为变量4$this-view-display(category/index);/显示view/category/index.php模板5$data = $this-view-fetch(category/index);/获取view/category/index.php 模板输出内容后台模板嵌套:1$this-view-display(header, system); /嵌套视图 ./apps/system/view/header.php2、前台模板 在控制器中可以直接调用模板对象 $this-template1/前台模板2$this-template-assign(varname, $value); /注册变量3$this-template-assign($array); /把数组注册为变量4$this-template-display(system/index.html); /显示system/index.html 模板5$data = $this-template-fetch(system/index.html); /获取system/index.html 模板输出内容模板嵌套 template header.html 判断语句 if $c = 1 显示 A elseif $c = 2 显示 B else 显示 C /if 循环 loop $array $k $v 键:$k 值:$v /loop 函数 str_cut($title) url(system/seccode/image) 常量 ADMIN_URL 后台地址 APP_URL 动态地址 IMG_URL 公共图片、JS、CSS地址 UPLOAD_URL 附件地址 WWW_URL html地址 变量 $_userid 用户ID $_username 用户名 $_groupid 用户组ID $_roleid 角色ID 配置 $CONFIGcharset 字符集 应用设置 $SETTINGsitename 网站名称 db标签 相关文章示例:1db sql=SELECT * FROM #table_related WHERE contentid=$contentid AND apiid=12 $rtitle$rtime3/db文章列表页示例:1db sql=select * from #table_content where catid=$catid AND modelid=1 AND status=6 order by published desc size=$pagesize page=$page2$rtitledate(n月j日 H:i,$rpublished)3/db4 pages($total, $page, $pagesize, 2, $urlrule)content 标签示例:1content catid=4 modelid=1 orderby=published desc, pv desc page=$pagesize=82$rtitle date(Y-m-d,$rpublished)3/content4pages($total, $page, 1)标签参数说明: 1、调用条件 catid:栏目ID,多个ID用“,”隔开modelid:内容模型ID,多个ID用“,”隔开sourceid:来源ID,多个ID用“,”隔开createdby:创建人ID,多个ID用“,”隔开weight:权重范围,weight=60 表示权重值等于 60,weight=60, 表示权重值大于 60,weight=,60 表示权重值小于 60,weight=60,100 表示权重值大于 60 且小于 100published:发布时间范围,published=2009-11-10 表示调用发布时间为2009年11月10日的内容,published=2009-11-10, 表示调用发布时间大于2009年11月10日的内容,published=,2009-11-10 表示调用发布时间小于2009年11月10日的内容,published=2009-11-10,2009-11-30 表示调用发布时间大于2009年11月10日且小于2009年11月30日的内容,published=1 表示调用发布时间1天以内的内容tags:关键词,多个关键词用“,”隔开,例如:tags=福布斯,权力2、排序方式 orderby:排序方式,多个“,”隔开,例如: orderby=published desc, pv desc3、结果数及分页 offset:数据库查询结果偏移值(必须是正整数),默认值为 0size:行数(必须是正整数)page:当前页码(必须是正整数)4、返回值变量 return:返回结果变量名,默认为 r 5、输出处理函数 str_cut($rtitle, 50, .) 截取标题为50个字节 date(Y-m-d, $rpublished) 日期格式处理,产生 2009-11-15 格式的日期 thumb($rthumb, 100, 100) 自动压缩缩略图为宽100像素,高100像素 pages($total, $page, $pagesize, 2, $urlrule) 分页代码,一般上面的 db 或者 content 标签中必须有 page 参数 url(article/article/show, contentid=100) 生成URL,例如:?app=article&controller=article&action=show& contentid=100数据库01$db = & factory:db();02/执行SQL语句,不返回结果集03$db-exec(delete from #table_content where contentid=1);04/执行SQL语句,返回结果集05$data = $db-query(select * from #table_content where contentid=1);06/预处理模式执行SQL语句07$sdb = $db-prepare(delete from #table_content where contentid=?);08$sdb-execute(array(1);09/获取一条记录10$r = $db-get(select * from #table_content where contentid=?, array(1);11/获取多条记录12$data = $db-select(select * from #table_content where catid=?, array(1);13/插入数据14$insertid = $db-insert(insert into #table_content(catid, title) values(?, ?), array(1, 标题);15/更新数据16$count = $db-update(update #table_content set catid=? where contentid=1,array(1);17/更新或插入数据18$count = $db-replace(update #table_content set catid=? where contentid=1,array(1);19/删除数据20$count = $db-delete(delete from #table_content where contentid=?, array(1);21/获取指定条数的数据22$data = $db-limit(select * from #table_content where catid=?, 10, 0,array(1);23 /分页24$data = $db-page(select * from #table_content where catid=?, 1, 20, array(1);25/选择数据库26$db-select_db(dbname);27/获取表的字段数组28$fields = $db-list_fields(#table_content);29/获取数据库的表数组30$tables = $db-list_tables(dbname);31/获取有权限的数据库32$dbs = $db-list_dbs();33/获取表的主键34$primary = $db-get_primary(#table_content);35/获取错误码36$errno = $db-errno();37/获取错误信息38$errstr = $db-error();缓存01/创建缓存对象02$cache = factory:cache();03/设置缓存04$cache-set($id, $data, $ttl = 0);05/获取缓存06$cache-get($id);07/删除缓存08$cache-rm($id);09/清空缓存10$cache-clear();cookie1$cookie = factory:cookie();2/设置3cookie $cookie-set($var, $value = null, $time = 0);4/删除5cookie $cookie-set($var);6/获取7cookie $cookie-get($var);session1$session = & factory:session();2$session-start();3$_SESSIONname = abc;URL路由为了能够自定义前台URL样式,凡是涉及到前台动态URL,都需要经过url函数处理。 函数原型 url($aca, $params = null, $is_full = false) $aca,是app/controller/action,比如:member/passport/login $params,是url参数,格式:catid=1&page=2 $is_full,是否返回绝对地址 举例说明 url(member/member/list, groupid=1&page=2) 1、如果 cmstop/config/config.php 文件里 urlmode = standard,则返回 ?app=member&controller=member&action=list&groupid=1&page=2 2、如果 cmstop/config/config.php 文件里 urlmode = pathinfo,则返回 index.php/member/member/list/groupid/1/page/2 3、如果 cmstop/config/config.php 文件里 urlmode = querystring,则返回 index.php?/member/member/list/groupid/1/page/2 4、如果 cmstop/config/config.php 文件里 urlmode = rewrite,则返回 /member/member/list/groupid/1/page/2 如果要构造个性化URL,还可以编辑 ./config/router.php 文件配置文件1/创建对象2$config = & factory:config();3/保存配置4$config-set(config, $array); /把配置保存到 ./config/config.php5/读取配置6$config = config:get(config); /返回数组,读取 ./config/config.php7$config = config(config);/精简写法8$charset = config:get(config, charset); /返回字符串,读取 ./config /config.php 中的 charset9$charset = config(config, charset);/精简写法应用设置01/创建对象02$setting = & factory:setting();03/保存设置04$setting-set_array(system, $array);05/保存 system 应用的设置06$setting-set(system, sitename, CmsTop 官方网站); /保存 system 应用的设置的 sitename 值07/读取设置08$setting = setting:get(system); /返回数组,读取应用 system 的设置09$setting = s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论