列的显示

默认情况下,列显示数据库里面最原始的数据,如果需要修改列数据的显示,参考下面的方式

display回调

display()方法来通过传入的回调函数来处理当前列的值:

  1. $grid->column('title')->display(function ($title) {
  2. return "<span style='color:blue'>$title</span>";
  3. });

在传入的匿名函数中可以通过任何方式对数据进行处理,另外匿名函数绑定了当前列的数据作为父对象,可以在函数中调用当前行的数据:

  1. $grid->column('first_name');
  2. $grid->column('last_name');
  3. // 不存在的`full_name`字段
  4. $grid->column('full_name')->display(function () {
  5. return $this->first_name . ' ' . $this->last_name;
  6. });

根据条件显示不同的组件

如果这一列要根据某些条件来显示为不同的组件

  1. $grid->column('title')->display(function ($title, $column) {
  2. // 如果这一列的status字段的值等于1,直接显示title字段
  3. if ($this->status == 1) {
  4. return $title;
  5. }
  6. // 否则显示为editable
  7. return $column->editable();
  8. });

内容映射

since v1.5.17

如果字段gender的取值为fm,分别需要用来显示

  1. $grid->column('gender')->using(['f' => '女', 'm' => '男']);

内容替换

如果需要将这一列的某些值替换为其它的内容来显示:

  1. $grid->column('cost')->replace([0 => '-']);

列视图

使用view()方法让当前列渲染一个视图显示输出, 比如有一个视图resources/views/content.blade.php

  1. <p>
  2. {{ $value }}
  3. {{ $model->id }}
  4. </p>

默认会传入视图的两个变量,$model为当前行的模型,$value为当前列的值

然后用下面的调用来渲染这个视图输出

  1. $grid->column('content')->view('content');

用这个方法可以很好的渲染出复杂的列内容。

列展开

Since v1.6.10

如果一行的字段比较多,可以通过列展开功能,来隐藏过多的内容。通过点击列来展开显示,或者点击展开相关的其它数据,比如下面的例子,用来展开一条文章下的10条最新评论:

  1. use Encore\Admin\Widgets\Table;
  2. $grid->column('title', '标题')->expand(function ($model) {
  3. $comments = $model->comments()->take(10)->map(function ($comment) {
  4. return $comment->only(['id', 'content', 'created_at']);
  5. });
  6. return new Table(['ID', '内容', '发布时间'], $comments->toArray());
  7. });

显示效果如下:

Kapture 2019-03-10 at 23 46 20

闭包函数中可以返回任何可被渲染的内容。

弹出模态框

Since v1.6.10

列展开功能类似,可以通过弹出模态框来显示更多内容

  1. $grid->column('title', '标题')->modal('最新评论', function ($model) {
  2. $comments = $model->comments()->take(10)->get()->map(function ($comment) {
  3. return $comment->only(['id', 'content', 'created_at']);
  4. });
  5. return new Table(['ID', '内容', '发布时间'], $comments->toArray());
  6. });

显示效果如下:

Kapture 2019-03-10 at 23 43 49

Gavatar头像

如果这一列数据是邮箱,你想要显示为Gavatar头像:

  1. $grid->column('email', '头像')->gravatar();
  2. // 设置尺寸
  3. $grid->column('email', '头像')->gravatar(45);

文件尺寸

如果这一列的数据是表示文件大小的字节数,可以通过调用filezise方法来显示更有可读性的文字

  1. $grid->column('file_size')->filesize();

这样数值199812019将会显示为190.56 MB

下载链接

如果这一列的数据存储的是上传文件的路径,那么可以通过调用downloadable方法来将这一列设置为可下载链接

  1. $grid->column('file_path')->downloadable();

复制按钮

通过下面的调用,会在这一列的每一行文字前面出现一个复制icon,点击它可以复制它的值

  1. $grid->column('title')->copyable();

二维码

WX20190830-002516

通过下面的调用,会在这一列的每一行文字前面出现一个二维码icon,点击它可以展开一个小弹框,里面会显示这一列值的二维码编码图形

  1. $grid->column('link')->qrcode();

显示图片

如果picture字段保存的是图片的完整地址,或者路径,可以通过下面的方式将该列渲染为图片显示

支持多图显示,需要字段输出为数组。

  1. $grid->column('picture')->image();
  2. //设置服务器和宽高
  3. $grid->column('picture')->image('http://xxx.com', 100, 100);
  4. // 显示多图
  5. $grid->column('pictures')->display(function ($pictures) {
  6. return json_decode($pictures, true);
  7. })->image('http://xxx.com', 100, 100);

显示label标签

WX20190830-001812

将字段显示为label标签, 如果字段输出为数组,会显示为多个label标签。

  1. $grid->column('name')->label();
  2. //设置颜色,默认`success`,可选`danger`、`warning`、`info`、`primary`、`default`、`success`
  3. $grid->column('name')->label('danger');
  4. // 接收数组
  5. $grid->column('keywords')->label();

如果需要将status字段的不同的值显示为不同颜色的label

  1. $grid->column('status')->label([
  2. 1 => 'default',
  3. 2 => 'warning',
  4. 3 => 'success',
  5. 4 => 'info',
  6. ]);

显示icon

将字段显示为font-awesome图标, 更多图标参考 http://fontawesome.io/icons/

  1. $grid->column('status')->icon([
  2. 0 => 'toggle-off',
  3. 1 => 'toggle-on',
  4. ], $default = '');

链接

将字段显示为一个链接。

  1. // link方法不传参数时,链接的`href`和`text`都是当前列的值
  2. $grid->column('homepage')->link();
  3. // 或者传入一个指定的href
  4. $grid->column('homepage')->link($href);

表格

将字段显示为一个表格,需要当前列的值为一个二维数组

  1. // table方法不传参数时,表格的title为二维数组每一列的key
  2. $grid->column('settings')->table();
  3. // 可以通过下面的方法指定每一列的key
  4. $grid->column('settings')->table(['key' => '键', 'val' => '值']);

进度条

WX20190830-002033

将字段显示为一个进度条,需要当前列的值为一个数值,默认的最大值为100,

  1. $grid->column('progress')->progressBar();
  2. // 可选参数
  3. $grid->column('progress')->progressBar($style = 'primary', $size = 'sm', $max = 100);

$style用来设置样式,可选值dangerwarninginfoprimarydefaultsuccess

$size用来设置尺寸, 可选值为smxsxxs$max用来设置最大范围。

loading状态

  1. $grid->column('status')->loading([1, 2, 3]);

如果status的值为[1, 2, 3]之一,会显示为一个loading加载icon。

显示其它的字段值显示情况

  1. $grid->column('status')->loading([1, 2, 3], [
  2. 4 => '完成'
  3. ]);

图片轮播

如果字段值为图片数组,可以用下面的调用显示为图片轮播组件

  1. $grid->column('images')->carousel();
  2. // 设置显示尺寸和图片服务器
  3. $grid->column('images')->carousel($width = 300, int $height = 200, $server);

日期格式

Since v1.7.3

如果字段值为时间戳,可以用date方法格式化输出

  1. $grid->column('created_at')->date('Y-m-d');

其中格式参数请参考PHP的date函数

布尔值显示

Since v1.7.6

WX20190830-002712

将这一列转为bool值之后显示为.

  1. $grid->column('approved')->bool();

你也可以按照这一列的值指定显示,比如字段的值为YN表示truefalse

  1. $grid->column('approved')->bool(['Y' => true, 'N' => false]);

圆点前缀

Since v1.7.6

WX20190830-001924

这个方法用来在列文字前面加上一个带颜色的圆点,以提供更直观清晰的视觉效果

  1. $grid->column('status')->using([
  2. 1 => '审核通过',
  3. 2 => '草稿',
  4. 3 => '发布',
  5. 4 => '其它',
  6. ], '未知')->dot([
  7. 1 => 'danger',
  8. 2 => 'info',
  9. 3 => 'primary',
  10. 4 => 'success',
  11. ], 'warning');

按照上面的代码,使用using方法映射了显示文字,再使用dot设置圆点的颜色,颜色的取值有dangerinfoprimarysuccesswarning这五个选择。

列操作

Since v1.7.6

WX20190830-001824

注意:在使用这个方法之前,请先阅读【自定义操作-行操作】

这个功能可以将某一列显示为一个可操作的按钮,比如上图所示是一个标星取消标星的列操作,点击这一列的星标图标之后, 后台会切换字段的状态,然后页面图标也跟着切换,具体实现代码如下:

  1. <?php
  2. namespace App\Admin\Actions\Document;
  3. use App\Models\Document;
  4. use Encore\Admin\Actions\RowAction;
  5. class StarDocument extends RowAction
  6. {
  7. // 在页面点击这一列的图表之后,发送请求到后端的handle方法执行
  8. public function handle(Document $document)
  9. {
  10. // 切换`star`字段的值并保存
  11. $document->star = (int) !$document->star;
  12. $document->save();
  13. // 保存之后返回新的html到前端显示
  14. $html = $document->star ? "<i class=\"fa fa-star-o\"></i>" : "<i class=\"fa fa-star\"></i>";
  15. return $this->response()->html($html);
  16. }
  17. // 这个方法来根据`star`字段的值来在这一列显示不同的图标
  18. public function display($star)
  19. {
  20. return $star ? "<i class=\"fa fa-star-o\"></i>" : "<i class=\"fa fa-star\"></i>";
  21. }
  22. }