T-DOC
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • 入门

    • 简介
    • 安装
    • 1.x升级指南
    • 版本升级
    • 快速开始
    • 开发前必读
    • 主题与颜色
    • 静态资源
    • 视图与自定义页面
    • 多应用 (多后台)
    • JS组件
    • 常见问题
    • Laravel Octane
  • 数据表格

    • 基本使用
    • 列的使用和扩展
    • 列的显示和扩展
    • 行的使用和扩展
    • 工具栏
    • 树状表格
    • 组合表头
    • 数据来源以及查询条件
    • 关联关系
    • 查询过滤
    • 列过滤器
    • 快捷搜索
    • 规格筛选器
    • 数据导出
    • 快捷创建
    • 行内编辑
    • 事件
    • 字段翻译
    • 数据软删除
    • 头部和脚部
    • 异步渲染
  • 数据表单

    • 基本使用
    • 图片/文件上传
    • 字段的使用
    • 字段扩展
    • 数据源
    • 表单弹窗
    • 关联关系
    • JSON表单
    • 分步表单
    • 表单验证
    • 工具表单
    • 事件以及表单响应
    • 初始化
    • 表单布局
    • 字段翻译
    • 字段动态显示
  • 数据详情

    • 基本使用
    • 字段显示
    • 关联关系
    • 字段显示扩展
    • 初始化
    • 字段翻译
  • 模型树

    • 基本使用
  • 数据仓库

    • 基本使用
  • 动作

    • 基本使用
    • 数据表格
    • 数据表单
    • 数据详情
    • 模型树
  • 多语言

    • 基本使用
  • 开发扩展

    • 扩展基本使用
    • 开发扩展
  • 页面组件

    • 异步加载
    • 图表
    • 数据统计卡片
    • 模态窗 (Modal)
    • 工具表单
    • 下拉菜单
    • 单/复选框
    • 选项卡
    • 警告框
    • 提示窗
    • Markdown
    • 卡片
  • 区块 (section)

    • 区块基本使用
  • 动作以及表单响应

    • 动作以及表单响应
  • 权限控制

    • 权限控制
  • 菜单

    • 菜单基本使用
  • 帮助函数

    • 帮助函数
  • 开发工具

    • 基本使用
  • 自定义登陆认证

    • 自定义登录
  • 自定义头部导航

    • 自定义头部导航条
  • 更新日志

    • BETA版本更新日志
    • 更新日志

区块(section)

简介

Dcat Admin提供section功能允许开发者在项目运行时更改页面各个部分的内容,而不需要直接去修改模板。

{tip} Dcat Admin的section功能参考了Blade模板引擎的@section功能和Wordpress的add_filter功能,如果开发者理解这两者其中之一就能快速上手。

使用

admin_section

输出section内容,此函数类似于Blade模板中的@yield指令以及WordPress中的apply_filters函数。

参数:

  • $section {string} 区块名称
  • $default {string|Closure} 默认值
  • $options {array} 参数,需要注意的是key值必须使用英文字母开头,否则无法被获取到

返回值:

  • {string}
echo admin_section('navigation', null, ['count' => 4]);

admin_inject_section

注入section内容,此函数类似WordPress中的add_filter函数。

参数:

  • $section {string} 区块名称
  • $content {string|Illuminate\Contracts\Support\Renderable|Closure} 区块内容
  • $append {bool} 默认true,是否追加到上一个注入的内容后面,如果传false则会替换掉前面注入的内容
  • $priority {int} 默认10,优先级,值越大排序越靠前

当第二个参数传入的是匿名函数时,匿名函数接收一个Illuminate\Support\Fluent对象。匿名函数中接收一个Illuminate\Support\Fluent对象,此对象包含有前面注入到此区块的内容,通过previous属性可以获得;如果此section还有其他参数,也可以通过访问属性的方式获得,如下:

admin_inject_section('navigation', e("<navigation>1</navigation>"));

admin_inject_section('navigation', function ($options) {
    // 获取上一个注入此区块的内容
    $previous = $options->previous;

    // 获取自定义参数
    $count = $options->count;

    return e("<navigation>count:{$count}</navigation>");
}, true, 11);

// 输出
echo admin_section('navigation', null, ['count' => 4]);
// 最终输出结果为
// <navigation>count:4</navigation><navigation>1</navigation>

admin_inject_default_section

注入默认内容,如果调用了admin_inject_section函数注入内容(无论是在前面还是后面都一样),则此函数不生效。

参数:

  • $section {string} 区块名称
  • $content {string|Illuminate\Contracts\Support\Renderable|Closure} 区块内容,与admin_inject_section的第二个参数一致
admin_inject_default_section('navigation', '暂无数据');

admin_has_section

判断是否注入过内容到section,此函数返回一个bool类型值。

var_dump(admin_has_section('navigation'));

admin_has_default_section

判断是否注入过默认内容到section,此函数返回一个bool类型值。

var_dump(admin_has_default_section('navigation'));

系统预定义区块

Dcat Admin预定义了一些区块,开发者可以通过这些区块改变页面内容。

所有的预定义区块名称都定义在Dcat\Admin\Admin::SECTION这个类常量中,通过类常量的方式访问。

往<head>标签内输入内容

此通过Admin::SECTION['HEAD']区块可以往<head>标签内输入内容。

在app\Admin\bootstrap.php中加入以下代码:

use Dcat\Admin\Admin;

admin_inject_section(Admin::SECTION['HEAD'], function () {
    return '<script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>';
});

往<body>标签内输入内容

通过Admin::SECTION['BODY_INNER_BEFORE']区块可以往<body>标签内部的开头位置输入内容。

通过Admin::SECTION['BODY_INNER_AFTER']区块可以往<body>标签内部的结束位置输入内容。

往<div id=”app”>标签内输入内容

通过Admin::SECTION['APP_INNER_BEFORE']区块可以往<div id="app">标签内部的开头位置输入内容。

通过Admin::SECTION['APP_INNER_AFTER']区块可以往<div id="app">标签内部的结束位置输入内容。

更改顶部导航栏用户信息面板内容

通过Admin::SECTION['NAVBAR_USER_PANEL']区块可以更改顶部导航栏的用户信息面板内容。

admin_inject_section(Admin::SECTION['NAVBAR_USER_PANEL'], view('admin::partials.navbar-user-panel'));

更改顶部导航栏用户信息面板后面内容

通过Admin::SECTION['NAVBAR_AFTER_USER_PANEL']区块可以更改顶部导航栏的用户信息面板后面的内容。

admin_inject_section(Admin::SECTION['NAVBAR_AFTER_USER_PANEL'], function () {
    return <<<HTML
    <li>
        <a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
    </li>
HTML;    
});

更改顶部导航栏前面内容

admin_inject_section(Admin::SECTION['NAVBAR_BEFORE'], view('...'));

更改顶部导航栏后面内容

admin_inject_section(Admin::SECTION['NAVBAR_AFTER'], view('...'));

更改菜单栏用户信息面板内容

通过Admin::SECTION['LEFT_SIDEBAR_USER_PANEL']区块可以更改菜单栏的用户信息面板的内容。

 admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_USER_PANEL'], view('admin::partials.sidebar-user-panel'));

更改菜单栏

通过Admin::SECTION['LEFT_SIDEBAR_MENU']可以更改整个菜单栏内容。

{tip} Dcat Admin的菜单是通过注入默认内容到LEFT_SIDEBAR_MENU区块构建的,开发者可以替换掉系统默认的菜单渲染逻辑。

use Dcat\Admin\Support\Helper;
use Dcat\Admin\Admin;

admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_MENU'], function () {
    $menuModel = config('admin.database.menu_model');

    $builder = Admin::menu();

    $html = '';
    foreach (Helper::buildNestedArray((new $menuModel())->allNodes()) as $item) {
        $html .= view('admin::partials.menu', ['item' => $item, 'builder' => $builder])->render();
    }

    return $html;
});
Last Updated:
Contributors: Hans