阅读(2261) (9)

自动关联与生成

2017-06-13 16:14:11 更新

模块就是数据表,ModPHP 会根据数据库结构来自动创建模块类和函数。系统默认自带 user, file, category, post, comment 五个数据表(模块)。 数据库结构由配置文件 database.php 定义,实际上是一个二维数组(数据表和字段),结构大致如下:

<?php
return array(
    'user'=>array(
        'user_id' => 'INT(15) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
        'user_name' => 'VARCHAR(255) NOT NULL',
        'user_nickname' => 'VARCHAR(255) NOT NULL',
    ...
);

添加更多模块或者更改已有模块结构: 编辑 database.php 文件添加数据表和字段,然后执行 mod::update() 方法。系统会自动更新数据库表结构,并自动生成与其对应的模块类文件(如果新增模块)  {module}.class.php, 存放在 user/classes/目录中。

模块类:

模块类继承了 mod 类的所有方法。其中包含了一些直接操作数据库记录的方法,如 add(), update(), delete(), get(), getMulti(), search() 等。比如要获取一位 user_id 为 1 的用户,只需要这么做:

<?php
require('mod.php'); //如果在模板文件中,这一步是不需要的
$result = user::get(array('user_id'=>1));
print_r($result['data']); //$result 是一个关联数组,至少包含 success 和 data 两个键值对。success 是一个布尔值,如果获取信息成功则为 true, 否则为 false; data 是一个存储结果的关联数组或错误信息

模块函数:

系统会自动注册与模块对应的相关函数,这些函数包括: 1. _{module}(): 包含挂钩函数、当前分页、总页数等与模块相关信息的函数 2. get_{module}(): 获取单条与模块关联的记录的函数 3. getmulti{module}(): 获取多条与模块关联的记录的函数 4. getsearch{module}(): 搜索(模糊查询)多条与模块关联的记录的函数 5. the_{module}(): 存储当前记录信息的函数  6. {module}_*(): 与数据表字段名对应的直接获取字段数据的函数 7. prev_{module}(): 获取上一条记录的函数 8. next_{module}(): 获取下一条记录的函数 9. {module}_parent(): 获取父记录的函数,数据表存在 {module}parent 字段时才会注册该函数 10. [{module}{ex-table}()](http://modphp.hyurl.com/function-module-ex-table): 获取从表记录的函数,数据表存在外键才会注册

所以获取 user_id = 1 的用户也可以使用下面这种简单的方式:

<?php
if(get_user(1)){ //因为 user_id 是主键,可以直接使用整数,其他参数需要用数组,如 array('user_name'=>'someone')
    print_r(the_user());
}

要同时获取多位用户,可以使用下面这种方式:

<?php
while(get_multi_user()){ //同样,你可以为 get_multi_*() 类函数提供一个关联数组作为参数来进行更精确的获取
    print_r(the_user());
}