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模型二次开发[高级]概述: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篇文章。
基于PHPCMS V9的留言板系统开发
二、 系统的设计与开发
1、 需求分析
留言板系统的开发主要包含两部分, 一部分是后台的设计
· 56 · 办公自动化杂志
ቤተ መጻሕፍቲ ባይዱ
2015 年 8 月 1 日 Mobile Office Network · Security 总第 308 期
time; 留言审核的状态, 可以命名为 passed; 留言的回复人 、 回复 时间和回复内容, 可以分别命名为 replyer、 replytime、 reply; 记录 留言是否被回复标识, 可以命名为 reply_status; 字段的长度及 其类型可以根据网站的大小, 留言板使用人数来确定。
2015 年 8 月 1 日 总第 308 期 Mobile Office Network · Security
基于 PHPCMS V9 的留言板系统开发
苏红丽
(辽宁金融职业学院 信息技术系
摘 要 关键词
沈阳
110122)
PHPCMS V9 是比较流行的 PHP 开发框架, 已经应用到政府、 教育、 商业各个领域。千篇一律的网站并不能满足个性化的 Phpcms 二次开发 留言板 文献标识码 B 文章编号 150629-7043
3、 创建模块目录
创建好数据表后进行模块的创建, 每一个独立的内容都可 以称之一个模块, 像在线支付、 邮件订阅、 短消息等。而这些模 块在 PHPCMS v9 框架中的模块中, 存储在 phpcms/modules 目录
2、 数据库设计
留言板信息的存储不是放在文件中,而是放在数据库中 的, PHPCMS V9 默认状态下是用 Mysql 数据库来存储信息。本 模块只是存储留言信息, 所以就将信息存在 phpcms 数据库中, 不再进行数据库的建立。留言信息的表名称为 GBook, 留言信 息表要包含与留言相关的信息,包括与网站配置相关的站点 ID, 可以命名为 siteid; 记录留言信息的消息编号, 可以命名为 gid; 留言信息的标题, 可以命名为 title; 记录信息的具体内容, 可以命名为 content; 留言的会员 id, 可以命名为 uid; 留言的会 员姓名, 可以命名为 username; 留言的时间, 可以命名为 input-
phpcms v9学习文档
Phpcms v9学习手册1、添加全局变量我用了SKIN_JS、SKIN_CSS、SKIN_IMG来定义模板的三个文件夹,如果你不喜欢,修改文件中涉及的这三个变量名可自行修改。
第一步:打开phpcms\modules\admin\templates\setting.tpl.php搜索:$("#img_path").formValidator({onshow:"<?php echo L('setting_input').L('setting_img_path')?>",onfocus:"<?php echo L('setting_img_path').L('setting_end_with_x')?>"}).inputValidator({onerror:"<?php echo L('setting_img_path').L('setting_input_error')?>"}).regexValidator({regexp:"(.+)\/$",oner ror:"<?php echo L('setting_img_path').L('setting_end_with_x')?>"});复制代码在其后加入:$("#skin_js").formValidator({onshow:"<?php echo L('setting_input').L('setting_skin_js')?>",onfocus:"<?php echo L('setting_skin_js').L('setting_end_with_x')?>"}).inputValidator({onerror:"<?php echo L('setting_skin_js').L('setting_input_error')?>"}).regexValidator({regexp:"(.+)\/$",onerror :"<?php echo L('setting_skin_js').L('setting_end_with_x')?>"});$("#skin_css").formValidator({onshow:"<?php echo L('setting_input').L('setting_skin_css')?>",onfocus:"<?php echo L('setting_skin_css').L('setting_end_with_x')?>"}).inputValidator({onerror:"<?php echo L('setting_skin_css').L('setting_input_error')?>"}).regexValidator({regexp:"(.+)\/$",onerr or:"<?php echo L('setting_skin_css').L('setting_end_with_x')?>"});$("#skin_img").formValidator({onshow:"<?php echo L('setting_input').L('setting_skin_img')?>",onfocus:"<?php echo L('setting_skin_img').L('setting_end_with_x')?>"}).inputValidator({onerror:"<?php echoL('setting_skin_img').L('setting_input_error')?>"}).regexValidator({regexp:"(.+)\/$",onerr or:"<?php echo L('setting_skin_img').L('setting_end_with_x')?>"});复制代码搜索:<tr><th width="120"><?php echo L('setting_upload_url')?></th><td class="y-bg"><input type="text" class="input-text" name="setconfig[upload_url]" id="upload_url" size="50" value="<?php echo $upload_url?>" /></td></tr>复制代码在其后加入:<tr><th width="120"><?php echo L('setting_skin_js')?></th><td class="y-bg"><input type="text" class="input-text" name="setconfig[skin_js]" id="skin_js" size="50" value="<?php echo $skin_js?>" /></td></tr><tr><th width="120"><?php echo L('setting_skin_css')?></th><td class="y-bg"><input type="text" class="input-text" name="setconfig[skin_css]" id="skin_css" size="50" value="<?php echo $skin_css?>" /></td></tr><tr><th width="120"><?php echo L('setting_skin_img')?></th><td class="y-bg"><input type="text" class="input-text" name="setconfig[skin_img]" id="skin_img" size="50" value="<?php echo $skin_img?>" /></td></tr>复制代码第二步:打开phpcms\modules\admin\functions\global.func.php搜索:if(in_array($k,array('js_path','css_path','img_path','attachment_stat','admin_log','gzip','err orlog','phpsso','phpsso_appid','phpsso_api_url','phpsso_auth_key','phpsso_version','conne ct_enable', 'upload_url','sina_akey', 'sina_skey', 'snda_enable', 'snda_status', 'snda_akey', 'snda_skey', 'qq_akey', 'qq_skey'))) {复制代码改为(也就是添加了'skin_js','skin_css','skin_img',):if(in_array($k,array('js_path','css_path','img_path','skin_js','skin_css','skin_img','attachme nt_stat','admin_log','gzip','errorlog','phpsso','phpsso_appid','phpsso_api_url','phpsso_auth _key','phpsso_version','connect_enable', 'upload_url','sina_akey', 'sina_skey', 'snda_enable', 'snda_status', 'snda_akey', 'snda_skey', 'qq_akey', 'qq_skey'))) {复制代码第三步:打开phpcms\languages\zh-cn\ng.php搜索:$LANG['setting_upload_url'] = '附件URL访问路径';复制代码在其后加入:$LANG['setting_skin_img'] = '模板图片路径';$LANG['setting_skin_js'] = '模板JS路径';$LANG['setting_skin_css'] = '模板CSS路径';复制代码第四步:打开phpcms\base.php搜索:define('APP_PATH',pc_base::load_config('system','app_path'));复制代码在其后加入://模板js、css、img路径define('SKIN_JS',pc_base::load_config('system','skin_js'));define('SKIN_CSS',pc_base::load_config('system','skin_css'));define('SKIN_IMG',pc_base::load_config('system','skin_img'));2、分类信息列表页怎样实现各个栏目的各自的内容function structure_filters_sql($modelid,$cityid='',$catid) { //这里加上$catid $sql = $fieldname = $min = $max = '';$fieldvalue = array();$modelid = intval($modelid);$model = getcache('model','commons');$fields = getcache('model_field_'.$modelid,'model');$fields_key = array_keys($fields);//TODO$sql = "`status` = 99 AND `catid`='$catid'"; //这里也加上,单引变双引你有木有看见,99的反斜杠也不见if(intval($cityid)!=0) $sql .= ' AND `city`=\''.$cityid.'\'';foreach ($_GET as $k=>$r) {if(in_array($k,$fields_key) && intval($r)!=0 && ($fields[$k]['filtertype'] || $fields[$k]['rangetype'])) {if($fields[$k]['formtype'] == 'linkage') {$datas = getcache($fields[$k]['linkageid'],'linkage');$infos = $datas['data'];if($infos[$r]['arrchildid']) {$sql .= ' AND `'.$k.'` in('.$infos[$r]['arrchildid'].')';}} elseif($fields[$k]['rangetype']) {if(is_numeric($r)) {$sql .=" AND `$k` = '$r'";} else {$fieldvalue = explode('_',$r);$min = intval($fieldvalue[0]);$max = $fieldvalue[1] ? intval($fieldvalue[1]) : 999999;$sql .=" AND `$k` >= '$min' AND `$k` < '$max'";}} elseif($fields[$k]['boxtype']=='checkbox' || $fields[$k]['boxtype']=='multiple'){ //这里也改啦$sql .= " AND `$k` LIKE '%,$r,%'"; //为的是复选或多选的筛选} else {$sql .=" AND `$k` = '$r'";}}}return $sql;}复制代码前台调用就要改写了,如下:{php $sql = structure_filters_sql($modelid,$cityid,$catid)}还有,你不要手欠,把pc标签里catid="$catid"去掉,会出事的吆3、修复站群模式下子站点【栏目页】【内容页】采用动态页面时候url 由于APP_PATH 问题导致的内容页url 域名错误指向主站问题问题由来:原小波方案无效,请大家测试/forum.php?mod=viewthread&tid= 270400&highlight=%D5%BE%C8%BA我的修复如下:一、首先修复站群模式下子站点【栏目页】采用动态页面时候url 由于APP_PATH 问题导致的内容页url 域名错误指向主站问题(1.)打开phpcms\modules\admin\category.php找到函数repair436 行注释掉://$url = $this->update_url($catid);//$url = APP_PATH.$url;再下面添加代码://txb 修复站群模式下【栏目页】动态页面时候url 由于APP_PATH 问题导致的内容页url 域名错误问题本帖隐藏的内容$url = $this->update_url($catid);//cat 数组在前面foreach 处定义$txbsiteid=$cat['siteid'];$this->sitedb = pc_base::load_model('site_model');$siteinfo=$this->sitedb->get_one(array('siteid'=>$txbsiteid));$url = $siteinfo['domain'].$url;二、首先修复站群模式下子站点【内容页】采用动态页面时候url 由于APP_PATH 问题导致的内容页url 域名错误指向主站问题(1)、首先打开phpcms\modules\content\classes\url.class.php找到函数show()在91行左右注释掉原代码://txb 此处为原来代码,注释掉换成新修改的!// $url_arr[0] = $url_arr[1] = APP_PATH.$urls;在其下添加//txb 修复站群模式下【内容页】动态页面时候url 由于APP_PATH 问题导致的内容页url 域名错误问题本帖隐藏的内容//txb $category 数组入口处定义,已经获得某栏目siteid$txbsiteid=$category['siteid'];$this->sitedb = pc_base::load_model('site_model');$siteinfo=$this->sitedb->get_one(array('siteid'=>$txbsiteid));$url_arr[0] = $url_arr[1] = $siteinfo['domain'].$urls;最后在绑定的二级域名的根目录下加上index.php文件其内容是:(绑定的二级域名的目录在网站的根目录下)<?phpinclude '../index.php';?>或者是:(绑定的二级域名的目录在网站的默认html文件夹下的文件夹下)<?phpinclude '../../index.php';?>西部数码服务器学习链接:/faq/list.asp?unid=514。
phpcms v9的用户手册
《深入理解PHPCMS V9的用户手册》一、引言在当今信息爆炸的时代,全球信息湾建设已经成为每个企业和个人必不可少的一项工作。
而对于大部分非专业程序员来说,一个好用且功能强大的内容管理系统(CMS)至关重要。
PHPCMS V9作为一款知名的开源CMS系统,其用户手册更是成为了每一个使用者和开发者的必备工具。
本文将深入探讨PHPCMS V9用户手册,带您了解其功能、使用和优势。
二、PHPCMS V9用户手册的基本介绍1. PHPCMS V9是一款什么样的CMS?在介绍用户手册之前,我们首先要了解PHPCMS V9是一款什么样的CMS。
PHPCMS V9是一款完全开源的内容管理系统,具有优秀的模块化、多语言支持、强大的扩展性等特点,适用于各类全球信息湾建设。
2. 用户手册的作用和意义用户手册是PHPCMS V9的必备工具之一,它提供了全面的使用指南和技术支持,帮助用户更好地了解和使用PHPCMS V9。
用户手册不仅提供了基本的功能介绍,还详细说明了各项功能的操作方法和注意事项,对于新手来说,用户手册更是一个不可或缺的学习资料。
三、深度解析PHPCMS V9用户手册1. 用户手册的内容和结构用户手册中包含了丰富的内容,涵盖了PHPCMS V9的各个方面,如安装指南、使用教程、常见问题解答等。
而其结构清晰,内容丰富,非常适合用户快速查阅和学习。
2. 使用技巧和注意事项用户手册中不仅提供了基本的使用教程,还深入介绍了一些使用技巧和注意事项。
这些内容对于用户更深入地了解和熟练掌握PHPCMS V9至关重要。
3. 个性化定制和扩展功能PHPCMS V9用户手册还详细介绍了个性化定制和扩展功能的方法和技巧,帮助用户根据自己的需求对CMS进行定制和扩展,满足不同全球信息湾的需求。
四、总结和展望通过本文的详细介绍,相信您对PHPCMS V9用户手册已经有了更深入的了解。
用户手册作为使用者和开发者的得力助手,能帮助您更好地了解和使用PHPCMS V9,提高全球信息湾建设的效率和质量。
phpcms v9模板代码解析-首页
phpcms v9模板解析
首先来到content模块下面的header.html
1.首页顶部推荐位
对于content下面的position
参数名是否必须默认值说明
posid 是null 推荐位ID
catid 否null 调用栏目ID
thumb 否0 是否仅必须缩略图
order 否null 排序类型
num 是null 数据调用数量
相关查询
Posid 后台-内容-推荐位管理
Catid 后台-内容-栏目管理
2.在分类下面进行查询
这里是取缓存文件里面的东西,具体这个怎么生成的缓存,和专题,研究中?
3.下面是首页导航的代码
对于category
参数名是否必须默认值说明
catid 否0 调用该栏目下的所有栏目,默认0,调用一级栏目$siteid 否 1 默认调用系统站点
order 否null 排序方式、一般按照listorder ASC排序,即栏目的添加顺序如果要使用下级标签,使用get标签调用数据库调出
4.首页左侧头条推荐推荐信息
对应源代码
这个解释和position 一样这里就不多说了
5.首页焦点图推荐
6.下面看到争议这一块
首先找到他的标签
7.首页图片新闻推荐
8.首页顶级栏目循环
这里的代码为
这里的含义是显示一条图文浏览的,显示5条依次下来的信息其中subcat为系统主函数下面的
这里面主要是找缓存文件,其实后台更新栏目后也随即更新了缓存文件9.公告
10.订阅
11.专题页面
这里的elite为是否为推荐
12热点、评论、关注
13.调查问卷,这是后台调用的js文件
14.友情链接。
PHPCMS v9数据表结构
0
0
tinyint(1) unsigned NO tinyint(1) unsigned NO mediumint(8) unsigned NO mediumint(8) unsigned NO int(10) unsigned char(15) tinyint(1) char(32) NO NO NO NO
类型 PRIMARY INDEX INDEX INDEX
字段 id blockid roleid siteid
类型 char(50) char(50) mediumtext
Null PK NO NO
默认
额外
键名 PRIMARY PRIMARY 表 13: v9_category 栏目表 ID 1 2 3 4 5 6 7 8 9 10 11 字段 catid siteid module type modelid parentid arrparentid child arrchildid catname style
varchar(100) mediumtext varchar(100) varchar(30) varchar(100)
NO NO NO NO NO 0 0
mediumint(8) unsigned NO int(10) unsigned mediumtext NO NO
smallint(5) unsignedNO tinyint(1) unsigned NO tinyint(1) unsigned NO varchar(30) varchar(255) NO NO
mediumint(6) unsigned PK varchar(20) varchar(32) smallint(5) varchar(6) varchar(15) int(10) unsigned varchar(40) varchar(50) varchar(255) YES YES YES YES YES YES YES NO NO 0 0
PHPCMS V9二次开发之首页、频道、列表等调用浏览量和评论
PHPCMS V9二次开发之首页、频道、列表等调用浏览量和评论。
Phpcms V9 内容页加上此代码可统计到点击量今日:<spanid="todaydowns"></span>,本周:<span id="weekdowns"></span>,本月:<span id="monthdowns"></span>内容页统计代码:<script language="JavaScript"src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script >其它:一、首页获取数据方法{pc:content action=”lists” catid=”$r[catid]” num=”5″ order=”id DESC” return=”info”}{php $categorys =getcache(‘category_content_’.$siteid,’commons’);}<ul>{loop $info $v}{php $category = $categorys[$v[catid]];}{php $modelid = $category['modelid'];}{php $db = pc_base::load_model(‘hits_model’); $_r =$db->get_one(array(‘hitsid’=>’c-’.$modelid.’-’.$v[id])); $views = $_r[views]; }{php $comment_tag = pc_base::load_app_class(“comment_tag”, “comment”); $comment_total =$comment_tag->count(array(‘commentid’=>’content_’.$v[catid].’-’.$v[id].’-’.$modelid));}<li>·<a href=”{$v['url']}” target=”_blank”title=”{$v['title']}”{title_style($v[style])}>{str_cut($v['title'], 40)}</a> 点击:{$views} 评论:{if$comment_total}{$comment_total}{else}0{/if}</li>{/loop}</ul>{/pc}二、频道页获取数据方法{pc:content action=”lists” catid=”$v[catid]” num=”5″ order=”id DESC”}{loop $data $v}{php $db = pc_base::load_model(‘hits_model’); $_r =$db->get_one(array(‘hitsid’=>’c-’.$modelid.’-’.$v[id])); $views = $_r[views]; }{php $comment_tag = pc_base::load_app_class(“comment_tag”, “comment”); $comment_total =$comment_tag->count(array(‘commentid’=>’content_’.$v[catid].’-’.$v[id].’-’.$modelid));}<li><a href=”{$v[url]}”target=”_blank”{title_style($v[style])}>{$v[title]}</a>点击: {$views}评论数:{if $comment_total}{$comment_total}{else}0{/if}</li>{/loop}{/pc}三、列表取得数据方法{pc:content action=”lists” catid=”$catid” num=”25″ order=”id DESC” page=”$page” moreinfo=”1″}{loop $data $r}{php $db = pc_base::load_model(‘hits_model’); $_r =$db->get_one(array(‘hitsid’=>’c-’.$modelid.’-’.$r[id])); $views = $_r[views]; }{php $comment_tag = pc_base::load_app_class(“comment_tag”, “comment”); $comment_total =$comment_tag->count(array(‘commentid’=>’content_’.$catid.’-’.$r [id].’-’.$modelid));}<li><span class=”rt”>{date(‘Y-m-dH:i:s’,$r[inputtime])}</span>·<a href=”{$r[url]}”target=”_blank”{title_style($r[style])}>{$r[title]}</a> 点击:{$views} 评论数:{if$comment_total}{$comment_total}{else}0{/if}</li>{/loop}{$pages}{/pc}四、推荐位获取数据方法{pc:content action=”position” posid=”2″ order=”listorder DESC” num=”4″}{php $categorys =getcache(‘category_content_’.$siteid,’commons’);}{loop $data $r}{php $category = $categorys[$r[catid]];}{php $modelid = $category['modelid'];}{php $db = pc_base::load_model(‘hits_model’); $_r =$db->get_one(array(‘hitsid’=>’c-’.$modelid.’-’.$r[id])); $views = $_r[views]; }{php $comment_tag = pc_base::load_app_cla ss(“comment_tag”, “comment”); $comment_total =$comment_tag->count(array(‘commentid’=>’content_’.$r[catid].’-’.$r[id].’-’.$modelid));}<h4><a href=”{$r[url]}”title=”{$r[title]}”>{str_cut($r[title],36,”)}</a> 点击:{$views} 评论:{if $comment_total}{$comment_total}{else}0{/if}</h4><p>{if $n==1}<img src=”{thumb($r[thumb],90,60)}” width=”90″ height=”60″/>{/if}{str_cut($r[description],112)}</p><div><hr /></div>{/loop}{/pc}本文由 收集整理。
Phpcmsv9开发留言板
Phpcmsv9开发留⾔板功能⽐较简单,写写为了记住这个过程。
新建⼀张数据表xx_gbook,有以下字段Id int(4) ⾃增长⾮空Name varchar(255) utf-8Phone int(20)Address varchar(255) utf-8Content text(500) utf-8Inputtime int(12)⼀、创建模块存放⽬录在/phpcms/modules/下创建⼀个⽂件夹gbook⽤来存放模块,gbook⽂件下包含三个⽂件夹,classes(模块类库包)、functions(模块函数类包)、templates(模版包,⼀般是后台模版)。
⼆、创建模块控制器类(注意:类名称与控制器⽂件名必须相同)、数据库模型类在gbook⽂件夹下新建⽂件gbook.php,前台不⽤权限控制,后台类要有权限控制,所以后台新建类要加载并继承admin,写法 pc_base::load_app_class('admin','admin',0); class gbook extends admin(){} 另外控制器的⽅法名不要和该类中的⽅法名⼀样数据库模型类,在/phpcms/model/⽬录下新建gbook_model.class.php⽂件⽤来加载xx_gbook 表。
附上我写的⼀个⼩例⼦Gbook_model.class.php <?php defined('IN_PHPCMS') or exit('No permission resources.');pc_base::load_sys_class('model','',0); //加载公⽤模型类class gbook_model extends model{ //创建新的数据模型类public function __construct(){$this->db_config = pc_base::load_config('database'); //数据库连接$this->db_setting = 'default'; //连接设置$this->table_name = 'gbook'; //数据表名parent::__construct();}}?>Gbook.php<?php defined('IN_PHPCMS') or exit('No permission resources.'); //判断是不是有控制器pc_base::load_app_class('admin','admin',0); //加载admin类class gbook extends admin{ //创建新类并继承admin的属性public function __construct(){$this->db_gbook =pc_base::load_model('gbook_model'); //加载数据库模型类}//默认列表显⽰留⾔public function init(){//分页设置$page = isset($_GET['page']) &&intval($_GET['page']) ? intval($_GET['page']) : 1;//分页条数$pageSize = 20;//查询语句$gbookList = $this->db_gbook->listinfo(array(),'inputtimeDESC',$page,$pageSize);//模版显⽰include $this-> admin_tpl("gbook_list");}//删除留⾔public function del(){//删除语句if ($this->db_gbook->delete(array('id'=>$_GET['id']))) {echo 1;}else{echo '';}}}?>Gbook_list.tpl.php <?php defined('IN_ADMIN') or exit('No permission resources.'); include $this->admin_tpl('header','admin');?> <div class="pad-10"> <div class="explain-col"> <?php echo "管理⼈员根据浏览者的留⾔,提取相关的信息。
[PHPCMSV9二次开发]自定义字段模型-添加字段类型
[PHPCMSV9⼆次开发]⾃定义字段模型-添加字段类型步骤/⽅法1. 打开phpcms\modules\content\fields⽬录,复制⽂件夹downfiles,并改名为textgroups。
2. 打开phpcms\modules\content\fields\fields.inc.PHP⽂件,增加字段类型:'textgroups'=>'多⽂件上传',3. 打开phpcms\modules\content\fields\textgroups⽬录(第⼀步复制的⽂件夹),修改以下⽂件:4. form.inc.phpfunction textgroups($field, $value, $fieldinfo) {extract(string2array($fieldinfo['setting']));$list_str = '';if($value) {$value = string2array(html_entity_decode($value,ENT_QUOTES));if(is_array($value)) {foreach($value as $_k=>$_v) {$list_str .= "<div id='textsgroups{$_k}'> <input type='text' name='{$field}_fx[]' value='{$_v[fx]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_fj[]' value='{$_v[fj]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_cx[]' value='{$_v[cx]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_kd[]' value='{$_v[kd]}' style='width:100px;' class='input-text'> <input type='text' name='{$field}_vip[]' value='{$_v[vip]}' style='width:100px;' class='input-text'> <ahref=\":remove_div('textsgroups{$_k}')\">".L('remove_out')."</a></div>";}}}$string ='<script type=text/javascript>function add_textsfile(returnid) {var ids = parseInt(Math.random() * 10000);var str = "<li id=\'textsgroups"+ids+"\'> <input type=\'text\' name=\'"+returnid+"_fx[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_fj[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\'name=\'"+returnid+"_cx[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_kd[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <input type=\'text\' name=\'"+returnid+"_vip[]\' value=\'\' style=\'width:100px;\' class=\'input-text\'> <a href=\"javascript:remove_div(\'textsgroups"+ids+"\')\">Remove</a> </li>";$(\'#\'+returnid).append(str);}</script>';$string .= '<input name="info['.$field.']" type="hidden" value="1"><fieldset class="blue pad-10"><legend>'.L('mm_fxlist').'</legend><div id="tt"><input type="text" value="'.L('mm_fx').'" readonly style="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_fj').'" readonly style="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_cx').'" readonly style="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_kd').'" readonly style="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_lyj').'" readonly style="width:100px;border:0;" class="input-text"></div>';$string .= $list_str;$string .= '<ul id="'.$field.'" class="picList"></ul></fieldset><div class="bk10"></div>';$string .= $str."<input type=\"button\" class=\"button\" value=\"".L('mm_addfx')."\" onclick=\"add_textsfile('{$field}')\">";return $string;}5. 修改input.inc.phpfunction textgroups($field, $value) {$hotel = $_POST[$field.'_fx'];$hotel_fj = $_POST[$field.'_fj'];$hotel_cx = $_POST[$field.'_cx'];$hotel_kd = $_POST[$field.'_kd'];$hotel_vip = $_POST[$field.'_vip'];$array = $temp = array();if(!empty($hotel)) {foreach($hotel as $key=>$hote) {$temp['fx'] = $hote;$temp['fj'] = $hotel_fj[$key];$temp['cx'] = $hotel_cx[$key];$temp['kd'] = $hotel_kd[$key];$temp['vip'] = $hotel_vip[$key];$array[$key] = $temp;}}$array = array2string($array);return $array;}6. 修改的output.inc.phpfunction textgroups($field, $value) {return string2array($value);}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"的形式进行二次开发。