将jQuery可排序的顺序发送到Laravel控制器

时间:2018-04-22 12:31:26

标签: javascript php jquery laravel

我有一组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

这可能吗?或者我应该使用不同的方法?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

  1. 为每个li添加ID,例如id =“id - {{$ article ['id']}}”

  2. 当您使用此可排序插件更改任何订单时,您可以调用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 () {
    
            }
        });
      }
    
    });
    
  3. 然后在您的方法中,为每个项目获取新订单&amp;将其保存到数据库,如

       $ids = $request->id;
    
       foreach($ids as $order => $id){
        $article = Article::findOrFail($id);
        $article->order = $order;
        $article->save();
       }