0

我已经安装了https://github.com/Laravel-Backpack并且喜欢它。

但是我发现文档很少,而且代码太庞大/太复杂,我无法彻底理解如何做到这一点:

我希望能够为example.com/admin/contact/search/mySearchTermHere等页面添加书签,并且我希望将联系人列表显示在mySearchTermHere通过管道传输到 DataTables 搜索字段的位置(并显示适当的结果)。

在查看代码库时,我发现CrudRouter.php

Route::post($this->name.'/search', [
    'as' => 'crud.'.$this->name.'.search',
    'uses' => $this->controller.'@search',
]);

我不确定这是否与我要启用的功能相关(我看到它只允许发布而不是获取)。

我怎样才能实现我的目标(最好不编辑 Backpack 源代码,下次我升级到最新版本时会被覆盖)?

我有点期待这个功能已经存在,也许它确实存在,但我只是还没有找到要使用的 URL。

PS我正在使用这些版本:

"backpack/base": "^0.7.19",
"backpack/crud": "^3.2"
4

2 回答 2

1

执行您正在尝试的操作的默认方法是使用Backpack 的过滤器,它允许您完全做到这一点 - 但会预先填充过滤器,而不是 DataTables 搜索表单。看一下,我认为这将是最快的方法。

如果只能使用 DataTables 搜索这个,可以根据需要更改列表视图。只需创建一个名为resources/views/backpack/vendor/crud/list.blade.php. 背包会自动捡起它,而不是包裹里的那个。从原始文件复制代码并添加您需要的自定义逻辑:加载 DataTables 后,使用 jQuery 强制搜索。

希望能帮助到你。


为了回答您的第一个猜测,如果您使用的是AjaxDataTablessearch() ,则该方法违反直觉地用于返回所有搜索或未搜索的结果:

// ------ AJAX TABLE VIEW
// Please note the drawbacks of this though: 
// - 1-n and n-n relationship columns won't be searched anymore;
// - date and datetime columns won't be sortable anymore;

$this->crud->enableAjaxTable();

所以不,它与你想要做的事情无关。如果您在那里进行修改,它们将分别应用于每一列行。

于 2017-08-09T10:36:04.880 回答
0

这比我预期的要容易。

resources/views/vendor/backpack/crud/list.blade.php的选项对象中var table = $("#crudTable").DataTable({...,我添加了:

@if (Request::input('q'))
  search: {
      search: '{{Request::input('q')}}' //https://stackoverflow.com/a/28578355/470749
  },
@endif

现在,每当我浏览到 时example.com/admin/contact?q=someSearchTermHere,“someSearchTermHere”都会预填充在 DataTable 中,并且会显示相应的结果。

感谢Doug和 @tabacitu 的鼓励。

更新:在更高版本的 Backpack(“backpack/base”:“^1.0.0”,“backpack/crud”:“^3.5.0”)中,此代码需要进入dataTableConfiguration: {...}内部resources\views\vendor\backpack\crud\inc\datatables_logic.blade.php

更新:对于 Laravel 6.x 和 Backpack 4,datatables_logic.blade.php还需要:

$searchQuery = Request::input('q');

在javascript中:

@if ($crud->getPersistentTable() && !$searchQuery)
    stateSave: true,//https://datatables.net/reference/option/stateSave
@endif

@if ($searchQuery)
    $('.dataTables_filter input').val('{{$searchQuery}}');
@endif
于 2018-11-25T21:03:17.193 回答