我有一组Article
个具有公共属性int priority
的对象。此字段用于按预期顺序显示文章。但是,我希望能够重新安排管理区域中文章的顺序。
我包含了jQuery和这个Laravel / Blade片段
<ul class="selectable-demo-list" id="sortable-list-basic">
@FOREACH($articles as $article)
<li> {{ $article->label}} </li>
@ENDFOREACH
</ul>
我可以生成这个HTML输出:
<ul class="selectable-demo-list" id="sortable-list-basic">
<li> My article (ID: 1) </li>
<li> Another article (ID: 2) </li>
<li> ... </li>
</ul>
如果代码中包含这些元素,我可以$article->priority
通过$article->id
及其唯一ID访问相应的优先级。
上面发布的<ul>
已正确呈现:所有<li>
元素都显示为可排序的jQuery元素。如果我将某个项目拖动到某个位置,它会暂时停留在那里。
不幸的是,我不知道如何保存新订单(=根据列表位置更新项目优先级)。
这不应该直接进行。相反,我想使用更新按钮。也许我可以使用表单并将这样的数组发送给我的控制器:
$priorities = [1=>3; 2=>1; 3=>2] // ID => new priority
这可能吗?或者我应该使用不同的方法?非常感谢任何帮助!
答案 0 :(得分:1)
为每个li添加ID,例如id =“id - {{$ article ['id']}}”
当您使用此可排序插件更改任何订单时,您可以调用ajax请求,如下面的代码
$("#sortable-list-basic").sortable({
update: function (e, u) {
var data = $(this).sortable('serialize');
$.ajax({
url: "{{ url('controller/sorting_method') }}",
type: 'post',
data: data,
success: function (result) {
},
complete: function () {
}
});
}
});
然后在您的方法中,为每个项目获取新订单&amp;将其保存到数据库,如
$ids = $request->id;
foreach($ids as $order => $id){
$article = Article::findOrFail($id);
$article->order = $order;
$article->save();
}