我安装了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',
]);
我不确定这是否与我想要启用的内容相关(我发现它只允许Post而不是Get) .
我怎样才能实现我的目标(理想情况下不编辑Backpack源代码,下次升级到最新版本时会被覆盖)?
我有点期望这个功能已经存在,也许它确实存在,但我还没有找到使用哪个URL .
附:我正在使用这些版本:
"backpack/base": "^0.7.19",
"backpack/crud": "^3.2"
2 回答
执行您正在尝试的操作的默认方法是使用Backpack's filters,它允许您执行此操作 - 但是将预填充过滤器,而不是DataTables搜索表单 . 看一看,我认为这将是最快的方式 .
如果只能使用DataTables搜索,您可以根据需要更改列表视图 . 只需创建一个名为
resources/views/backpack/vendor/crud/list.blade.php
的文件 . 背包将自动拾取而不是包装中的那个 . 复制原始文件中的代码并添加所需的自定义逻辑:加载DataTables后,使用jQuery强制搜索 .希望能帮助到你 .
要回答您的第一个猜测,如果您使用AjaxDataTables,
search()
方法将直观地用于返回搜索或未搜索的所有结果:所以不,这与你想要做的事情无关 . 如果您在那里进行修改,它们将分别应用于每个列行 .
这比我预想的要容易 .
在
resources/views/vendor/backpack/crud/list.blade.php
中,在var table = $("#crudTable").DataTable({...
的选项对象中,我添加了:现在,只要我浏览到
example.com/admin/contact?q=someSearchTermHere
,就会在DataTable中预填充"someSearchTermHere",并显示相应的结果 .感谢Doug和@tabacitu的鼓励 .
更新:在更高版本的Backpack("backpack/base":"^1.0.0","backpack/crud":"^3.5.0")中,此代码需要在
resources\views\vendor\backpack\crud\inc\datatables_logic.blade.php
内进入dataTableConfiguration: {...}
.