明说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 ,进入如下安装页面Alt
  • 中间的步骤默认选择,省略到这一步,注意数据库账号密码的匹配以及字符集的匹配在这里插入图片描述
  • 通过这一步就安装完成了,之后登陆后台,进行操作。在这里插入图片描述

特点

  • 站群系统
    所谓站群,是指建立在统一标准、统一技术构架基础之上,分级管理,分级维护,信息可以实现基于特定权限共享呈送的网站集合。并不是把很多个网站集中在一起就可以称得上是站了,一定是要:统一,分级管理,信息共享,单点登录才可以。站群实现了技术标准统一,能够互联互通,实行集群化管理,相对一致的网站运行和服务规范。
  • 多发布点
    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">&nbsp;&nbsp;</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。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值