dongsi5381 2018-08-17 10:34
浏览 51

分页,搜索和排序在使用ajax的codeigniter中的jquery数据表中不起作用

Currently i am working on eCommerce website in that i have to display all data from database to datatable. Data is coming properly in datatable but searching, sorting and pagination is not working.If any body know solution than please help. Below is my code Controller.php

Public function transaction_data()
    {
        $id =  $this->session->Vendordetail['id'];
        $transactionData = $this->Mdl_vendor_payment->get_order_list($id);

        $requestData= $_REQUEST;

        $totalData = count($transactionData);
        $totalFiltered = count($transactionData);

        $return_days = $this->Mdl_common->get_setting('shipping_charge');

        foreach($transactionData as $transaction){
            $product = $this->Mdl_common->product_id($transaction['prodouct_id']);

            $data['order_id'] = $transaction['order_id'];
            $data['created'] = $transaction['created'];
            if($transaction['status'] == 5){
                $data['status'] = '<h5><span class="label label-danger">Cancelled</span></h5>';
            }else if($transaction['status'] == 4){
                $data['status'] = '<h5><span class="label label-default">Return</span></h5>';
            }else if($transaction['status'] == 3){
                $data['status'] = '<h5><span class="label label-success">Success</span></h5>';
            }else if($transaction['status'] == 2){
                $data['status'] = '<h5><span class="label label-primary">Dispatch</span></h5>';
            }else if($transaction['status'] == 1){
                $data['status'] = '<h5><span class="label label-primary">Ready To Dispatch</span></h5>';
            }else{
                $data['status'] = '<h5><span class="label label-primary">Approve</span></h5>';
            }
            $data['price'] = '<i class="fa fa-rupee"></i> '.$transaction['price']*$transaction['qty'];
            $data['settlement_price'] = '<i class="fa fa-rupee"></i> '.$transaction['settlement_price']*$transaction['qty'];
            $shipping_charge = $return_days['value'] * ($transaction['qty'] * $product['weight']);
            $data['shipping_charge'] = '<i class="fa fa-rupee"></i> '.$shipping_charge;

            $data['commission_fee'] = ($transaction['price']*$transaction['qty'])-($transaction['settlement_price']-$transaction['qty']);

            $data['payable_amount'] = ($transaction['settlement_price']*$transaction['qty'])-$shipping_charge;

            $data['order'] = $transaction;
            $data['product'] = $product;


            $assignment_datas[] = $data;
        }

        $json_data = array(
            "draw"            => intval( $requestData['draw'] ), 
            "recordsTotal"    => intval( $totalData ), 
            "recordsFiltered" => intval( $totalFiltered ), 
            "data"            => $assignment_datas 
        );
        echo json_encode($json_data);
        die;
    } 

Below is the code for view file View.php

$(document).ready(function() {
    var dt = $('#datatable_example').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url":"<?php echo base_url(); ?>index.php/Vendor_payment/transaction_data",
            "type":"POST",
            },
        "columns": [
            {
                "class":          "details-control",
                "orderable":      false,
                "data":           null,
                "defaultContent": ""
            },
            { "data": "order_id" },
            { "data": "created" },
            { "data": "status" },
            { "data": "price" },
            { "data": "settlement_price" },
            { "data": "shipping_charge" }
        ],
        "order": [[0, 'asc']]
    } );

    // Array to track the ids of the details displayed rows
    var detailRows = [];

    $('#datatable_example tbody').on( 'click', 'tr td.details-control', function () {
        var tr = $(this).closest('tr');
        var row = dt.row( tr );
        var idx = $.inArray( tr.attr('id'), detailRows );

        if ( row.child.isShown() ) {
            tr.removeClass( 'details' );
            row.child.hide();

            // Remove from the 'open' array
            detailRows.splice( idx, 1 );
        }
        else {
            tr.addClass( 'details' );
            row.child( format( row.data() ) ).show();

            // Add to the 'open' array
            if ( idx === -1 ) {
                detailRows.push( tr.attr('id') );
            }
        }
    } );

    // On each draw, loop over the `detailRows` array and show any child rows
    dt.on( 'draw', function () {
        $.each( detailRows, function ( i, id ) {
            $('#'+id+' td.details-control').trigger( 'click' );
        } );
    } );
} );
  • 写回答

1条回答 默认 最新

  • doufei4923 2019-08-21 10:49
    关注

    This code is work fine for me...

    In view page:

    <table id="user_datatable" class="table table-bordered table-striped">
                    <thead>
                        <tr>
                            <th style="width: 5%;">ID</th>
                            <th>Client name</th>
                            <th>Mobile</th>
                            <th>Email</th>
                            <th class="col-md-2">Action</th>
                        </tr>
                    </thead>
                    <tbody></tbody>
                </table>
    
    <script type="text/javascript">
        $(document).ready(function () {
            $('#user_datatable').DataTable({
                'pageLength': 1,
                'processing': true,
                'serverSide': true,
                'serverMethod': 'post',
                'ajax': {
                    'url': '<?php echo base_url(); ?>user/userList'
                },
                'columns': [{
                        data: 'id'
                    },
                    {
                        data: 'name'
                    },
                    {
                        data: 'mobile'
                    },
                    {
                        data: 'email'
                    },
                    {
                        data: 'action'
                    },
                ]
            });
        });
    </script>
    

    In Controller page

    public function userList() {
            $postData = $this->input->post();
            $data = $this->Data_model->getUserList($postData);
            echo json_encode($data);
        }
    

    In Model page

     Set the table name in $table variable
    // $table = 'clients';
    
    Add column name whatever you add in datatable 
    
    $searchQuery = " (name like '%".$searchValue."%' or mobile like '%".$searchValue."%' or email like'%".$searchValue."%' ) ";
    
    function getUserList($postData=null) {
        $response = array();
        $table_name = 'clients';
    
        ## Read value
        $draw = $postData['draw'];
        $start = $postData['start'];
        $rowperpage = $postData['length']; // Rows display per page
        $columnIndex = $postData['order'][0]['column']; // Column index
        $columnName = $postData['columns'][$columnIndex]['data']; // Column name
        $columnSortOrder = $postData['order'][0]['dir']; // asc or desc
        $searchValue = $postData['search']['value']; // Search value
    
         ## Search 
        $searchQuery = "";
        if($searchValue != ''){
            $searchQuery = " (name like '%".$searchValue."%' or mobile like '%".$searchValue."%' or email like'%".$searchValue."%' ) ";
        }
    
        ## Total number of records without filtering
        $this->db->select('count(*) as allcount');
        $records = $this->db->get($table_name)->row();
        $totalRecords = $records->allcount;
    
         ## Total number of record with filtering
        $this->db->select('count(*) as allcount');
        if($searchValue != '')
            $this->db->where($searchQuery);
            $records = $this->db->get($table_name)->row();
            $totalRecordwithFilter = $records->allcount;
    
        ## Fetch records
        $this->db->select('*');
        if($searchValue != '')
            $this->db->where($searchQuery);
            $this->db->order_by($columnName, $columnSortOrder);
            $this->db->limit($rowperpage, $start);
            $records = $this->db->get($table_name)->result();
    
        $data = array();
    
        foreach($records as $key => $record) {
            $data[] = array( 
                "id"=> ($key + 1),
                "name"=>$record->name,
                "mobile"=>$record->mobile,
                "email"=>$record->email,
                "action"=>"<a href='".base_url()."user/update/".$record->id."' type='button' class='btn btn-success'>Update</a><a href='".base_url()."user/delete/".$record->id."' type='button' class='btn btn-danger' style='margin-left: 5px;'>Delete</a>",
            ); 
        }
    
         ## Response
        $response = array(
            "draw" => intval($draw),
            "recordsTotal" => $totalRecordwithFilter,
            "recordsFiltered" => $totalRecords,
            "data" => $data
        );
    
        return $response; 
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 找人不需要人工智能回答的gamit解算后做形变分析
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥15 统计大规模图中的完全子图问题
  • ¥15 使用LM2596制作降压电路,一个能运行,一个不能
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错