PHPCMS V9开发文档
PHPCMS V9 二次开发实例–留言本

下面我们将通讲解一个留言本实例,来帮助你更好的掌握PHPCMS V9的二次开发流程。
并在开发过程中体验PHPCMS V9。
在此我们只做基本功能的演示,更多的功能开发,期待你的继续挖掘。
4.1需求分析本实例用PHPCMS V9基础功能开发设计一个留言本管理系统,要求如下:后台:可管理、回复、删除留言信息可控制留言是否前台显示可对留言系统配置设置选项,例如是否起用验证码,默认是否显示、是否允许游客留言等配置。
模块配置信息可多站点存储。
可批量管理所有未回复留言后台管理演示效果如下图所示:前台:根据后台模块配置选项,控制是否显示在线留言填写表单。
在线提交留言,根据后台配置选项,是否显示验证码,是否需管理员审核显示。
留言列表页,需根据后台配置每页条数进行分页。
前台演示效果如下图所示:4.2数据库和数据表的设计这里使用Mysql数据库来存储信息。
首先构建一个留言信息表 guestbook ,它有12个字段,即消息编号(gid),站点ID(siteid),标题(title),内容(content),回复内容(reply),回复状态(reply_status),会员ID(uid),会员姓名(username),审核状态(passed) ,留言时间(inputtime),回复人(replyer),回复时间(replytime)。
下面是创建该表的SQL代码:CREATE TABLE `phpcms_guestbook` (`gid` smallint(5) NOT NULL auto_increment,`title` char(80) NOT NULL,`content` text NOT NULL,`reply` text NOT NULL,`userid` mediumint(8) unsigned NOT NULL default '0',`username` char(20) NOT NULL,`gender` tinyint(1) unsigned NOT NULL default '0',`head` tinyint(3) unsigned NOT NULL default '0',`email` char(40) NOT NULL,`qq` char(15) NOT NULL,`homepage` char(25) NOT NULL,`hidden` tinyint(1) unsigned NOT NULL default '0',`passed` tinyint(1) unsigned NOT NULL default '0',`ip` char(15) NOT NULL,`addtime` int(10) unsigned NOT NULL default '0',`replyer` char(20) NOT NULL,`replytime` int(10) unsigned NOT NULL default '0',PRIMARY KEY (`gid`),KEY `hidden` (`hidden`,`gid`));4.3创建模块目录PHPCMS v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块,如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
PHPCMS V9 产品说明书

PHPCMS V9 内容管理系统产品白皮书上海盛大网络发展有限公司2010年10月关于本文档PHPCMS V9是 PHPCMS 出品的一款基于PHP技术和AJAX技术的企业级网站内容管理系统,旨在帮助用户解决日益复杂与重要的Web内容的创建、维护、发布和应用。
本文档概要地介绍了PHPCMS V9各项特性与功能,是用户熟悉和掌握PHPCMS V9的良好参考资料。
读者对象本文档的读者为PHPCMS V9的使用者。
使用者应具备以下基础知识:熟悉Microsoft Internet Explorer或Mozilla Firefox的使用;熟悉Windows或Linux/Unix操作系统;熟悉Mysql数据库,及数据库相关知识 .熟悉HTML基本知识和相关的HTML页面制作方法。
用户反馈感谢您使用PHPCMS 开源软件的产品。
如果您发现本文档中有错误或者产品运行不正常,或者您对本文档有任何意见和建议,请及时与我们联系。
您的意见将是我们做版本修订时的重要依据。
联系地址上海盛大网络发展有限公司:北京市朝阳区西坝河西里18号正通时代创意中心6号楼邮编:100083电话:(010)52752688传真:(010)52752888商务QQ:1561683312,1115940351 Email:zhangqing.zack@目录1公司简介12产品概述产品简介5全新框架5门户级站群系统6多发布点 6 数据表分离6强大的内容模型6模版制作方便6银行级的安全保障措施7优秀的用户体验7千万级的数据承载能力7 3功能模块文章7专题10评论14投票15广告位17附件管理18全站搜索20会员系统21站群功能24多发布点27信息采集27数据备份29 SSO(单点登陆)30支付系统(在线充值)31 4技术架构4.1运行环境334.2架构介绍334.3安全机制34 5购买方式5.1购买流程345.2价格体系355.3购买说明361 公司介绍Phpcms网站管理系统是国内主流CMS系统之一,曾多次被新浪、网易、电脑报等IT媒体报道。
PHPCMSV9控制器模块开发文档

控制器模块开发文档= beat 1.0 =编写:车险无忧日期:2014 / 06 / 30第一章控制器概述控制器,即为MVC设计模式中的控制(controller)模块,负责处理应用程序中用户交互的部分,通常负责控制用户输入,调取视图,向模型发送数据。
简单来说,当用户点击web中的超链接和发送HTML表单操作时,控制器开始处理用户输入内容,并且决定调用哪个模型来处理请求,并决定使用哪个视图来显示返回的数据。
在PHPCMS V9中,控制器也就是模块的类文件,位于phpcms/modules/模块/目录下面。
类名称为文件名.php。
但控制器类名称必须与控制器文件名称相同。
我们首先试试创建第一个程序:1.1 输出Hello world!我们创建一个简单的控制器,以便直观的了解其工作原理。
使用你喜欢的编辑器创建一个名为hello.php的文件,然后输入下面代码:classhello{functionindex(){echo'Hello World';}}然后在phpcms/modules目录下创建一个名为hello的文件夹,将刚刚创建的hello.php文件保存在phpcms/modules/hello文件夹下。
(phpcms/modules/hello/hello.php)现在,使用URLhttp://localhost/?m=hello&c=hello&a=index来访问您的网站,不出意外,你应该看到Hello World!(我们假设您的服务器在本地,如果在其他服务器上,你可以将localhost换成你的域名)。
第二章系统配置2.1 URL访问PHPCMS遵循MVC开发模式,基于控制器和操作的方式进行访问,采用单一入口index.php 进行项目的部署和访问,无论访问任何一个模块或者功能,都需要通过该文件。
http://localhost/?m=hello&c=hello&a=index&id=3* M = hello 为模型/模块的名称,位于phpcms/modules/content* C = hello为控制器名称,位于phpcms/modules/hello/hello.php* A = index为事件名称,位于phpcms/modules/hello/hello.php中index()方法。
PHPCMS V9模板制作教程

PHPCMS V9模板制作教程2011年5月29日12:17第一节1、首先下载phpcms v9的集成安装包并安装,在官方论坛里很显眼的位置,这里就不详细说明了。
2、本地调试建议大家使用APMserver,或者wampserver等,可以到PHPCMS吧官方网站首页链接下载。
安装好打开v9的根目录“phproot→phpcms→templates”文件夹把“default”文件夹复制一份起名“redu”。
3、登陆v9后台登录地址:http://localhost/admin.php用户名:phpcms 密码:phpcms。
4、打开界面→模板风格→风格标识redu下的详细列表下的content文件夹。
5、大家熟悉一下后台的使用,这个必须掌握。
今天就写这些。
第二节课1、首先修改首页模板index.html修改前向大家介绍下v9的工作模式,v9和他的前身phpcms2008是一样的都是“标签调用头部 +首页部分+ 标签调用底部”所以按照从头开始的顺序第一步打开heard.html现在我们开始分析header.html的构造:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml">上面是W3C网页标准<head><meta http-equiv="Content-Type" content="text/html; charset={CHARSET}" />{CHARSET}" =字符集(gbk或者utf-8)<meta http-equiv="X-UA-Compatible" content="IE=7" /><title>{if isset($SEO['title']) && !empty($SEO['title'])}{$SEO['title']}{/if}{$SEO['site_title']}</title>判断语句翻译:如果设置了标题并且标题不为空,则显示标题,否则显示网站名称<meta name="keywords" content="{$SEO['keyword']}"><meta name="description" content="{$SEO['description']}"><link href="{CSS_PATH}reset.css" rel="stylesheet" type="text/css" /><link href="{CSS_PATH}default_blue.css" rel="stylesheet" type="text/css" />上面2行是外部css的调用{CSS_PATH}<script type="text/javascript" src="{JS_PATH}jquery.min.js"></script><script type="text/javascript" src="{JS_PATH}jquery.sGallery.js"></script><script type="text/javascript" src="{JS_PATH}search_common.js"></script>上面3行是网页的js调用</head><body><div class="body-top"><div class="content">{pc:content action="position" posid="9" order="id" num="10" cache="3600"}<div id="announ"><ul>{loop $data $k $v}<li><a href="{$v[url]}">{$v[title]}</a></li>{/loop}</ul></div>{/pc}<script type="text/javascript">$(function(){startmarquee('announ',22,1,500,3000);})</script><div class="login lh24 blue"><a href="{APP_PATH}index.php?m=content&c=rss&siteid={get_siteid()}" class="rss ib">rss</a><span class="rt"><script type="text/javascript">document.write('<iframe src="{APP_PATH}index.php?m=member&c=index&a=mini&forward='+encodeURIComponent(location.href)+'&siteid={ get_siteid()}" allowTransparency="true" width="300" height="24" frameborder="0" scrolling="no"></iframe>')</script></span></div></div></div><div class="header"><div class="logo"><a href="/"><img src="{IMG_PATH}v9/logo.jpg" /></a></div>下面是搜索部分<div class="search"><div class="tab" id="search">{php $j=0}{php $search_model = getcache('search_model_'.$siteid, 'search');}{loop $search_model $k=>$v}{php $j++;}<a href="javascript:;" style="outline:medium none;" hidefocus="true" {if $j==1 && $typeid= $v['typeid']} class="on" {/if}>{$v['name']}</a>{if $j != count($search_model)}<span> |</span>{/if}{/loop}{php unset($j);}</div> <div class="bd"><form action="{APP_PATH}index.php" method="get" target="_blank"><input type="hidden" name="m" value="search"/><input type="hidden" name="c" value="index"/><input type="hidden" name="a" value="init"/><input type="hidden" name="typeid" value="{$typeid}" id="typeid"/><input type="hidden" name="siteid" value="{$siteid}" id="siteid"/><input type="text" class="text" name="q" id="q"/><input type="submit" value="搜索" class="button" /></form></div></div>搜索部分结束<div class="banner"><script language="javascript" src="{APP_PATH}index.php?m=poster&c=index&a=show_poster&id=1"></script></div><div class="bk3"></div><div class="nav-bar"><map>{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"}<ul class="nav-site"><li><a href="{siteurl($siteid)}"><span>首页</span></a></li>{loop $data $r}<li class="line">|</li><li><a href="{$r[url]}"><span>{$r[catname]}</span></a></li>{/loop}</ul>{/pc}</map></div>{if $top_parentid}<div class="subnav">{pc:content action="category" catid="$top_parentid" num="15" siteid="$siteid"order="listorder ASC"}{loop $data $r}<a href="{$r[url]}">{$r[catname]}</a><span> | </span>{/loop}{/pc}{if $modelid}<a href="{APP_PATH}index.php?m=content&c=search&catid={$catid}">搜索</a>{/if}</div>{/if}</div>建议下载个opera浏览器他的检查页面元素功能超赞!第四节{template "content","header"}调用根目录下phpcms/template/content/header文件<!--main-->这个是模版注释!建议一定要养成写代码加注释的习惯这个是div标签,不知道什么是div可以的去网上找些教程学习下,这个都不了解就没必要继续看了<!--这里是pc标签{pc:content 参数名="参数值" 参数名="参数值" 参数名="参数值"}--> {pc:content action="position" posid="2" order="listorder DESC" num="4"}<!--显示PC标签中的数据-->{loop $data $r}{str_cut($r[title],36)}{if $n==1}{/if}{str_cut($r[description],112)}{/loop}{/pc}<!--结束标签--><!--这里还是pc标签-->{pc:content action="position" posid="1" order="listorder DESC" thumb="1" num="5"} {loop $data $r}{/loop}{/pc}推广{pc:block pos="index_block_1"}{/pc}图片新闻{pc:content action="position" posid="12" thumb="1" order="id DESC" num="10"} {loop $data $r}{str_cut($r[title],20)}{/loop}{/pc}{loop subcat(0,0,0,$siteid) $r}{php $num++}{$r[catname]}更多>>{pc:content action="lists" catid="$r[catid]" num="1" thumb="1" order="id DESC" return="info"}{loop $info $v}{str_cut($v['title'],28)}{str_cut($v['description'],100)}{/loop}{/pc}{pc:content action="lists" catid="$r[catid]" num="5" order="id DESC" return="info"} {loop $info $v}·{str_cut($v['title'],40)}{/loop}{/pc}{if $num%2==0}{/if}{/loop}公告{pc:announce action="lists" siteid="$siteid" num="2"}{loop $data $r}{$r['title']}{/loop}{/pc}专题更多>>{pc:special action="lists" siteid="$siteid" elite="1" listorder="3" num="2"}{loop $data $r}{if $n!=1}{/if}{str_cut($r[title],'18')}{str_cut($r['description'],50)}{/loop}{/pc}热点 | 评论 | 关注排行{pc:content action="hits" catid="35" num="10" order="views DESC"}{loop $data $r}{$r[title]}{/loop}{/pc}{pc:comment action="bang" num="10" cache="3600"}{loop $data $r}{$r[title]}{/loop}{/pc}{pc:content action="hits" catid="35" num="10" order="views DESC"}{loop $data $r}{$r[title]}{/loop}{/pc}{pc:link action="type_list" siteid="$siteid" linktype="1" order="listorder DESC" num="8" return="pic_link"}{loop $pic_link $v}{/loop}{/pc}{pc:link action="type_list" siteid="$siteid" order="listorder DESC" num="10" return="dat"} {loop $dat $v}{if $type==0}{$v[name]} |{else}{/if}{/loop}{/pc}$(function(){new slide("#main-slide","cur",310,260,1);//焦点图new SwapTab(".SwapTab","span",".tab-content","ul","fb");//排行TAB}){template "content","footer"}第三节1、养成书写规范的DIV标签搜索引擎优化(seo)中,对代码的优化也是一个很关键的步骤。
PHPCMS V9模型二次开发[高级]_2
![PHPCMS V9模型二次开发[高级]_2](https://img.taocdn.com/s3/m/413549ee0242a8956bece435.png)
PHPCMS v9模型二次开发[高级]概述:PHPCMS v9模型二次开发主要分为底层模型开发,即代码级的模型开发;其次,是可视化的模型开发,即通过登录系统后台添加模型。
第一种模型开发对技术要求很高,但是,能实现很多PHPCMS v9没有实现或者不能实现的功能。
第二种模型开发完全隐藏了技术的实现,操作简单,使用方便,在没有特殊功能的时候,这个是首先。
我们今天先讲第二种,可视化的模型开发。
假如,现在我们有一个产品展示功能。
要显示的信息如下:*)产品名称*)产品价格*)出厂时间*)规格参数*)配件列表*)产品图片然后,PHPCMS v9提供的文章模型、图片模型、下载模型根本不能满足我们的这个需求。
此时,我们就会涉及到添加模型的操作。
1、登录系统后台,进入导航“内容”----》"管理模型"然后,在页面的右边找到“添加模型”,点击进入添加模型:模型名称必须填写,当我们在添加栏目的时候就可以选择以这个名称命名的模型了。
模型表键名也必须填写,这个将会在数据库里面有二张表对应,假设此时的表前缀是:v9_则对应的两张表名为:v9_products、v9_products_data2、点击确定创建好自定义的“产品模型”之后,点击“字段管理”点击“字段管理”之后,在弹出的页面里面进行字段的禁用、删除、添加等操作。
比如:添加产品名称、产品价格、产品规格、出厂时间等字段。
删除:阅读收费、允许评论、分页方式、相关文章等字段。
禁用:关键词、推荐位等字段。
删除字段与禁用字段都很方便快捷,现在来谈谈添加字段。
在点击“字段管理”进入页面后,左上角会有一个“添加字段”的功能。
点击“添加字段”进入页面。
如图:我们以添加一个是否显示产品的功能字段,那么在字段类型那里可以选择“选项”;由于,我们会经常使用这个字段进行查询,所以,我们在“作为主表字段”设置为是;字段名设置为isshows,这个地方的字段名对应表中的v9_products表中的字段,添加字段完成之后,可以在这个表中看得出来。
phpcmsv9代码分析(三)

phpcmsv9代码分析(三)这篇讲讲模型。
1. phpcms/libs/classes/model.class.php这是所有模型类的父类,其他模型类继承它,设置表名,表前缀。
1 2 3 4 5 6 7 8pc_base::load_sys_class('db_factory', '', 0); class model { protected $db_config = ''; //数据库配置 protected $db = ''; //数据库连接 //调用数据库的配置protected $db_setting = 'default';项9 protected $table_name = ''; 1 0 public 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 { $this->db_setting = 'default'; } $this->table_name = $this->db_config[$this->db_setting]['tablepre'].$this>table_nam e; $this->db_tablepre = $this->db_config[$this->db_setting]['tablepre']; $this->db = db_factory::get_instance($this->db_config)->get_database($this->db_setting); } ............ } public function __construct() { if (!isset($this->db_config[$this->db_setting])) $db_tablepre = ''; //表前缀 //数据表名该类还定义了通用的数据库操作函数。
phpcmsv9不用插件打造留言板,而是用表单向导模块和dialog

不用插件打造意见反馈(留言板),先给个图:表单向导+dialog一、表单向导1.登陆Phpcmsv9后台/index.php?m=admin2.模块》模块管理》表单向导》添加表单向导1)名称::意见反馈(请输入表单向导名称) 2)表名:message(请填写表名)3)简介:(这个可以不填)4)下三个可以不用改5)允许游客提交表单:要选是7)模板选择:这个你一定要提前做好模板,比如我的是show_box.html,这里要注意模板命名要以show_开头8)js调用使用的模板:这里不做介绍,可以不理它了。
3,下面,确定。
如果图功能如下:1)信息列表:用来查看留言信息,现在不用2)添加字段:主要用这个,我们要添加三个字段分别是留言标题(title),联系邮箱(email),留言内容(content)添加:字段---字段类型:----字段类型----字段别名----数据校验正则(这个的话看你自己的需求来用)其他的可以不写最后》提交三、模板找到phpcms\templates\default\formguide新建模板show_box.html<style>#postsite #Article .content{padding:40px;}.input-text{width:300px;padding:8px;margin:0; outline:none;border:1px solid #aaa;}.input-text:hover,.input-text:focus,.content #description:hover,.content#description:focus{border-color:#34a950}.content th{ font-size:14px;color:#444; text-align:left;height:50px;}.content th font{ color:#34a950}.content th.text{ text-indent:1em;}.content #description,.content#content{width:300px;height:80px;outline:none;padding:8px;line-height:1.6em;margin-top:5px;} .content .btn input{width:80px;height:36px;text-align:center;background:#34a950;color:#fff;border:0;margin-right:20px; cursor:pointer;}.content .btn input:hover{background:#168D33}.content .btn{margin-left:107px;overflow:hidden;margin-top:20px;}#showmessagebox{ text-align:center;margin-top:100px;}</style><script language="javascript" type="text/javascript" src="{JS_PATH}dialog.js"></script><div class="main" id="postsite"><div id="Article"><div class="content"><form method="post"action="?m=formguide&c=index&a=show&formid={$formid}&siteid=<?php echo$this->siteid;?>" name="myform" id="myform"><table class="table_form" width="100%" cellspacing="0"><tbody>{loop $forminfos_data $field $info}{if $info['formtype']=='omnipotent'}{loop $forminfos_data $_fm $_fm_value}{if $_fm_value['iscomnipotent']}{php $info['form'] =str_replace('{'.$_fm.'}',$_fm_value['form'],$info['form']);}{/if}{/loop}{/if}<tr><th width="25%" class="text">{$info['name']}{if $info['star']}<font>*</font>{/if}</th><td width="75%">{$info['form']} {$info['tips']}</td></tr>{/loop}</tbody></table><div class="btn"><input type="submit" name="dosubmit" id="dosubmit" value=" 提交"> <input type="reset" value=" 重写"></div></form></div></div></div>再建两个提示的新模板Ok.html,<div class="showmessagebox" style="text-align:center;margin-top:100px;color:#444;"><h2>您已经提交,再次感谢谢您的支持!</h2><br/><a class="back" target="_blank" href="{APP_PATH}"style="margin-top:20px;font-size:12px;color:#666;">返回首页</a></div>'Success.html<div class="showmessagebox" style="text-align:center;margin-top:100px;color:#444;"><h2>提交成功,谢谢您的支持!</h2><br/><a class="back" target="_blank" href="{APP_PATH}"style="margin-top:20px;font-size:12px;color:#666;">返回首页</a></div>找到phpcms\modules\formguide下面的index.php找出提示showmessage()46行:改为$_GET['action'] ? exit : showmessage(L('form_expired'),APP_PATH.'index.php?m=formguide&c=index&a=ok');79行:改为showmessage(L('thanks'),APP_PA TH.'index.php?m=formguide&c=index&a=success');97行:改为$_GET['action'] ? exit : showmessage(L('had_participate'),APP_PATH.'index.php?m=formguide&c=index&a=ok');116行:后页面加上public function ok() {include template('formguide', 'ok');}public function success() {include template('formguide', 'success');}这就是对应的两个提示Dialog四.在首页(调用页)加上<head>与</head>之间Js代码<script language="javascript" type="text/javascript"src="{JS_PATH}dialog.js"></script>Css代码<link href="{CSS_PATH}dialog.css" rel="stylesheet" type="text/css" />(这是phpcmsv9自带的,不建议修改)<link href="{CSS_PATH}/mydialog.css" rel="stylesheet" type="text/css" />(自定义,用来重写它的样式,要放在dialog.css下面)要调用的地方<ahref="javascript:art.dialog({id:'message',iframe:'?m=formguide&c=index&a=show&formi d=16&siteid=1', title:'意见反馈', width:'540', height:'360',drag: false,fixed: true,opacity: .5, lock:true});void(0);"><span>意见反馈</span></a>如要了解更多dialog.js请打1872行有默认配置,参考来填定参数。
phpcmsv9二次开发模板制作常用代码

phpcmsv9二次开发模板制作常用代码phpcms v9二次开发模板制作常用代码001:调用最新文章,带所在版块{pc:get sql="SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url as curl,a.id FROM `v9_news` a, `v9_category` b WHERE a.catid =b.catid ORDER BY `a`.`id` DESC "num="15" cache="300"}{loop $data $r}<h6><font class="cate"><a href="{$r[curl]}">[{$r[catname]}]</a></font><aclass="gray" href="{$r[turl]}" title="{$r[title]}"> {str_cut($r['title'],26)}</a></h6>{/loop}{/pc}====<font class="cate"><a href="{$r[curl]}">[{$r[catname]}]</a></font>所在版块的调用1.截取调用标题长度{str_cut($v[title],36,'')}{str_cut($v['title'],34)} 超出用 ... 代替{str_cut($v['title'],34, '')}超出用代替{str_cut($v['title'],34,'')}超出不用任何字符代替2.格式化时间调用格式化时间 2011-05-06 11:22:33{date('Y-m-d H:i:s',$r[inputtime])}<span class="rt">{date('m-d',$v['inputtime'])}</span>3.多栏目调用&多推荐位调用调用需求:文章范围为59 60 61三个栏目,并且推送到了27 和28两个推荐位;从第三条开始,连续调用7篇文章。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
服务器要求PHP 版本5.2 或更新的版本。
MySQL版本推荐5.0或者更新版本。
模型-视图-控制器(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的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
文件目录结构根目录| – api 接口文件目录| – caches 缓存文件目录| – configs系统配置文件目录| – caches_* 系统缓存目录| – phpcms phpcms框架主目录| – languages 框架语言包目录| – libs 框架主类库、主函数库目录| – model 框架数据库模型目录| – modules 框架模块目录| – templates 框架系统模板目录| – phpsso_server phpsso主目录| – statics 系统附件包| – css系统css包| – images 系统图片包| – js系统js包| – uploadfile 网站附件目录| – admin.php 后台管理入口| – index.php 程序主入口| – crossdomain.xml FLASH跨域传输文件| – robots.txt 搜索引擎蜘蛛限制配置文件| – favicon.ico 系统icon图标URL访问PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
模块访问方法[示例]:/index.php?m=content&c=index&a=show&id=1其中m = content 为模型/模块名称位于phpcms/modules/contentc = index 为控制器名称位于phpcms/modules/content/index.phpa = show为时间名称位于phpcms/modules/content/index.php中show()方法id = 1为其他参数与正常get传递参数形式相同如果我们访问您的域名如:/index.phpphpcms默认路由会定位到content模块的index控制器中的init操作,因为系统在没有指定模块和控制器的时候,会执行默认的模块和操作。
因此下面的URL的结果是相同的:系统还支持URL路由的功能,这些都能够带来其他的url访问效果。
/index.php?m=content&c=index&a=init系统类库与函数库调用1.系统类库位于系统的phpcms/libs/classes目录下面,函数库文件名为*.class.php,其中global.func.php为框架中默认加载,global.func.php中函数可直接使用2.系统函数库位于系统的phpcms/libs/functions目录下面,函数库文件名为*.func.php系统类库调用/*** 加载系统类方法* @param string $classname类名* @param string $path 扩展地址* @paramintger $initialize 是否初始化*/public static function load_sys_class($classname, $path ='', $initialize =1){return self::_load_class($classname, $path, $initialize);}示例:$http = pc_base::load_sys_class('http'); //实例化http类pc_base::load_sys_class('format', '', 0); //调用form类,不进行实例化操作系统函数库调用/*** 加载系统的函数库* @param string $func函数库名*/public static function load_sys_func($func){return self::_load_func($func);}示例:pc_base::load_sys_func('mail'); 调用mail函数包入口程序PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
入口程序是在前期处理用户请求的引导程序。
它是唯一一个可以被最终用户可以直接请求运行的。
phpcms v9的入口程序包含如下几行:index.php<?phpdefine('PHPCMS_PA TH', dirname(__FILE__).DIRECTORY_SEPARATOR);include PHPCMS_PA TH.'/phpcms/base.php';pc_base::creat_app();?>这段代码首先加载了phpcms框架的引导文件base.php,然后它根据指定的配置文件建立了一个Web 应用实例并运行。
模块phpcms v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块。
即url 访问中的m示例:/index.php?m=content那么您访问的就是phpcms/modules/content 这个模块。
如果创建一个,只要在phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
控制器phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。
类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。
控制器类的类名称与控制器文件名必须相同。
如果您创建了一个mytest.php在test模块下,那么我们在浏览器里面输入URL:/index.php?m=test&c=mytest下面是一个控制器类的基本格式,在构建模块部分会具体讲解<?phpdefined('IN_PHPCMS')or exit('No permission resources.');class mytest {function __construct(){}public function init(){echo 'hellpphpcms v9,my name is defalut action';}}?>如果你添加的控制器类继承了其他的类,你要小心你的方法名不要和那个类中的方法名一样了,否则你的方法会覆盖原有的。
命名规范PHPCMS其自身的一定规范。
下面是使用PHPCMS做二次开发中应该遵循的命名规范:类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。
函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。
类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。
数据模型需要以“数据表名称_model.class.php”为形式,类名称与文件名必须相同。
配置文件调用配置文件配置在caches/configs/目录下。
配置文件调用:使用 load_config方法/*** 加载配置文件* @param string $file 配置文件* @param string $key 要获取的配置荐* @param string $default 默认配置。
当获取配置项目失败时该值发生作用。
* @paramboolean $reload 强制重新加载。
*/public static function load_config($file, $key ='', $default ='', $reload =false){static $configs = array();if(!$reload && isset($configs[$file])){if(empty($key)){return $configs[$file];} elseif (isset($configs[$file][$key])){return $configs[$file][$key];}else{return $default;}}$path = CACHE_PATH.'configs'.DIRECTORY_SEPARATOR.$file.'.php';if(file_exists($path)){$configs[$file]= include $path;}if(empty($key)){return $configs[$file];} elseif (isset($configs[$file][$key])){return $configs[$file][$key];}else{return $default;}}示例:调用系统配置中的附件路径$upload_url = pc_base::load_config('system','upload_url');二次开发技巧1.如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"MY_*.php"的形式进行二次开发。