在列表页面中,可以根据不同的条件把数据显示在不同的tab上吗?
PHP8.1 ModStartCMS V8.0.0
根据数据范围标签进行数据筛选,列表以多 Tab 形式展示
$grid ->scopeFilter('all', '全部', function (ScopeFilter $filter) { // 没有任何筛选条件 }) ->scopeFilter('male', '男', function (ScopeFilter $filter) { $filter->where('gender', 'male'); }) ->scopeFilter('female', '女', function (ScopeFilter $filter) { $filter->where('gender', 'female'); }) ->scopeDefault('all');
ok. thanks.
新的问题。 我现在根据不同的条件可以分页显示,但是hookItemOperateRendering()增加的操作只在`all` Tab上显示?如何让它们在其他tab上也显示?
你判断当前页面的 _scope 值,这个值是在 URL 中的参数
噢, 好的。 如果我在->hookItemOperateRendering(function (ItemOperate $itemOperate) {} 对当前的item的几个属性做了更新或改动,如何能让前端列表强制刷新呢?比如下面的代码verify_status通过JS改变了,前端页自动刷新了,但是我同时还想更新`status`, 除非手动在页面reload,否则不会更新。我实验了在`$itemOperate->prepend(TextLink::success('审核通过', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_PASS . '"'));` 再拼接一个`data-edit-quick="status"`, 但是好像只有前面那个attributes的起作用。
->hookItemOperateRendering(function (ItemOperate $itemOperate) { // 当前行数据 $item = $itemOperate->item(); switch ($item->verify_status) { case PostVerifyStatus::VERIFYING: $itemOperate->prepend(TextLink::success('审核通过', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_PASS . '"')); $itemOperate->prepend(TextLink::danger('审核拒绝', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_FAIL . '"')); break; } if ($item->verify_status === PostVerifyStatus::VERIFY_PASS) { $item->forceFill([ 'status' => PostContentStatus::SHOW ]); $item->save(); $item->refresh(); } if ($item->verify_status === PostVerifyStatus::VERIFY_FAIL) { $item->forceFill([ 'status' => PostContentStatus::HIDE ]); $item->save(); $item->refresh(); } })
给你一些参考代码
谢谢提供的代码。 不过,我并不想再增加一个独立的操作选项。 有没有办法在controller里直接让grid refresh? 而不是必须通过response 对象,比如示例中Response::redirect(CRUDUtil::jsGridRefresh())。 就是想$item->verify_status 更新成‘通过’后,就自动更新‘status' 成'显示’, 反之亦然。你看我的代码已经实现了更新‘status’的值,数据库中记录也更新了,就是在页面需要手动‘reload'才可以看到更新后的‘status’值。
@WX_pX4: 那实现不了
或者说, 在controller中可以dispatch 一个event,前端js 响应这个event? 类似livewire中firing event? (https://laravel-livewire.com/docs/2.x/events#from-component)
现阶段还不支持。
这是个好思路,不过还是要综合考虑安全、权限等各方面因素。
QQ扫一扫联系
点击联系
2374926113
微信扫一扫联系
数据范围标签
根据数据范围标签进行数据筛选,列表以多 Tab 形式展示
ok. thanks.
新的问题。 我现在根据不同的条件可以分页显示,但是hookItemOperateRendering()增加的操作只在`all` Tab上显示?如何让它们在其他tab上也显示?
你判断当前页面的 _scope 值,这个值是在 URL 中的参数
噢, 好的。 如果我在->hookItemOperateRendering(function (ItemOperate $itemOperate) {} 对当前的item的几个属性做了更新或改动,如何能让前端列表强制刷新呢?比如下面的代码verify_status通过JS改变了,前端页自动刷新了,但是我同时还想更新`status`, 除非手动在页面reload,否则不会更新。我实验了在`$itemOperate->prepend(TextLink::success('审核通过', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_PASS . '"'));` 再拼接一个`data-edit-quick="status"`, 但是好像只有前面那个attributes的起作用。
给你一些参考代码
谢谢提供的代码。 不过,我并不想再增加一个独立的操作选项。 有没有办法在controller里直接让grid refresh? 而不是必须通过response 对象,比如示例中Response::redirect(CRUDUtil::jsGridRefresh())。 就是想$item->verify_status 更新成‘通过’后,就自动更新‘status' 成'显示’, 反之亦然。你看我的代码已经实现了更新‘status’的值,数据库中记录也更新了,就是在页面需要手动‘reload'才可以看到更新后的‘status’值。
@WX_pX4: 那实现不了
或者说, 在controller中可以dispatch 一个event,前端js 响应这个event? 类似livewire中firing event? (https://laravel-livewire.com/docs/2.x/events#from-component)
现阶段还不支持。
这是个好思路,不过还是要综合考虑安全、权限等各方面因素。