牛骨文教育服务平台(让学习变的简单)

一个完整强大的模块,肯定会有许许多多可以自定义的配置,下面我们来详细讲解模块配置信息的各项参数。

我们知道,模块配置信息文件info.php是返回一个数组,里面包含了关于模块的各项信息。

参数 含义 类型 必填
name 模块名 string
title 模块标题 string
identifier 模块唯一标识 string
icon 字体图标 string
description 模块描述 string
author 开发者 string
author_url 开发者网址 string
version 模块版本 string
need_module 模块依赖 array
need_plugin 插件依赖 array
tables 数据表 array
database_prefix 表前缀 string
config 模块参数配置 array
access 数据授权配置 array
action 行为参数配置 array
trigger 触发器配置 array

下面来逐一讲解各个参数。

name - 模块名

由字母和下划线组成,建议全部使用小写字母,如:cms、user、shop等等,因为系统会对应模块名和数据表名。

title - 模块标题

该标题会在顶部导航显示,也会在模块管理中显示。如:门户、用户、商城等。

identifier - 模块唯一标识

这是区分不同开发者不同模块的重要信息,格式:模块名.开发者标识.module,如:cms.ming.module

icon - 字体图标

系统内置了三套字体图标:SIMPLE LINE ICONSFONT AWESOMEGLYPHICONS ,如填写:"fa fa-user"。当然,如果还不满足要求,您可以自己添加别的字体图标库。

description - 模块描述

对模块进行简略的描述,以便使用者能快速的了解该模块的功能或者其他信息。

author - 开发者

模块的开发者名称

author_url - 开发者网站地址

开发者网站地址,请填写完整的url地址,如:http://www.dolphinphp.com

version - 模块版本号

格式采用三段式:主版本号.次版本号.修订版本号,如:1.0.1。以后的模块升级,模块版本比较都按这种格式,请务必填写正确。

need_module - 模块依赖

格式[[模块名, 模块唯一标识, 依赖版本, 对比方式]]

有些模块需要依赖于某个或几个模块,那么就必须填写所依赖的模块信息,如:

"need_module" => [
	["cms", "cms.ming.module", "1.0.0"]
]

表示模块依赖于cms模块,并且该模块的唯一标识符是cms.ming.module,因为不同开发者都可能开发名为cms的模块,这样,模块唯一标识的作用就体现出来了。

其中,模块名、模块唯一标识、依赖版本这三个是必填的,如果不填写对比方式,则默认为“=”,即等于某个版本。

版本比较使用了php的version_compare函数,该函数支持的比较操作符有:<、 lt、<=、 le、>、 gt、>=、 ge、==、 =、eq、 !=、<> 和 ne。

比较操作符 含义
<、 lt 小于
<=、 le 小于等于
>、 gt 大于
>=、 ge 大于等于
==、 =、eq 等于
!=、<>、 ne 不等于

注意:此参数区分大小写,所以它的值应该是小写的,不能填写“LG”、“GT”等。

所依赖的模块需要大于某个版本

"need_module" => [
	["cms", "cms.ming.module", "1.0.0", ">"]
]

// 或者

"need_module" => [
	["cms", "cms.ming.module", "1.0.0", "gt"]
]

依赖多个模块

"need_module" => [
	["cms", "cms.ming.module", "1.0.0", ">"],
    ["admin", "admin.dolphinphp.module", "1.0.1"]
]

need_plugin - 插件依赖

格式[[插件名, 插件唯一标识, 依赖版本, 对比方式]]

如果您的模块依赖有些插件,则需填写插件依赖,如:

"need_plugin" => [
	["sms", "sms.ming.plugin", "1.0.0"]
]

其他用法和模块依赖类似,这里就不赘述了。

tables - 数据表

如果您的模块包含了数据表,则需填写数据表名。比如,cms模块有两张表,cms_articlecms_category,则这么填写:

"tables" => [
	"cms_article",
    "cms_category"
]

表名无需填写表前缀,系统检测的时候会自动带上系统设置的表前缀。

database_prefix - 表前缀

模块的数据表名建议格式为:表前缀+模块名+控制器,比如:dp_admin_config,那么database_prefix参数则填写:dp_。填写了表前缀后,系统在安装模块时,会将此表前缀替换成目标系统所设置的表前缀,方便不同用户安装您的模块。

config - 模块参数配置

如果模块需要自定义一些配置信息,则需配置config参数。

它的用法和添加表单项通用方法addFormItems方法一致,可设置系统内置的30多种表单类型,比如:单选,复选、下拉、单行文本,编辑器、联动等等。

我们在开发微信模块的时候,需要给用户设置appid等信息,那么可以这样设置:

"config" => [
    ["text", "appid", "AppId", "应用ID,登录 微信公众平台 查看"],
    ["text", "secret", "AppSecret", "应用密钥,登录 微信公众平台 查看"],
    ["text", "token", "Token", "令牌,用于接口验证,登录 微信公众平台,在【基本配置】中设置"],
    ["text", "aeskey", "EncodingAESKey", "消息加解密密钥,登录 微信公众平台,在【基本配置】中设置"],
]

不同类型的参数是不同的,这个我们在后面的章节会讲到,这里不理解不要紧,只要知道如果需要设置配置信息,则按这种格式去配置。

如果需要配置分组,那么可以这样写:

"config" => [
    ["group",
        [
            "分组1" => [
                ["radio", "status1", "单选", "", ["1" => "开启", "0" => "关闭"], 1],
                ["text", "text1", "单行文本", "提示", "x"],
                ["textarea", "textarea1", "多行文本", "提示"],
                ["checkbox", "checkbox1", "多选", "提示", ["1" => "是", "0" => "否"], 0],
            ],
            "分组2" => [
                ["textarea", "textarea2", "多行文本", "提示"],
                ["checkbox", "checkbox2", "多选", "提示", ["1" => "是", "0" => "否"], 0],
            ]
        ]
    ]
]

配置好这些内容后,安装模块后才生效,并且需要在某个控制器执行 return $this->moduleConfig(); 即可自动生成这些配置的页面
>比如在cms模块的Confg控制器中的index方法调用 return $this->moduleConfig();

class Config extends Admin
{
    /**
     * 文章设置页
     * @return mixed
     */
    public function index()
    {
        // 调用ModuleConfig()方法即可
        return $this->moduleConfig();
    }
}

那么只要访问这个方法,即可管理模块配置信息。

如何获取模块的配置,请参考方法参考

access - 授权配置

有些模块可能有这样的需求,需要给不同用户分配不同的权限,比如某些用户只能看某些内容,那么可以填写授权配置。

注意:这里的授权配置只是提供给您一个方便的操作去管理和设置权限节点,获取到某个用户的授权之后该如何操作则需要开发者自己去实现。

"access" => [
	"group" => [
		"tab_title"   => "部门授权",
		"table_name"  => "admin_group",
		"primary_key" => "id",
		"parent_id"   => "pid",
		"node_name"   => "name"
	],
],
  • group 分组标识,名字自定义,可以设置多个授权。
  • tab_title tab导航标题
  • table_name 表名,表示要关联哪张表,不需要填写表前缀,这里表示部门表。
  • primary_key 主键字段名
  • parent_id 父级id字段名
  • node_name 权限节点字段名
  • model_name 模型名(可选)
  • page_tips 页面提示(可选,1.0.3+)
  • tips_type 提示类型(可选,默认为info,1.0.3+)

dp_admin_group数据表有如下三个字段,分别对应primary_keyparent_idnode_name

安装模块之后,在“用户管理”中,点击操作栏的 按钮,可进入授权页面。

这里出现的节点,是从上面定义的表dp_admin_group获取的,这里设置了授权之后,在需要判断当前用户或者某个用户是否有某些权限,可以使用Access模型的getAuthNode方法和checkAuthNode方法。详细用法在“用户管理”-“数据授权”章节查看。

按模型获取数据

以上说的是读取的数据在同一张表上,如果有些数据在另外一张表,那么就不好处理了。比如上面的例子,部门名称在另外一张表,那么用以上的方法就做不到了。

如果遇到这样的需求,可以设置模型名。

"access" => [
	"group" => [
		"tab_title"   => "部门授权",
		"table_name"  => "admin_group",
		"primary_key" => "id",
		"parent_id"   => "pid",
		"node_name"   => "name",
        "model_name" => "Group"
	],
],

这样配置的话,那你必须在你模块下有名为Group的模型文件,比如路径为:app模块名modelGroup.php

"access" => [
	"group" => [
		"tab_title"   => "部门授权",
		"table_name"  => "admin_group",
		"primary_key" => "id",
		"parent_id"   => "pid",
		"node_name"   => "name",
        "model_name" => "User"
	],
],

如果这样定义,那么必须存在app模块名modelUser.php这个文件。

除此之外,该模型下必须有一个特定的方法,方法名为access,你只需在这个方法返回你需要展示的数据即可。

这种方法灵活性比较大,可以随意查询数据,只要返回的数据中,有包含上面设置的三个字段名id、pid、name即可。

action - 行为配置

用于定义行为规则,具体参数如下

  • module 所属模块(必须)
  • name 行为标识(同个模块内,不得重复)(必须)
  • title 行为名称(必须)
  • remark 行为描述(必须)
  • rule 行为规则
  • log 日志规则
  • status 状态(0-禁用,1-启用)默认为禁用
    "action" => [
        [
            "module" => "cms",
            "title"  => "添加文章",
            "remark" => "添加文章",
            "name"   => "article_add",
            "log"    => "用户:[user|get_nickname] 在[time|format_time]添加了文章"
        ],
        [
            "module" => "cms",
            "name"   => "article_delete",
            "title"  => "删除文章",
            "remark" => "删除文章",
            "log"    => "用户:[user|get_nickname] 在[time|format_time]删除了文章",
            "status" => 1
        ],
    ],

trigger - 触发器配置

针对模块参数配置(config)可设置触发器,指定某个表单项的值为某个值时显示某些表单项。

比如模块参数配置如下:

"config" => [
    ["text", "appid", "AppId", "应用ID,登录 微信公众平台 查看"],
    ["text", "secret", "AppSecret", "应用密钥,登录 微信公众平台 查看"],
    ["text", "token", "Token", "令牌,用于接口验证,登录 微信公众平台,在【基本配置】中设置"],
    ["text", "aeskey", "EncodingAESKey", "消息加解密密钥,登录 微信公众平台,在【基本配置】中设置"],
]

我们希望当用户填写appid123时才显示secret表单项,当secret填写456时才显示tokenaeskey

// 触发器
"trigger" => [
    ["appid", "123", "secret"],
    ["secret", "456", "token,aeskey"]
]

具体用法请参考设置触发器章节。