搜索
首页后端开发php教程PHPCMS二次开发教程(转),phpcms二次开发教程_PHP教程

PHPCMS二次开发教程(转),phpcms二次开发教程

转自:http://www.cnblogs.com/semcoding/p/3347600.html

PHPCMS V9 结构设计

根目录
|–api  结构文件目录
|–caches 缓存文件目录
   |– configs 系统配置文件目录
   |– caches_* 系统缓存目录
|–phpcms  phpcms框架主目录
   |– languages 框架语言包目录
   |– libs 框架主类库、主函数库目录
   |– model 框架数据库模型目录
   |– modules 框架模块目录
   |– templates 框架系统模板目录
|–phpsso_server  phpsso主目录
|–statics  系统附件包
   | – css 系统css包
   | – images 系统图片包
   | – js 系统js包
|–index.php  程序主入口

PHPCMS V9 核心文件说明

模块与控制器

模块:

phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m。

访问content模块示例:http://www.yourname.com/index.php?m=content

控制器:

phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为abc的控制器,那么他的命名为abc.php即可。控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。如果您创建了一个abc.php在test模块下,那么我们在浏览器里面输入URL:http://www.yourname.com/index.php?m=test&c=abc

二次开发技巧

如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过“MY_*.php”的形式进行二次开发。

例如您要对改phpcms/mood/index.php进行二次开发。您可以在与index.php同级的目录下建立"MY_index.php"

<?php
	class MY_index extends index{
		function __construct() {
			parent::__construct();
			}
			……your code
	}

这样当您通过url访问index控制器的时候,系统会默认指向MY_index.php 并且原文件的方法将被继承,可以直接使用。

系统配置文件

文件路径:根目录/caches/configs

  • database.php 数据库配置文件
  • system.php 系统配置文件
  • route.php 路由配置文件

调用方法

如调用系统配置中的web_path:

pc_base::load_config('system', web_path ');

CMS入口文件:

PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。

入口程序是在前期处理用户请求的引导程序。它是唯一一个可以被最终用户可以直接请求运行的。

文件路径:根目录/index.php

<?php
	define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
	include PHPCMS_PATH.'/phpcms/base.php';
	pc_base::creat_app();
?>

这段代码首先加载了 phpcms 框架的引导文件 base.php,然后它根据指定的配置文件建立了一个 Web 应用实例并运行。

PHPCMS框架入口文件:

文件路径:根目录/phpcms/base.php 代码片段如下:

<?php
	define('IN_PHPCMS', true);
	define('PC_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
	if(!defined('PHPCMS_PATH')) define('PHPCMS_PATH', PC_PATH.'..'.DIRECTORY_SEPARATOR);
	define('CACHE_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR);
……
?>

该文件为框架入口文件,包含实例化系统/模块类方法,调用系统/模块方法,系统常用常量等。如:

	pc_base::load_model(‘*_model’) 加载数据库模型 pc_base::load_sys_class(‘classname’) 实例化系统类
	pc_base::load_app_class(‘classname’,’admin’) 实例化模块类
	pc_base::load_sys_func (‘funcfile’) 调用系统函数库

全局函数文件:

文件路径:根目录/phpcms/libs/functions/global.func.php 代码片段如下:

<?php
	function new_addslashes($string){
	if(!is_array($string)) return addslashes($string);
	foreach($string as $key => $val) $string[$key] = new_addslashes($val);
	return $string;
	}
	……
?>

该文件中的函数,为全系统基础函数,可以在系统中直接调用。

二次开发技巧:

如果需要增加自己的全局函数,可根据需要增加到/phpcms/libs/functions/global.func.php/extention.func.php中,不会影响升级

数据模型基类:

文件路径:根目录/phpcms/libs/classes/model.class.php 代码片段如下:

<?php
	pc_base::load_sys_class('db_factory', '', 0);
	class model {  //数据库配置
	protected $db_config = ''; //数据库连接
	protected $db = ''; //调用数据库的配置项
	protected $db_setting = 'default'; //数据表名
	protected $table_name = ''; //表前缀
	public $db_tablepre = '';
	……
?>

加载数据模型后,可以的数据库该类中方法进行数据库操作。

表单调用类:

文件路径:根目录/phpcms/libs/classes/form.class.php。 代码片段如下:

<?php
	class form {
	//编辑器调用
	public static function editor($textareaid = 'content', $toolbar = 'basic', $module = '', $catid = '', $color = '', $allowupload = 0, $allowbrowser = 1,$alowuploadexts = '',$height = 200,$disabled_page = 0) {
	} 
	//图片上传调用
	public static function images($name, $id = '', $value = '', $moudle='', $catid='', $size = 50, $class = '', $ext = '', $alowexts = '',$thumb_setting = array(),$watermark_setting = 0 ) {
	}
	……
?>

通过实例化该类可以,调用在程序中调用编辑器、表单上传、日期选择、栏目结构等表单。 实例化方法:pc_base::load_sys_class('form', '', 0);

模板解析缓存类:

文件路径:根目录/phpcms/libs/classes/template_cache.class.php 。 代码片段如下:

<?php
	final class template_cache {
	public function template_compile($module, $template, $style = ‘default’)     {
	$tplfile = $_tpl = PC_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html'; 
	……
	?>

该类作用为解析模板,解析模板及更新模板缓存

PHPCMS V9 二次开发

PHPCMS URL访问:

PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。

参数名称 描述 位置 备注

  • M 模型/模块名称 phpcms/modules中模块目录名称 必须
  • C 控制器名称 phpcms/modules/模块/*.php 文件名称 必须
  • A 事件名称 phpcms/modules/模块/*.php 中方法名称

模块访问方法[示例]:

二次开发命名规范

类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。

函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。

类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。

数据模型需要以“数据表名称_model.class.php”为形式,类名称与文件名必须相同。

二次开发开发流程

创建数据库模型类

数据库模型位于:phpcms/model/目录下。

数据模型文件的命名规则建议为数据表名称+'_model.class.php'

如果在我们的创建的模块中我要使用一个数据库“test”,首先需要建立一个数据库模型文件,文件名称为'test_model.class.php'

<?php
  defined('IN_PHPCMS') or exit('No permission resources.');
  pc_base::load_sys_class('model', '', 0);
  class test_model extends model {
    public function __construct() {
    $this->db_config = pc_base::load_config('database');
    $this->db_setting = ‘default'; 
    $this->table_name = 'test';
    parent::__construct();
  }
 }
?>

数据库模型类名称必须与文件名称相同;

	$this->db_setting = 'default'为数据库配置文件中配置数据库链接池名称,默认为default,一般情况下不需要修改。
	$this->table_name = ‘test’为数据表名称

创建模块

如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。

例如要开发一个叫做test的模块,那么首先在phpcms/modules 目录下创建文件夹,并将其命名为test。模块的标准结构通常是这样的。

如果您的模板有单独的前台模板,你需要在phpcms/templates/default下创建一个您的模块目录来放置前台模板,"default"为你的风格包名称,我们默认适用default

访问test模块示例:http://www.yourname.com/index.php?m=test

创建模块控制器类

为test模块增加一个名为myest的控制器 文件路径:根目录/phpcms/modules/test/mytest.php。 代码片段如下:

<?php
  defined('IN_PHPCMS') or exit('No permission resources.');
    class mytest {
      function __construct() {
      }
      public function init() {
        $var = 'hello world!';
        echo $myvar;
      }
      public function mylist() {
        $var = 'hello world!this is a example!';
        echo $myvar;
      }
  }
?>

常用操作列表(1)

1.调用数据库模型

$this->db = pc_base::load_model('test_model');

其中$this->db中所支持的方法请参照phpcms/libs/classes/model.class.php中方法

2.加载系统类

$http = pc_base::load_sys_class('http'); //实例化http类
pc_base::load_sys_class('format', '', 0); //调用form类,不进行实例化操作3.加载系统函

3.加载系统函数库

pc_base::load_sys_func('mail'); //调用mail函数包

4. 加载模块类

$test = pc_base::load_sys_class(‘classname‘,’test’); //实例化test模块下 classname类

5.加载模块函数库

pc_base::load_sys_func(‘global‘,’test’); //调用test模块的global函数包

常用操作列表(2)

6.加载前台模板

include template('test', 'mytest', 'default');

7.加载后台模板

include $this->admin_tpl('mytest_admin_list');

8.权限控制

后台控制控制器需要加载admin模块下的admin类,并继承该类

<?php
	defined('IN_PHPCMS') or exit('No permission resources.');
	pc_base::load_app_class('admin','admin',0);
	class mytest_admin extends admin { 
	//这个控制器需要登录后台才可以访问 }
	?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1137778.htmlTechArticlePHPCMS二次开发教程(转),phpcms二次开发教程 转自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 结构设计 根目录 |–api 结构文件目录 |–...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用数据库存储会话的优点是什么?使用数据库存储会话的优点是什么?Apr 24, 2025 am 12:16 AM

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

您如何在PHP中实现自定义会话处理?您如何在PHP中实现自定义会话处理?Apr 24, 2025 am 12:16 AM

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

什么是会话ID?什么是会话ID?Apr 24, 2025 am 12:13 AM

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

您如何在无状态环境(例如API)中处理会议?您如何在无状态环境(例如API)中处理会议?Apr 24, 2025 am 12:12 AM

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

您如何防止与会议有关的跨站点脚本(XSS)攻击?您如何防止与会议有关的跨站点脚本(XSS)攻击?Apr 23, 2025 am 12:16 AM

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

您如何优化PHP会话性能?您如何优化PHP会话性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

什么是session.gc_maxlifetime配置设置?什么是session.gc_maxlifetime配置设置?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

您如何在PHP中配置会话名?您如何在PHP中配置会话名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!