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

addLinkage("name值", "标题", "提示", "选项", "默认值", "异步请求地址" [, "后代name值", "请求参数名"])

标识符:linkage

参数 含义 类型
name name值 string
title 标题 string
tips 提示 string
options 选项 array
default 默认值 string
ajax_url 异步请求地址 string
next_items 后代name值 string
param 请求参数名 string

先来个栗子感受一下

比如做个省份城市联动,这里最后一级是城市,没有地区。

$list_province = ["gd" => "广东", "gx" => "广西"];

return ZBuilder::make("form")
    ->addLinkage("province", "选择省份", "", $list_province, "", url("get_city"), "city")
    ->addSelect("city", "选择城市")
    ->fetch();

效果:

下面,来讲解一下如何使用。

选项

比如上面的省份,“选项”是一个一维数组,和之前单选、复选等类型一样。

异步请求地址

是指选择下拉之后,去请求下级数据的地址,可以使用url函数生成或者直接写有效的url地址。

返回的数据格式是json格式,并且里至少面要包含“code”、“msg”、“list”,其中,“code”表示状态,1表示获取成功,0表示获取失败。“msg”是提示信息,“list”是返回的列表数据。

一个典型的数据返回例子(这个例子只是简单的演示,无论传什么值过来,都返回相同的json数据)

	// 根据省份获取城市
    public function get_city($province = "")
    {
        $arr["code"] = "1"; //判断状态
        $arr["msg"] = "请求成功"; //回传信息
        $arr["list"] = [
            ["key" => "gz", "value" => "广州"],
            ["key" => "sz", "value" => "深圳"],
        ]; //数据
        return json($arr);
    }

“list”数组中,每一个数组元素需包含两个键,“key”和“value”,也可以借助format_linkage()方法将普通的一维数组转换为符合普通联动的数据结构。

后代name值

指子级下拉菜单的name值,比如上面的例子,省份的name值是“province”,城市的name值是city,那么需要给省份下拉菜单指定下级的name值,即city

$list_province = ["gd" => "广东", "gx" => "广西"];

return ZBuilder::make("form")
    ->addLinkage("province", "选择省份", "", $list_province, "", url("get_city"), "city")
    ->fetch();

如果是三级联动,那么“后代name值”就必须把所有子代下拉菜单的name值都写进去,并且以英文逗号隔开,比如加多一个地区:

$list_province = ["gd" => "广东", "gx" => "广西"];

return ZBuilder::make("form")
    ->addLinkage("province", "选择省份", "", $list_province, "", url("get_city"), "city,area")
    ->addLinkage("city", "选择城市", "", "", "", url("get_area"), "area")
    ->addSelect("area", "选择地区")
    ->fetch();

我们可以看到,选择省份中写的是“city,area”,而选择城市写的是“area”,选择地区则没有。

细心的朋友可能已经看出在第一个例子中,“选择城市”使用的是addSelect方法,而在这里使用的是addLinkage方法,最后一项“选择地区”用addSelect方法。

是的,最后一项是不用去获取数据的,所以我们可以用简单的addSelect方法即可,最终效果如下:

请求参数名

默认情况下,选择下拉菜单后,去获取数据时会带上选中的数值,比如选择“广东”,就会给get_city方法传一个参数名为“province”,值为“gd”的参数。那么我们就可以在get_city($province = "")接收到这个参数,并查询数据库。

在没有修改的情况下,参数名是该下拉菜单的name值,如果有需要,可以修改为其他,比如:

$list_province = ["gd" => "广东", "gx" => "广西"];

return ZBuilder::make("form")
    ->addLinkage("province", "选择省份", "", $list_province, "", url("get_city"), "city,area", "sf")
    ->addLinkage("city", "选择城市", "", "", "", url("get_area"), "area")
    ->addSelect("area", "选择地区")
    ->fetch();

那么get_city方法就不能用province来接收参数值,而是用sf,如:get_city($sf = ""),当然,使用$this->request->post("sf")也是可以获取到的。

演示例子

class Index extends Admin
{
    public function add()
    {
        // 使用ZBuilder构建表单页面,并将页面标题设置为“添加”
        $list_province = ["gd" => "广东", "gx" => "广西"];

        return ZBuilder::make("form")
            ->addLinkage("province", "选择省份", "", $list_province, "", url("get_city"), "city,area")
            ->addLinkage("city", "选择城市", "", "", "", url("get_area"), "area")
            ->addSelect("area", "选择地区")
            ->fetch();
    }

    // 根据省份获取城市
    public function get_city($province = "")
    {
        $arr["code"] = "1"; //判断状态
        $arr["msg"] = "请求成功"; //回传信息
        $arr["list"] = [
            ["key" => "gz", "value" => "广州"],
            ["key" => "sz", "value" => "深圳"],
        ]; //数据
        return json($arr);
    }

    // 根据城市获取地区
    public function get_area($city = "")
    {
        $arr["code"] = "1"; //判断状态
        $arr["msg"] = "请求成功"; //回传信息
        $arr["list"] = [
            ["key" => "th", "value" => "天河"],
            ["key" => "by", "value" => "白云"],
        ]; //数据
        return json($arr);
    }
}