php笔记之:初探PHPcms模块开发介绍

澳门新葡亰平台游戏网站 13

最近接到一项目,精略计算了一下内容,设计数据库表为45个左右。这么多表,的确够头疼的。怎么做到最少操作但能达到最大的效果呢?

由于工作关系,只能暂时放弃对mongodb的研究了 .开始研究PHPcms .

之前用过
Laravel,框架自带的 artisan 命令,用得爽到爆。现在工作需要,要学习
FuelPHP,首先看到框架目录结构,有 coposer.json 框架可以用 composer
管理,一定也有自己的命令工具。

本人经过分析,决定自己写数据辅助类来协助ADODB来完成工作。

目前为止我已经基本完成了模块的开发.趁着周末来这里做个总结.我发现phpcms写的还不错,不过文档什么的确实不多.

对于新手来说,不妨先用命令自动生成文件,然后看这些生成的文件了解基本的
CRUD 操作。

首先,确定你的目录结构,本人目录结构如下:

不说废话了.对于phpcms的模块开发.首先要了解模块的目录结构.

一、准备工作

|-admin //后台|-adodb //adodb文件目录|-smarty //smarty文件目录|-images //图片及样式文件|-dataclass //数据操作类文件夹 |-class_test.php //测试类|-configs //系统配置文件夹 |-config.inc.php //系统配置文件|-cache //缓冲目录|-templates //模板文件 |-templates_c //模板解析文件夹 |-test.htm //测试模板文件include.inc.php //系统包含文件集smarty_adodb.inc.php //smarty adodb类声明文件test.php //测试文件

我们可以在

  1、要用
oil 命令需要先安装 composer

做好以上工作,让我们开始工作吧!首先,定义你的 config.inc.php 配置文件:

找到他的目录结构   我们要开发的东东(也就是模块)就在/phpcms/modules/下面

    看官网自行安装

?php$_DB[host] = localhost; #数据库IP$_DB[user] = root; #用户名$_DB[pass] = root; #数据库密码$_DB[name] = yop; #数据库名$_DB[type] = mysql; #类型?

如果没有什么特别的
在开发一个模块之前先要按照目录结构建立好相关目录并且设计好数据库表结构
比方说 我们建立一个模块叫做我的模块 my_test

  2、正确连接并创建数据库

smarty_adodb.inc.php

下面应该是mytest下的目录结构

    /fuel/app/config/development/db.php 里面进行数据库配置

?$db = ADONewConnection($_DB[type]);$db -Connect($_DB[host],$_DB[user],$_DB[pass],$_DB[name]); #adodb链接$tpl=new Smarty;$tpl-template_dir=./templates;$tpl-compile_dir=./templates/templates_c;$tpl-left_delimiter = {;$tpl-right_delimiter = };?

    下面是 /fuel/app/ 目录结构

include.inc.php

澳门新葡亰平台游戏网站 ,mytest

    澳门新葡亰平台游戏网站 1

?phpinclude_once(./configs/config.inc.php); #加载数据链接配置include_once(./adodb/adodb.inc.php); #加载adodb数据类include_once(./smarty/Smarty.class.php); #加载smarty模板类include_once(./smarty_adodb.inc.php); #加载smarty及adodb类调用集合文件include_once(./dataclass/class_test.php); #加载HOBBY数据类?

  –class //这个是mytest模块会用到的类

  3、打开命令编辑工具,并切换到框架根目录。

接着我们开始写数据操作类,笔者的数据库结构如下:

  –function//mytest模块用到的函数

二、即使本地没有服务器,也可以访问网站的高级命令
server

CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(20) NOT NULL default , `addtime` varchar(20) NOT NULL default , KEY `id` (`id`))

  –install//安装此模块需要的一些配置文件和建立数据表myslq语句什么的在这里

  php oil server

class_test.php

    –language//多语言的时候会用到

  澳门新葡亰平台游戏网站 2

?phpclass Test { function getTest_ByID($id) { global $db; if ( empty($id) ) { return false; } $sql = SELECT * FROM `Test` where ID=$id; $result = $db-Execute($sql); $data = $result-FetchRow(); return $data; } function listTest($order=ID) { global $db; if( empty($order) ){ $order = ID; } $sql = SELECT * FROM `Test` order by $order desc; $result = $db-Execute($sql); $rs = array(); while ( $data = $result-FetchRow() ) { array_push($rs,$data); } return $rs; } function setTest($id=,$pairs,$work=){ global $db; if(empty($id)){ $sql =  insert into Test ; $sql .=  (  . join(array_keys($pairs),,) .  ) ; $sql .=  values ; $sql .=  (  . join(array_values($pairs),,) .  ) ; }else{ if($work==update){ $sql =  $work Test ; array_walk($pairs, create_function($value,$name,$value = $name . = . $value . ; ) ); $sql .=  set  . join(array_values($pairs),,); $sql .=  where id=$id; }elseif($work==delete){ $sql = $work from Test where ID=$id; } } $result = $db-Execute($sql); return $result; }}? 

    –config.ini.php//这个配置文件是用来描述整个模块的一些信息

  现在访问
就可以了,但这个状态需要一直保持(另外打开一个窗口执行下面的其他命令)。Ctrl-C
可退出。

上面这个类是最关键的。这个地方能明白,其它的都好说了。好,下面我们开始实例:

    –extention.inc.php//这个是创建目录结构  .这个文件也用来控制权限

三、创建 MVC
及其他所需文件的最常用命令 generate

test.php

    –model.php//模块使用了哪些数据模型.(可以理解为使用了哪些表.)

  先看看可以创建哪些文件,g 是 generate 的缩写。

?phpinclude_once(./include.inc.php);$test = new Test();$rs = $test-listTest();foreach ( $rs as $array ) { $list[]=$array; $tpl-assign(list,$list);}$tpl-display(test.htm);$info=array(name=无喱头,addtime=date(Y-m-d));$test-setTest(5,$info,update);?

    –model.sql//这个向数据库里面插入模型的记录

  php oil g help

接着我们写个HTM出来

    –my_test.sql//这个文件在安装的时候会被执行,把建立数据库表的sql放进来

  澳门新葡亰平台游戏网站 3

test.htm

  –templates //,mytest模块用到的模板文件

  1、scaffold
脚手架,顾名思义,一条命令可以创建一系列 MVC。简单的 CRUD
操作,只需要一条命令,不需要自己写任何代码。

{section name=sec loop=$list}{$list[sec].name}BR{/section}

  –uninstall //卸载模块时候用到的配置和文件

    例:创建 article 的 MVC
系列文件,title、content、author、reading 四个字段。

注:实际类名数据库名并不如上,只偶有改变。如果操作异常,请自行改正

    这个里面的文件我没研究  回头研究了补上.

    php oil g scaffold article title:varchar content:text
author:varchar reading:int

运行一下看看。

my_test.php //这个是mytest模块的后台控制器文件`

    澳门新葡亰平台游戏网站 4

怎么样,出来了吗效果。

index.php//这个是前台的控制器,这个我没写东西.

    已经生成了这么多文件,包括 controller、model、view、migration
文件,可以看看代码具体的增删改查操作。(由于还没有生成表,所以数据不能入库,继续往下看。)

上面的类文件实现了数据智能化操作,有什么问题,请与我讨论。


  2、controller

 

    例:创建 ccontroller category
有四个方法,index、store、update、delete

 

    php oil g controller category index store update delete

建立完一个这样的结构后 我们还需要在/phpcms/model/下面建立我们的数据模型

    澳门新葡亰平台游戏网站 5

例如  my_test_model.class.php  (这个使用了很典型的工厂模式)

    生成控制器文件以及和方法对应的四个视图文件。

具体每个文件里面写了些什么.我们一个一个来看
.首先来看我们在model文件夹下面写的那个文件.
复制代码 代码如下:
defined(‘IN_PHPCMS’) or exit(‘No permission resources.’);
pc_base::load_sys_class(‘model’, ”, 0);
class my_test_model extends model {
    public function __construct() {
        $this->db_config = pc_base::load_config(‘database’);
        $this->db_setting =
‘default’;//默认的数据库配置.//多个库的话可以在这里选库
        $this->table_name =
‘my_test’;//这个就是表名称,不用加表前缀
        parent::__construct();
    }
}
?>    

    如果想放到 controller 目录下的
blog 目录下,php oil g controller blog/category index store update
delete

第一行的作用是确定是不是在phpcms的运行框架内.

  3、model

第二行加载系统的model类,后面的参数0 的意思是并不实例化.

    例:创建 model category 有 name 字段

最后一行调用了父类的构造方法.可以在phpcms/libs/classes/model.class.php中找到

    php oil g model category name:varchar

而这个model类里面定义了很多对数据的操作方法  
最基本的增删改查。以后我再详细说说model基本的一些方法。

    澳门新葡亰平台游戏网站 6

接着来看看modules   里面的东东

    生成 model 及数据库相关的 migration 文件

我们一个个往下面看  第一个language   是用来支持多语言菜单的。

    注:如果不需要
migration,后面加参数

然后是config.ini.php,这个里面写的是一些关于模块安装时候的信息。

    php oil g model tag name:varchar –no-migration

文件里面是这个结构的
复制代码 代码如下:
$module = ‘mytest’;//使用的model
$modulename = ‘这里是模块的名称’;
$introduce = ‘模块的描述信息’;
$author = ‘作者’;
$authorsite = ‘作者网站’;
$authoremail = ‘作者email’;

    澳门新葡亰平台游戏网站 7

里面标注的很清楚了

    如果需要软删除,则需要 model_soft

接着是extention.inc.php
这个文件是用来创建后台管理菜单的目录结构的,也是用来控制权限的 
复制代码 代码如下:
$id= $menu_db->insert(array(‘name’=>’这里写着操作名称’,     
‘parentid’=>父ID, ‘m’=>’模块’, ‘c’=>’控制器’,
‘a’=>’动作’,      ‘data’=>”, ‘listorder’=>排序,
‘display’=>’是否显示’),true);//最后的true是用来返回ID的

    php oil g model post title:varchar[50] user_id:int
–soft-delete

文件最后应该有一个数组,这个数组是用来插入系统的languagezh-cnsystem_menu.lang.php里面的 
格式如下
复制代码 代码如下:
$language = array(
    ‘这里是你起的操作名称’=>’这里是操作的中文翻译’,
    类似:’mytest_init’=>’显示列表’
    );

  4、presenter

然后是model.php  这个就是你使用了哪些数据模型 可以理解为使用了哪些表
复制代码 代码如下:
return array(‘mytest’,’my_test_artcle’);

    php oil g controller post action1 action2 –with-presenter

然后是model.sql   这个是用来向系统的模型表里面插入数据用的
复制代码 代码如下:
INSERT INTO `phpcms_module` (`module`, `name`, `url`,
`iscore`, `version`, `description`, `setting`, `listorder`,
`disabled`, `installdate`, `updatedate`) VALUES ();

    澳门新葡亰平台游戏网站 8

然后是mytest.sql 建立你数据库表的语句应该写在这个文件里面

  5、migration

接着就是你所使用的模板  应该放在templates里面  命名的规则应该是  
mytest_add.tpl.php

    ♦ 执行文件迁移,及用 migration 文件自动创建表

最后是你的控制器  
这个有的研究了.控制器里面是针对你每个url传递过来的action也就是a=?的动作.默认动作是init
复制代码 代码如下:
defined(‘IN_PHPCMS’) or exit(‘No permission resources.’);
pc_base::load_app_class(‘admin’,’admin’,0);
class mytest extends admin(){
  public function __construct(){
    parent::__construct;//调用父类的构造函数
  }
  public function init(){
    echo “这里是默认的操作方法”;
  }
  public function add(){
    include $this->admin_tpl(‘mytest_add’);//使用模板的方法
  }
}

      php oil refine migrate

控制器里面写好了   我们把上面的文件都写完了就可以安装我们的模块了 。

      数据库会有一张表叫 migration ,里面记录了所欲迁移的文件。

    ♦ 生成 migration 文件,或对表进行操作,总之文件名要顾名思义。

php oil generate migration create_users name:text email:string[50] password:string[125]  // 创建 users 表php oil generate migration rename_table_users_to_accounts                    // 修改 users 表名为 accountsphp oil generate migration add_bio_to_accounts bio:text                     // 添加字段 biophp oil generate migration delete_bio_from_accounts bio:text                  // 删除字段 biophp oil generate migration rename_field_name_to_username_in_accounts              // 修改字段名php oil generate migration drop_accounts

  6、task

   php oil g task newtask cmd1 cmd2

   澳门新葡亰平台游戏网站 9

  7、config

   ♦ php oil g config test hello:world 生成普通配置文件 test.php

    澳门新葡亰平台游戏网站 10

   ♦php oil g config package 生成 package.php

   ♦php oil g config form –overwrite 重写 core/config/
目录下的配置文件。

  8、module

    php oil g module blog 在 框架根目录会多一个 blog 目录。

四、执行一些任务的简单命令 refine

  同样 help 看一下可执行的任务

  php oil refine help

  澳门新葡亰平台游戏网站 11

  上面红框的命令都可以试试看哦,有一些很有趣的效果

  澳门新葡亰平台游戏网站 12

五、安装或卸载包文件的命令
package

  包文件资源在配置文件 package.php 中管理

  php oil package install test-package 安装 test-package 包

  php oil package uninstall test-package 卸载包文件

六、方便随时执行 php 的快捷命令
console

  php oil console 会进入 PHP 环境中,随意写 php 代码

   澳门新葡亰平台游戏网站 13

七、可进行单元测试的命令 test

  用于 unit test,等用过后再来补充。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图