PHPCMSV9控制器模块开发文档
- 格式:docx
- 大小:20.06 KB
- 文档页数:10
服务器要求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设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
下面我们将通讲解一个留言本实例,来帮助你更好的掌握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使用手册Phpcms使用手册目录1.简介 (2)2.功能使用 (2)2.1我的面板 (2)2.1.1修改个人信息 (2)2.1.2修改密码 (3)2.1.3生成首页 (3)2.2设置 (4)2.2.1相关设置 (4)2.2.2管理员设置 (7)2.3模块 (11)2.3.1数据源 (11)2.4内容 (14)2.4.1内容发布管理 (14)2.4.2发布管理 (22)2.4.3内容相关设置 (22)2.5用户 (28)2.6界面 (28)2.6.1模板风格 (28)2.6.2标签向导 (30)2.7扩展 (30)2.8phpsso (30)1.简介PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发。
V9采用OOP(面向对象)方式进行基础运行框架搭建。
模块化开发方式做为功能开发形式。
框架易于功能扩展,代码维护,优秀的二次开发能力,可满足所有网站的应用需求。
5年开发经验的优秀团队,在掌握了丰富的WEB开发经验和CMS 产品开发经验的同时,勇于创新追求完美的设计理念,为全球多达10万网站提供助力,并被更多的政府机构、教育机构、事业单位、商业企业、个人站长所认可。
V9在保留2008版的特点的同时,对新版本作出重大的创新,以期待全新的PHPCMS 系统服务更多的用户。
2.功能使用2.1我的面板2.1.1修改个人信息写入你要修改的数据:真实姓名,E-mail,语言。
提交后,如提示成功则可完成修改操作,否则提示错误消息。
如下图所示:2.1.2修改密码录入你的旧密码和修改的密码。
提交后,如提示成功则可完成修改操作,否则提示错误消息。
如下图所示:2.1.3生成首页如下图所示:点击“生成首页”。
如提示成功则可完成修改操作,否则提示错误消息。
成功信息:同时你也可以通过:当前位置菜单栏——>生成首页;进行生成首页。
2.2设置2.2.1相关设置2.2.1.1站点管理1、添加站点V9系统支持多站点发布,添加站点时可选择发布点,并且可以选择seo设置,站点模版,上传附件设置等选项。
控制器模块开发文档= 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模型二次开发主要分为底层模型开发,即代码级的模型开发;其次,是可视化的模型开发,即通过登录系统后台添加模型。
第一种模型开发对技术要求很高,但是,能实现很多PHPCMS v9没有实现或者不能实现的功能。
第二种模型开发完全隐藏了技术的实现,操作简单,使用方便,在没有特殊功能的时候,这个是首先。
我们今天先讲第二种,可视化的模型开发。
假如,现在我们有一个产品展示功能。
要显示的信息如下:*)产品名称*)产品价格*)出厂时间*)规格参数*)配件列表*)产品图片然后,PHPCMS v9提供的文章模型、图片模型、下载模型根本不能满足我们的这个需求。
此时,我们就会涉及到添加模型的操作。
1、登录系统后台,进入导航“内容”----》"管理模型"然后,在页面的右边找到“添加模型”,点击进入添加模型:模型名称必须填写,当我们在添加栏目的时候就可以选择以这个名称命名的模型了。
模型表键名也必须填写,这个将会在数据库里面有二张表对应,假设此时的表前缀是:v9_则对应的两张表名为:v9_products、v9_products_data2、点击确定创建好自定义的“产品模型”之后,点击“字段管理”点击“字段管理”之后,在弹出的页面里面进行字段的禁用、删除、添加等操作。
比如:添加产品名称、产品价格、产品规格、出厂时间等字段。
删除:阅读收费、允许评论、分页方式、相关文章等字段。
禁用:关键词、推荐位等字段。
删除字段与禁用字段都很方便快捷,现在来谈谈添加字段。
在点击“字段管理”进入页面后,左上角会有一个“添加字段”的功能。
点击“添加字段”进入页面。
如图:我们以添加一个是否显示产品的功能字段,那么在字段类型那里可以选择“选项”;由于,我们会经常使用这个字段进行查询,所以,我们在“作为主表字段”设置为是;字段名设置为isshows,这个地方的字段名对应表中的v9_products表中的字段,添加字段完成之后,可以在这个表中看得出来。
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 = ''; //表前缀 //数据表名该类还定义了通用的数据库操作函数。
[PHPCMS V9二次开发]自定义字段模型-文本组∙浏览: 365∙更新: 2012-03-08 11:44举报作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
PHPCMS V9,我们在做作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
PHPCMS V9,我们在做类似于酒店房型等类型的时候,需要用到文本组字段模型,但PHPCMS并未提供该模型。
如下图所示效果:展示效果如下:步骤/方法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'> <a href=\"javascript: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\'> <ahref=\"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').'" readonlystyle="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_fj').'" readonlystyle="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_cx').'" readonlystyle="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_kd').'" readonlystyle="width:100px;border:0;" class="input-text"><input type="text" value="'.L('mm_lyj').'" readonlystyle="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.更新后台缓存。
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、添加全局变量我用了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的用户手册》一、引言在当今信息爆炸的时代,全球信息湾建设已经成为每个企业和个人必不可少的一项工作。
而对于大部分非专业程序员来说,一个好用且功能强大的内容管理系统(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模板解析
首先来到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二次开发及使用中各类问题结集合解决方案安装使用1、栏目所属模型的修改、合并、删除?修改栏目所属模型前,先清空该栏目的内容。
合并?呵呵,自己动手批量转移内容不就得了,注意:必须是相同模型的栏目才可以转移。
删除:后台-内容管理-栏目管理,重新统计栏目数据更新栏目缓存2、后台登陆不上,提示用户名不能为空试试清除cache文件夹下的error_log.php3、首页登录直接跳到会员中心,改成其它在根目录下找到如下位置phpcms\modules\member\index.php,修改569行代码为1.$forward = isset($_POST['forward']) && !empty($_POST['forward']) ?urldecode($_POST['forward']) : 'index.php';4、后台锁屏模版样式phpcms\modules\admin\templates\index.tpl.php 36行左右5、整合Ucenter6、网站域名迁移7、首页登录框的实现8、更换了网站地址,会员无法登陆换地址,需要修改 caches\configs\system.php 文件\phpsso_server\caches\configs\system.php 文件也要改9、数据库用户名和密码修改,数据库连接文件在哪里\caches\configs\database.php10、不想开户缩略图功能不要选择自动截取第一张做为缩略图就行了.在模型字段,缩略图中设置11、发布了栏目,首页的导航栏不显示12、火车头采集时,加入[page]分页符时,不分页问题火车头一般都有接口,所有参数都要在接口上指定才行。
比如你在后台内容编辑器中设置了默认为手动分页。
那么,并不意味着火车头在发布时,也会帮你手动分页的。
PHPCMS二次开发流程(实例)如下图是官方文档给出的phpcms二次开发的流程:本文以创建一个答题模块为实例,进行逐一讲解。
创建数据库和数据表:本模块是在phpcms v9框架上开发的,但不使用phpcms数据库,例如这里我新建一个数据库,名为:yixin,所有表默认前缀yx_。
新建表:yx_user表yx_user栏目名称字段名类型可否为空说明用户编号userid int N 主键、AI 用户名username varchar(20) N用户密码password varchar(32) N用户昵称nickname varchar(20) Ndatetime N注册时间regtime注册ip regip varchar(15) N上次登录时间lasttime datetime N 默认为:0000-00-0000:00:00上次登录ip lastip varchar(15) N 默认:0 登录次数loginnum smallint N 默认:1 用户邮箱email varchar(32) N用户组类型groupid tinyint N用户状态status tinyint N 默认:1 用户答对题数rightnum smallint N 默认:0 用户真实姓名realname varchar(50) Y 默认:0CREATE TABLE`yx_user`(`userid`INT(11)NOT NULL AUTO_INCREMENT,`username`VARCHAR(20)NOT NULL,`password`VARCHAR(32)NOT NULL,`nickname`VARCHAR(20)NOT NULL,`regtime`DATETIME NOT NULL,`regip`VARCHAR(15)NOT NULL,`lasttime`DATETIME NOT NULL DEFAULT'0000-00-00 00:00:00',`lastip`VARCHAR(15)NOT NULL DEFAULT'0',`loginnum`SMALLINT(6)NOT NULL DEFAULT'1',`email`VARCHAR(32)NOT NULL,`groupid`TINYINT(4)NOT NULL,`status`TINYINT(4)NOT NULL DEFAULT'1',`realname`VARCHAR(50)NOT NULL DEFAULT'0',`rightnum`SMALLINT(6)NOT NULL DEFAULT'0',PRIMARY KEY(`userid`))ENGINE=MYISAM;新建表:yx_question表yx_question栏目名称字段名类型可否为空说明题目编号questionid int N 主键、AI题目内容content mediumtext N题集setid int N 默认为:0正确选项answer0 varchar(50) N错误选项1 answer1 varchar(50) N错误选项2 answer2 varchar(50) N错误选项3 answer3 varchar(50) N答案说明description varchar(50) Y 默认:0添加日期addtime datetime N出题人userid int N与yx_user表的userid关联审核人adminid int N 默认为:0,与yx_admin表的adminid关联审核时间verifytime datetime N题目状态status tinyint N 默认为:0CREATE TABLE`yx_question`(`questionid`INT(11)NOT NULL AUTO_INCREMENT,`content`MEDIUMTEXT NOT NULL,`setid`INT(11)NOT NULL DEFAULT'0',`answer`VARCHAR(50)NOT NULL,`answer1`VARCHAR(50)NOT NULL,`answer2`VARCHAR(50)NOT NULL,`answer3`VARCHAR(50)NOT NULL,`description`VARCHAR(50)NOT NULL DEFAULT'0',`addtime`DATETIME NOT NULL,`userid`INT(11)NOT NULL,`adminid`INT(11)NOT NULL DEFAULT'0',`verifytime`DATETIME NOT NULL DEFAULT'0000-00-00 00:00:00',`status`TINYINT(4)NOT NULL DEFAULT'0',PRIMARY KEY(`questionid`))ENGINE=MYISAM新建表:yx_question_set表yx_question_set栏目名称字段名类型可否为空说明题集编号setid int N 主键、AI 题集名称setname varchar(50) N题集描述description text N题集状态enabled tinyint(1) N 0:不可用;1:可用题集题数questionnum smallint N 默认:0CREATE TABLE`yx_question_set`(`setid`INT(11)NOT NULL AUTO_INCREMENT,`setname`VARCHAR(50)NOT NULL,`description`TEXT NOT NULL,`enabled`TINYINT(1)NOT NULL DEFAULT'0',`questionnum`SMALLINT(6)NOT NULL DEFAULT'0',PRIMARY KEY(`setid`))ENGINE=MYISAM新建表:yx_user_select_set表yx_user_select_set栏目名称字段名类型可否为空说明编号id int N 主键、AI 用户编号userid int N题集编号setid int NCREATE TABLE`yx_user_select_set`(`id`INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `userid`INT NOT NULL,`setid`INT NOT NULL)ENGINE=MYISAM;新建表:yx_user_answer_record表yx_user_answer_record栏目名称字段名类型可否为空说明记录编号id int N 主键、AI问题编号questionid int N 与yx_question表的questionid关联答题结果check tinyint N 0:错误;1:正确答题人userid int N 与yx_user表的userid关联答题时间answertime datetime NCREATE TABLE`yx_user_answer_record`(`id`INT NOT NULL AUTO_INCREMENT PRIMARY KEY,`questionid`INT NOT NULL,`check`TINYINT NOT NULL,`userid`INT NOT NULL,`answertime`DATETIME NOT NULL)ENGINE=MYISAM;新建表:yx_admin表yx_admin栏目名称字段名类型可否为空说明管理员编号adminid int N 主键、AI管理员名adminname varchar(20) N管理员密码password varchar(32) N管理员类型roleid smallint N 默认:0上次登录时间lasttime datetime N 默认:0000-00-0000:00:00 上次登录ip lastip varchar(15) N 默认:0管理员邮箱email varchar(40) N 默认:0管理员真实姓名realname varchar(50) NCREATE TABLE`yx_admin`(`adminid`INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `adminname`VARCHAR(20)NOT NULL,`password`VARCHAR(32)NOT NULL,`roleid`SMALLINT NOT NULL DEFAULT'0',`lasttime`DATETIME NOT NULL DEFAULT'0000-00-00',`lastip`VARCHAR(15)NOT NULL DEFAULT'0',`email`VARCHAR(40)NOT NULL DEFAULT'0',`realname`VARCHAR(50)NOT NULL)ENGINE=MYISAM;新建表:yx_admin_role表yx_admin_role栏目名称字段名类型可否为空说明类型编号roleid smallint N 主键、AI 类型名称rolename varchar(50) N类型描述description text N类型状态enabled tinyint(1) N 0:不可用;1:可用CREATE TABLE`yx_admin_role`(`roleid`INT NOT NULL AUTO_INCREMENT PRIMARY KEY,`rolename`VARCHAR(50)NOT NULL,`description`TEXT NOT NULL,`enabled`TINYINT(1)NOT NULL)ENGINE=MYISAM;创建模块目录:PHPCMS v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块,如果要创建一个模块,只要在phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
控制器模块开发文档= 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()方法。
* Id = 3为参数,和普通URL参数相同2.2 定义默认控制器当你使用localhost访问的时候,phpcms会默认加载config/route.php配置文件来加载默认的控制器:return array('default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),);这里数组里面的m,v,c则问默认的模块,控制器,和方法。
你可以重新定义它们。
* 同时你也可以自己定义最后默认的参数,即data属性,data是一个二维的数组,可以设置POST和GET的默认参数,分别对应PHP中$_POST和$_GET两个超级全局变量。
* 你可以额使用$_POST['cid']来得到下面POST中的数组的默认值。
<?phpreturn array('default' =>array('m'=>'phpcms','c'=>'index','a'=>'init','data'=>array('POST'=>array('cid'=>'1'),'GET'=>array('contentid'=>'1'))));?>* 外部程序POST了一个变量cid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所设置的1。
* 注意:data中的所设置的参数等级比较低。
如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。
2.3 数据库配置在本地搭建环境或者系统部署到服务器都需要进行数据库的重新配置,PHPCMS提供了单独的数据库配置文件,方便配置数据库配置。
打开PHPCMS数据库配置文件:caches/configs/database.phpreturn array ('default' =>array ('hostname' =>'localhost','database' =>'ichexian_v4','username' =>'root','password' =>'','tablepre' =>'rrb_','charset' =>'utf8','type' =>'mysql','debug' =>true,'pconnect' => 0,'autoconnect' => 0),);配置名称释义备注Hostname服务器名称本地localhostDatabase数据库名称Username数据库用户名Password数据库密码Tablepre数据库前缀可以为任意字符串Charset数据库字符集Type数据库类型比如Mysql神马的Debug是否开启错误提示上线后需要关闭Pconnect是否永久链接数据库0:否,1:是autoconnect是否自动链接* PHPCMS还提供自己定义拓展数据库配置。
数据库配置信息为二维数组,默认为default,自行拓展的数据库配置只要结构和default一致即可:例如:return array ('default' =>array ('hostname' =>'localhost','database' =>'ichexian_v4','username' =>'root','password' =>'','tablepre' =>'rrb_','charset' =>'utf8','type' =>'mysql','debug' =>true,'pconnect' => 0,'autoconnect' => 0),);return array ('mydatabase' =>array ('hostname' =>'10.01.125.1','database' =>'hahaha','username' =>'leyuxinsi','password' =>'123456','tablepre' =>'leyu_','charset' =>'gbk','type' =>'mysql','debug' =>true,'pconnect' => 0,'autoconnect' => 0),);2.4 系统配置系统相关配置信息在文件caches/configs/system.php文件中,里面有详细的注释信息。
第三章控制器命名规范3.1 PHPCMS硬性规定:* 类文件名必须以.class.php为后缀,然后将类文件放在该模块的classes文件夹内。
比如在content模块内需要一个html类,则该html类文件名必须为html.class.php,该文件的存储路径为content/classes/html.class.php* 函数文件需要以.func.php为后缀,例如mail.func.php。
* 类名和文件名一致,例如phpcmsapp类的文件命名是phpcmsapp.class.php。
3.2 车险无忧代码编写规范3.2.1 规范目的:* 提高程序员工作效率和代码利用率。
* 便于所有程序员了解任何人编写的代码,快速弄清程序状况。
* 便于新来的同事快速的适应环境。
* 防止php开发人员犯同样的错误。
* 减少php程序员出错概率。
3.2.2 适用范围:所有车险无忧开发人员,程序设计人员,包含程序测试人员。
3.2.3 注释* 编写代码期间注释量必须达到总程序量的15%。
* 每个模块最上端必须说明模块名称、功能描述、作者以及版本号等信息。
* 每个过程、函数、方法等开头必须注释功能、参数、返回值等信息,参数必须带上类型。
* 变量定义的上一行在适当情况下应当注明单行注释。
* 在复杂程序或者关键算法部分必须给出适当的注释。
3.2.4控制器目录控制器的目录存储必须完全遵守PHPCMS的目录存储规则。
* Modules目录下建立的一级目录为模块。
* 在模块下的classes文件夹中一般存放该模块下的类库包。
* 在模块下的functions文件夹中一般存放该模块下的函数库包、* 在模块下的templates文件夹中存放带有权限控制的模板,一般为后台模板。
* 前台的模板存放于phpcms/templates/default目录下的文件夹中,default包为默认的模板风格包,你也可以自定义模板风格。
Phpcms/templates/self* 在模块下建立的文件为控制器。
3.2.5命名方式所有类、方法、变量命名均遵循Linux C命名规范:所有单词字母均为小写,不同单词之间使用(_)短下划线来连接,名词尽量使用单词的组合,其含义必须简洁明了。