明说PHPCMS
PHPCMS简介
功能(用来做什么?)
CMS是什么?
CMS: “Content Management System"的缩写,意为"内容管理系统”。
PHPCMS是众多CMS(内容管理系统)中的一款,该系统采用 PHP5+MYSQL 做为技术基础进行开发。采用 OOP(面向对象)方式进行多层架构设计, 模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,二次开发,提供大中型网站的内容管理系统解决方案。
简单的说,如果你需要自己开发一套网站,你的网站主要是做内容展示,不论是文字还是图片,或者是视频等,比较便捷的方法就是使用一套成熟的CMS来解决(本质就是一个软件或者应用),快捷高效,居家必备之良品。而PHPCMS就满足这个需求,简单的操作,不用撸代码也实现大部分要求。即使是程序员也可以偷个懒,节省体力和为数不多的头发。
适用人群
文艺青年,拥有一个自己的空间;
学生党,兴趣爱好使之然;
有需求的程序员,工作内容…
公司Boss,做官网,做门户,做需求…
安装
安装准备
1.下载:打开官方网站
地址: http://www.phpcms.cn/, 进入软件下载频道 http://soft.phpcms.cn/ 在程序下载中找到 PHPCMS 软件下载。如果没有找到,可以在官网论坛里找相关更新的帖子等。正式版:http://www.phpcms.cn/html/2010/phpcms_1229/51.html 。
安装环境
2.安装环境
PHPCMS 具备跨平台特性,可以运行于 Linux/FreeBSD/Unix 及微软Windows 2000/2003 等各种操作系统环境下。
简单一点的操作,下载一个集成环境包,在本地搭建服务器,例如wamp,phpstudy等,一键安装,快捷方便,其中环境版本默认即可。
安装步骤
3.phpcms安装步骤
- 以phpstudy集成环境为例,将下载的安装包解压在服务器www根目录下,将install_package 目录下面的文件复制到www根目录下;
- 在浏览器中访问本目录:如localhost/install_package ,进入如下安装页面
- 中间的步骤默认选择,省略到这一步,注意数据库账号密码的匹配以及字符集的匹配
- 通过这一步就安装完成了,之后登陆后台,进行操作。
特点
- 站群系统
所谓站群,是指建立在统一标准、统一技术构架基础之上,分级管理,分级维护,信息可以实现基于特定权限共享呈送的网站集合。并不是把很多个网站集中在一起就可以称得上是站了,一定是要:统一,分级管理,信息共享,单点登录才可以。站群实现了技术标准统一,能够互联互通,实行集群化管理,相对一致的网站运行和服务规范。 - 多发布点
PHPCMS V9 内置发布点功能,可以将同一或者多个站点分别发布到不同服务器上, 各发布点绑定不同域名, 实现多域名访问和服务器集群部署,加强了网站的负载能力。 - 模块化开发方便扩展
系统引入模块式开发理念,内置功能模块可自由地安装与卸载, V9 特别设计的二次开发扩展方式,在不改变核心程序本身代码的同时,也可订制或自行开发新功能,扩展新的功能。 - 数据表分离
V9 数据模型功能,允许用户把不同的数据表,分离到不同的数据库服务器上。以实现负载的分离,更加符合大访问量网站的需求。为用户提供更好的用户体验。
简单的说,系统功能齐全,模板方便加载和更改,可以全方位支持常规需求。整个系统而言,界面清新,操作简单,可自定义模块,是一款成熟的CMS。
模块分析
目录结构
PHPCMS V9 的各个目录层次清晰、功能分明,其主要目录结构如下表所示:
根目录
| – api 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 图标
目录分析:主要用到的模块在/phpcms/model之中,可以根据需要在后台增加模块或者手动复制文件夹,根据需求新增模块。
常用模块
admin(后台模块)
后台可视化操作,对整个站点进行管理,包括站点管理、基本设置、安全配置等,有模块、内容、用户、界面、扩展、sso等栏目,可方便操作。
代码目录:/phpcms/model/admin
content(内容模块)
内容模块即文章功能,是系统的主要内容模型之一, V9 系统在之前 PHPCMS SP 系列系统功能的基础上做了更进一步优化及功能上的创新,简化了一些文章发布时的操作流程。在后台内容列表中可以对内容进行单个或批量操作和管理。
代码目录:/phpcms/model/centent
member(会员模块)
随着网站的发展会员功能以及是网站中必不可分的一部分。会员功能的存在对于一个网站提高网站本身对用户的粘合度。随着会员功能的逐渐发展,对于会员功能的发展也更为不仅仅只支持会员注册,会员登录,会员修改密码,会员找回密码等基本功能。现在已经发展成为一个能够支持多系统整合,支持多种会员模型存在的一个复杂且实用的模块。
代码目录:/phpcms/model/member
原理分析
MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
PHPCMS中同样也应用的这种业务逻辑,在一个模块中
模块访问方法[示例]:
www.yourdomain.com/index.php?m=content&c=index&a=show&id=1
参数名称 | 描述 | 位置 |
---|---|---|
m | 模型/模块名称 | phpcms/modules 中模块目录名称 |
c | 控制器名称 | phpcms/modules/模块/*.php 文件名称 |
a | 事件名称 | phpcms/modules/模块/*.php 中方法名称 |
其中
m = content 为模型/模块名称位于 PHPCMS/modules/content
c = index 为控制器名称位于 PHPCMS/modules/content/index.php
a = show 为事件名称位于 PHPCMS/modules/content/index.php 中 show()方法
id = 1 为其他参数与正常 get 传递参数形式相同
实例分析
简单的一个内容Demo,部分代码分析
control代码
public function index() {
$memberinfo = $this->memberinfo;
$grouplist = getcache('grouplist');
$priv_db = pc_base::load_model('category_priv_model'); //加载栏目权限表数据模型
//数据传入
if(isset($_POST['dosubmit'])) {
//数据处理
//领导人简介字段入库前调整
$pre_leader_desc = array();
foreach ($_POST['info']['company_leader_desc'] as $k => $v) {
if(trim($v)){
$pre_leader_desc[] = $v;
}
}
$catid = intval($_POST['info']['catid']);
//加载模型
$this->content_db = pc_base::load_model('content_model');
$this->content_db->set_model($modelid);
$table_name = $this->content_db->table_name;
$fields_sys = $this->content_db->get_fields();
$this->content_db->table_name = $table_name.'_data';
$fields_attr = $this->content_db->get_fields();
$fields = array_merge($fields_sys,$fields_attr);
$fields = array_keys($fields);
$info = array();
foreach($_POST['info'] as $_k=>$_v) {
if($_k == 'content') {
$info[$_k] = remove_xss(strip_tags($_v, '<p><a><br><img><ul><li><div>'));
} elseif(in_array($_k, $fields)) {
$info[$_k] = new_html_special_chars(trim_script($_v));
}
}
//数据入库
$info['username'] = $memberinfo['username'];
if(isset($info['title'])) $info['title'] = safe_replace($info['title']);
$this->content_db->siteid = $siteid;
$id = $this->content_db->add_content($info);
//缓存结果
$model_cache = getcache('model','commons');
$infos = array();
foreach ($model_cache as $modelid=>$model) {
if($model['siteid']==$siteid) {
$datas = array();
$this->content_db->set_model($modelid);
$datas = $this->content_db->select(array('username'=>$memberinfo['username'],'sysadd'=>0),'id,catid,title,url,username,sysadd,inputtime,status',100,'id DESC');
if($datas) $infos = array_merge($infos,$datas);
}
}
setcache('member_'.$memberinfo['userid'].'_'.$siteid, $infos,'content');
//缓存结果 END
//跳转首页
showmessage(L('contributors_success'), APP_PATH.'index.php?m=member&siteid=1');
}
model代码
/**
* 添加内容
*
* @param $datas
* @param $isimport 是否为外部接口导入
*/
public function add_content($data,$isimport = 0) {
if($isimport) $data = new_addslashes($data);
$this->search_db = pc_base::load_model('search_model');
$modelid = $this->modelid;
require_once CACHE_MODEL_PATH.'content_input.class.php';
require_once CACHE_MODEL_PATH.'content_update.class.php';
$content_input = new content_input($this->modelid);
$inputinfo = $content_input->get($data,$isimport);
$systeminfo = $inputinfo['system'];
$modelinfo = $inputinfo['model'];
if($data['inputtime'] && !is_numeric($data['inputtime'])) {
$systeminfo['inputtime'] = strtotime($data['inputtime']);
} elseif(!$data['inputtime']) {
$systeminfo['inputtime'] = SYS_TIME;
} else {
$systeminfo['inputtime'] = $data['inputtime'];
}
//读取模型字段配置中,关于日期配置格式,来组合日期数据
$this->fields = getcache('model_field_'.$modelid,'model');
$setting = string2array($this->fields['inputtime']['setting']);
extract($setting);
if($fieldtype=='date') {
$systeminfo['inputtime'] = date('Y-m-d');
}elseif($fieldtype=='datetime'){
$systeminfo['inputtime'] = date('Y-m-d H:i:s');
}
if($data['updatetime'] && !is_numeric($data['updatetime'])) {
$systeminfo['updatetime'] = strtotime($data['updatetime']);
} elseif(!$data['updatetime']) {
$systeminfo['updatetime'] = SYS_TIME;
} else {
$systeminfo['updatetime'] = $data['updatetime'];
}
$inputinfo['system']['username'] = $systeminfo['username'] = $data['username'] ? $data['username'] : param::get_cookie('admin_username');
$systeminfo['sysadd'] = defined('IN_ADMIN') ? 1 : 0;
//主表
$tablename = $this->table_name = $this->db_tablepre.$this->model_tablename;
$id = $modelinfo['id'] = $this->insert($systeminfo,true);
$this->update($systeminfo,array('id'=>$id));
$this->table_name = $tablename;
$this->update(array('url'=>$urls[0]),array('id'=>$id));
//合并后,调用update
$merge_data = array_merge($systeminfo,$modelinfo);
$merge_data['posids'] = $data['posids'];
$content_update->update($merge_data);
}
//更新附件状态
if(pc_base::load_config('system','attachment_stat')) {
$this->attachment_db = pc_base::load_model('attachment_model');
$this->attachment_db->api_update('','c-'.$systeminfo['catid'].'-'.$id,2);
}
//生成静态
if(!$isimport && $data['status']==99) {
//在添加和修改内容处定义了 INDEX_HTML
if(defined('INDEX_HTML')) $html->index();
if(defined('RELATION_HTML')) $html->create_relation_html($catid);
}
return $id;
}
view代码
{template 'content', 'header'}
{template 'content','nav'}
<link href="{CUSTOM_STATIC_PATH}css/webuploader.css" rel="stylesheet">
<script type="text/javascript">
var charset = '{CHARSET}';
var uploadurl = '{php echo pc_base::load_config('system ','upload_url ')}';
</script>
<!-- 完善信息开始 -->
<div class="con-wrap">
<form name="form-msg" class="form-msg" id="qymsg-form" action="" method="post">
<input type="hidden" name="info[catid]" value=9>
<div class="tit">信息</div>
<div class="form-group">
<label for="title">全称</label>
<input type="text" class="input-lg form-control" id="title" name="info[title]" value="{$memberinfo[username]}">
</div>
<input name="forward" type="hidden" value="{HTTP_REFERER}">
<input name="id" type="hidden" value="{$id}">
<button type="submit" name="dosubmit" class="form-btn">保 存</button>
</form>
</div>
<!-- 完善信息结束 -->
<script src="{STATIC_PATH}369_statics/js/bootstrapValidator.min.js"></script>
<script src="{CUSTOM_STATIC_PATH}js/webuploader.min.js"></script>
{template 'content', 'footer'}
其中相关的语法及知识,可查阅相关资料。
参考资料:
PHPCMS V9白皮书.pdf
PHPCMS V9产品开发权威指南.pdf
PHPCMS V9用户手册.chm
百度百科
声明:仅供复盘积累,其中知识多参考官方文档,若有个人理解错误之处,忘大佬们海涵,欢迎拍砖。交流微信Flylivepmm。