我已经安装了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。
P.S。我正在使用这些版本:
"backpack/base": "^0.7.19",
"backpack/crud": "^3.2"
答案 0 :(得分:1)
执行您尝试的操作的默认方法是使用Backpack's filters,这样您就可以完成此操作 - 但是会预先填充过滤器,而不是DataTables搜索表单。看一看,我认为这将是最快的方式。
如果只能使用DataTables搜索,您可以根据需要更改列表视图。只需创建一个名为resources/views/backpack/vendor/crud/list.blade.php
的文件即可。背包将自动拾取而不是包装中的那个。复制原始文件中的代码并添加所需的自定义逻辑:加载DataTables后,使用jQuery强制搜索。
希望它有所帮助。
要回答您的第一个猜测,如果您使用AjaxDataTables,则search()
方法会反直觉地用于返回搜索或未搜索的所有结果:
// ------ 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();
所以不,它与您尝试做的事情无关。如果您在那里进行修改,它们将分别应用于每个列行。
答案 1 :(得分:0)
这比我预期的要容易。
在resources/views/vendor/backpack/crud/list.blade.php
的{{1}}的options对象中,我添加了:
var table = $("#crudTable").DataTable({...
现在,每当我浏览到@if (Request::input('q'))
search: {
search: '{{Request::input('q')}}' //https://stackoverflow.com/a/28578355/470749
},
@endif
时,都会在DataTable中预先填充“ someSearchTermHere”,并显示相应的结果。
感谢Doug和@tabacitu的鼓励。
更新:在背包的更高版本中(“背包/底座”:“ ^ 1.0.0”,“背包/crud”:“^3.5.0”),此代码需要放入example.com/admin/contact?q=someSearchTermHere
内改为dataTableConfiguration: {...}
。