PHPCMS V9完全开发介绍


PHPCMS V9 文件目录结构:
根目录
| – 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图标

2.url访问
参数名称 描述 位置 备注
m 模型/模块名称 phpcms/modules中模块目录名称 必须
c 控制器名称 phpcms/modules/模块/*.php 文件名称 必须
a 事件名称 phpcms/modules/模块/*.php 中方法名称

eg:http://yourdomain.com/index.php?m=content&c=index&a=show&id=1
m = content 为模型/模块名称 位于phpcms/modules/content
c = index 为控制器名称 位于phpcms/modules/content/index.php
a = show 为时间名称 位于phpcms/modules/content/index.php 中show()方法
id = 1 为其他参数 与正常get传递参数形式相同
如果我们访问您的域名 如:http://www.yourdomain.com/index.php
phpcms默认路由会定位到content模块的index控制器中的init操作,因为系统在没有指定模块和控制器的时候,会执行默认的模块和操作。因此下面的URL的结果是相同的:
系统还支持URL路由的功能,这些都能够带来其他的url访问效果 http://www.yourdomain.com/index.php?m=content&c=index&a=init 一样效果
3.系统类库与函数库调用
1.系统类库位于系统的phpcms/libs/classes目录下面,函数库文件名为*.class.php,其中global.func.php为框架中默认加载,global.func.php中函数可直接使用

2.系统函数库位于系统的phpcms/libs/functions目录下面,函数库文件名为*.func.php

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

系统函数库调用:
pc_base::load_sys_func('mail'); 调用mail函数包
PHPCMS命名规范:
类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。
  函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。
  类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。
  数据模型需要以“数据表名称_model.class.php”为形式,类名称与文件名必须相同。

4.配置文件调用:
配置文件配置在caches/configs/目录下。
配置文件调用:使用 load_config方法
$upload_url = pc_base::load_config('system','upload_url');

5.二次开发小技巧:
1.如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"MY_*.php"的形式进行二次开发。
例如您要对改phpcms/mood/index.php进行二次开发。您可以在与index.php同级的目录下建立"MY_index.php"
MY_index.php代码如下
<?php
  class MY_index extends index{
    function __construct() {
      parent::__construct();
    }


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

配置:
1.数据库配置:
数据库配置文件位置:caches/configs/database.php
我们打开这个配置文件,加入我们的数据库配置信息。数据库配置信息为二维数组结构,默认为default,可以根据default结构配置多个数据库链接(如:extended_1)
2.路由配置
路由配置文件位置:caches/configs/route.php
我们打开这个配置文件,加入我们的路由配置信息。路由配置信息为二维数组结构,默认为default。
3.系统配置
系统配置文件位置:caches/configs/system.php

在控制器中增加模板调用:
phpcms 可以实现完全的模板与程序分离,所以在我们的控制器程序中要加载模板,才可以更友好的显示出来。
1.加载前台模板
前台模板文件在phpcms emplatesdefault模块名称 目录中,本示例也就在phpcms emplatesdefault est中
加载模板方法如下:
include template('test', 'mytest', 'default');
其中 test为模块名称 mytest 为模板目录下模板名称,default为风格名称,默认不填为defalut
2.加载后台模板
后台模板文件在phpcmsmodules模块名称 emplates 目录中,本示例也就在phpcmsmodules est emplates 中 加载模板方法如下:
include $this->admin_tpl('mytest_admin_list');
其中mytest_admin_list为phpcmsmodules est emplates中mytest_admin_list.tpl.php,注意:此处模板必须以.tpl.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();
  }
 }
?>
注意:
1.数据库模型类名称必须与文件名称相同;
2.$this->db_setting = 'default'为数据库配置文件中配置数据库链接池名称,默认为default,一般情况下不需要修改。
3.$this->table_name = 'test'为数据表名称
控制器中使用:
<?php
  defined('IN_PHPCMS') or exit('No permission resources.');
  class mytest {
    private $db;
     function __construct() {
      $this->db = pc_base::load_model('test_model');
    }
    public function init() {
      $result = $this->db->select();
      var_dump($result);
    }
  }
?>

模板标签使用:
常用:
{pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page" dbsource="discuz" return="data"}
<ul>
{loop $data $key $val}
{$val[username]}<br />
{/loop}
</ul>
{$pages}
{/pc}


开发流程

为你的phpcms创建一个模块的一般开发流程是:

创建数据库和数据表;(没有数据库操作可略过)
创建模块目录
创建模块控制器类;
创建模块类与模块函数;(如果只是简单的模块可以不必创建)
创建模板文件;
运行和调试。

原文地址:https://www.cnblogs.com/boundless-sky/p/6939531.html