当用户点击Laravel 4中的表格标题时,如何订购你的桌子?

时间:2014-12-05 20:04:03

标签: php jquery html ajax laravel-4

enter image description here

我有一个表users,标题为:用户名,姓名,电子邮件,类型,组,状态。

现在,我在Controller函数中将它们设置为group

我想把它提升到一个新的水平,以改善我的桌面用户体验。

  • 如果用户点击了表格标题上的username,我想订购username
  • 如果用户点击我表格标题上的电子邮件,我想订购电子邮件......等等..
  • 基本上,orderedBy,无论用户点击哪个表头。

如果我可以在不刷新页面的情况下执行此操作,那将非常棒。 我需要知道Ajax或jQuery才能完成这项工作吗? 有可能在PHP中这样做吗?我正在使用Laravel 4。

对此问题中所有贡献的所有用户THANKS

UserController.php

public function index()
    {
        //get all the users from the database
        $users = User::where('type','!=','Distributor')
        ->orderBy('group', 'asc')

        ->paginate(20);

        // return the view and give it a title 
        return View::make('users.index')
        ->with('users',$users);

    }
  

修改

My Table View

<table class="table table-hover">
    @include('sub.index.tbody') // this line is just the detail of the table.
</table>

3 个答案:

答案 0 :(得分:2)

您可以使用jquery Datatable轻松完成此操作,无需修改甚至一行PHP代码。这是simple example

   <!DOCTYPE html>
   <html>
   <head>
   <!-- Loading Table CSS -->
   <link rel="stylesheet" href="//cdn.datatables.net/1.10.4/css/jquery.dataTables.css">
   <!-- Loading jQuery -->
   <script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
   <!-- Loading DataTable -->
   <script src="//cdn.datatables.net/1.10.4/js/jquery.dataTables.min.js"></script>
   </head>
   <body>
       <div style="width:70%; margin:0 auto;">
            <table id="example" class="display" cellspacing="0" width="100%">
               <thead>
                <!-- Your heading -->
                   <tr>
                       <th>Username</th>
                       <th>Name</th>
                       <th>Email</th>
                       <th>Type</th>
                       <th>Group</th>
                       <th>Status</th>
                   </tr>
               </thead> 
               <tbody>
                   <!-- Your data -->
                   <tr>
                       <td> some user</td>
                       <td> name here </td>
                       <td>group </td>
                       <td>status</td>
                       <td>2011/04/25</td>
                       <td>status </td>
                   </tr>
                </tbody>
            </table>
       </div>
   <script>
       $(document).ready(function() {
           // init datatable on #example table
           $('#example').DataTable();
       });
   </script>
   </body>
   </html>       

更新

将其与您的观点相结合

   <table id="datatable" class="table table-hover">
      @include('sub.index.tbody') // this line is just the detail of the table.
   </table>
    <script>
       $(document).ready(function() {
           $('#datatable').DataTable();
       });
   </script>

假设您使用的是bootstrap,请在<head>标记

中包含这些内容
    <link rel="stylesheet" href="//cdn.datatables.net/plug-ins/9dcbecd42ad/integration/bootstrap/3/dataTables.bootstrap.css">

    <script src="//cdn.datatables.net/plug-ins/9dcbecd42ad/integration/bootstrap/3/dataTables.bootstrap.js"></script>

答案 1 :(得分:2)

我认为最好在客户端处理此问题并使用javascript。 在你的代码中,你的$ users类型是json数组,你可以将它传递给js, 像

//users.index view
<script>
   var users = {{$users}}
    function sortOrderby(typeOrder)
    {
      //logic of sort
    }
</script>
<div>
   <!-- inject your js array in your HTML table 
</div>

并在您的视图中使用此变量。 定义标题点击的操作,并为这些操作调用sortOrderby函数

检查Sorting an array of JavaScript objects 排序

答案 2 :(得分:0)

尝试:

$users = DB::table('*tablename*')->orderBy('*columnname*', 'asc')->get();

同样适用于姓名,电子邮件,类型,群组和状态。您只需指定tablename和columnname

即可

编辑:

$users = DB::table('*tablename*')->orderBy('*username*', 'asc')->get();
$users = DB::table('*tablename*')->orderBy('*name*', 'asc')->get();
$users = DB::table('*tablename*')->orderBy('*email*', 'asc')->get();
$users = DB::table('*tablename*')->orderBy('*type*', 'asc')->get();
$users = DB::table('*tablename*')->orderBy('*group*', 'asc')->get();
$users = DB::table('*tablename*')->orderBy('*status*', 'asc')->get();
return View::make('users.index')
    ->with('users',$users);

如果它们不在同一个表中,您只需更改表名并检查所使用的列名是否正确