开发者

Jqgrid + CodeIgniter

I tried to make jqgrid work with codeigniter, but I could not do it, I only want to show the data from the table in json format... but nothing happens.. but i dont know what i am doing wrong, i cant see the table with the content i am calling.

my controller

class Grid extends Controller
{

  public function f()
  {

       $this->load->model('dbgrid');
       $var['grid'] =  $this->dbgrid->getcontentfromtable();

       foreach($var['grid'] as $row) {
        $responce->rows[$i]['id']=$row->id;
        $responce->rows[$i]['cell']=array($row->id,$row->id_catalogo);

       }
     $json = json_encode($responce);
       $this->load->view('vgrid',$json);



  } 


  function load_view_grid()
  {

    $this->load->view('vgrid');


  }


}

my model

class Dbgrid extends Model{

function getcontentfromtable()
{


  $sql = 'SELECT * FROM anuncios';
  $query = $this->db->query($sql);
  $result = $query->result();


  return $result;   
}

my view(script)

$(document).ready(function() { 
 jQuery("#list27").jqGrid({
        url:'http://localhost/sitio/index.php/grid/f',
        datatype: "json",
        mtype: "post",
        height: 255,
        width: 600,
        colNames:['ID','ID_CATALOGO'],
        colModel:[
            {name:'id',index:'id', width:65, sorttype:'int'},
            {name:'id_catalogo',index:'id_catalogo', sorttype:'int'}


        ],
        rowNum:50,
        rowTotal: 2000,
        rowList : [20,30,50],
        loadonce:true开发者_如何学C,
        rownumbers: true,
        rownumWidth: 40,
        gridview: true,
        pager: '#pager27',
        sortname: 'item_id',
        viewrecords: true,
        sortorder: "asc",
        caption: "Loading data from server at once" 
    });

}); 

hope someone help me


The data produced by the server which you post in the comment

{"rows":{"":{"id":"11","cell":["11","225101503"]}}} 

have wrong format. The output should looks like

{ 
  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz",
  "rows" : [
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
      ...
  ]
}

(see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_data). So it should be at least like

{"rows":[{"id":"11","cell":["11","225101503"]}]}

In general if you define a jsonReader, you will be able to read almost any data. The data which you produce can be readed only by jsonReader defined with the functions (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function and jquery with ASP.NET MVC - calling ajax enabled web service). The simplest way for you will be to change your server code to produce the data in a standard formet (see above), which can be readed by the standard jsonReader.

And one more small remark. Using of sorttype has no effect for datatype: "json". Parameter sorttype works only with sorting of local data. In case of datatype: "json" the server will be responsible for correct data sorting. jqGrid send to the server only the name of column, which user choose for the data sorting.


I am a new programmer in code igniter. I am trying to integrate jqgrid with code igniter and after seven hours i came to a successful point where jqgrid and code igniter is fully integrated with search option.

At first, write a model in your application/model directory. The code is......

class JqgridSample extends CI_Model {

  function getAllData($start,$limit,$sidx,$sord,$where){
    $this->db->select('id,name,email,passport,phone,fax,address');
    $this->db->limit($limit);
    if($where != NULL)
        $this->db->where($where,NULL,FALSE);
    $this->db->order_by($sidx,$sord);
    $query = $this->db->get('info',$limit,$start);

    return $query->result();
  }
} 

Then, write a controller in your application/controller directory. The code is

class Demo extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->model('JqgridSample');
}

function jqGrid(){
$this->load->view('showGrid');
}

function loadData(){
    $page = isset($_POST['page'])?$_POST['page']:1; 
    $limit = isset($_POST['rows'])?$_POST['rows']:10; 
    $sidx = isset($_POST['sidx'])?$_POST['sidx']:'name'; 
    $sord = isset($_POST['sord'])?$_POST['sord']:'';         
    $start = $limit*$page - $limit; 
    $start = ($start<0)?0:$start; 

    $where = ""; 
    $searchField = isset($_POST['searchField']) ? $_POST['searchField'] : false;
    $searchOper = isset($_POST['searchOper']) ? $_POST['searchOper']: false;
    $searchString = isset($_POST['searchString']) ? $_POST['searchString'] : false;

    if ($_POST['_search'] == 'true') {
        $ops = array(
        'eq'=>'=', 
        'ne'=>'<>',
        'lt'=>'<', 
        'le'=>'<=',
        'gt'=>'>', 
        'ge'=>'>=',
        'bw'=>'LIKE',
        'bn'=>'NOT LIKE',
        'in'=>'LIKE', 
        'ni'=>'NOT LIKE', 
        'ew'=>'LIKE', 
        'en'=>'NOT LIKE', 
        'cn'=>'LIKE', 
        'nc'=>'NOT LIKE' 
        );
        foreach ($ops as $key=>$value){
            if ($searchOper==$key) {
                $ops = $value;
            }
        }
        if($searchOper == 'eq' ) $searchString = $searchString;
        if($searchOper == 'bw' || $searchOper == 'bn') $searchString .= '%';
        if($searchOper == 'ew' || $searchOper == 'en' ) $searchString = '%'.$searchString;
        if($searchOper == 'cn' || $searchOper == 'nc' || $searchOper == 'in' || $searchOper == 'ni') $searchString = '%'.$searchString.'%';

        $where = "$searchField $ops '$searchString' "; 

    }

    if(!$sidx) 
        $sidx =1;
    $count = $this->db->count_all_results('info'); 
    if( $count > 0 ) {
        $total_pages = ceil($count/$limit);    
    } else {
        $total_pages = 0;
    }

    if ($page > $total_pages) 
        $page=$total_pages;
    $query = $this->JqgridSample->getAllData($start,$limit,$sidx,$sord,$where); 
    $responce->page = $page;
    $responce->total = $total_pages;
    $responce->records = $count;
    $i=0;
    foreach($query as $row) {
        $responce->rows[$i]['id']=$row->id;
        $responce->rows[$i]['cell']=array($row->name,$row->email,$row->passport,$row->phone,$row->fax,$row->address);
        $i++;
    }

    echo json_encode($responce);
}
}

And finally you write a view in your application/views directory..

<head>

    <link rel="stylesheet" type="text/css" href="<?php echo base_url()?>application/views/css/custom-theme/jquery-ui-1.8.16.custom.css" />

    <link type="text/css" href="<?php echo base_url()?>application/views/css/ui.jqgrid.css" rel="stylesheet" />

    <link type="text/css" href="<?php echo base_url()?>application/views/css/plugins/searchFilter.css" rel="stylesheet" />

    <style>
        html, body {
            margin: 0;
            padding: 0;
            font-size: 75%;
        }
    </style>

    <script type="text/javascript" src="<?php echo base_url(); ?>application/views/js/jquery-1.5.2.min.js"></script>

    <script type="text/javascript" src="<?php echo base_url(); ?>application/views/js/i18n/grid.locale-en.js"></script>

    <script type="text/javascript" src="<?php echo base_url(); ?>application/views/js/jquery.jqGrid.min.js"></script>


    <title>Codeigniter With JQGrid</title>
</head>
<body>
    <center>
        <h1>Codeigniter With JQGrid</h1>
    <?php
        $ci =& get_instance();
        $base_url = base_url();
    ?>
    <table id="list"></table><!--Grid table-->
    <div id="pager"></div>  <!--pagination div-->
    </center>
</body>


<script type="text/javascript">
        $(document).ready(function (){
            jQuery("#list").jqGrid({
                url:'<?=$base_url.'index.php/demo/loadData'?>',      //another controller function for generating data
                mtype : "post",             //Ajax request type. It also could be GET
                datatype: "json",            //supported formats XML, JSON or Arrray
                colNames:['Name','Email','Passport','Phone','Fax','Address'],       //Grid column headings
                colModel:[
                    {name:'name',index:'name', width:100, align:"left"},
                    {name:'email',index:'email', width:150, align:"left"},
                    {name:'passport',index:'passport', width:100, align:"right"},
                    {name:'phone',index:'phone', width:100, align:"right"},
                    {name:'fax',index:'fax', width:100, align:"right"},
                    {name:'address',index:'address', width:100, align:"right"},
                ],
                rowNum:10,
                width: 750,
                //height: 300,
                rowList:[10,20,30],
                pager: '#pager',
                sortname: 'id',
                viewrecords: true,
                rownumbers: true,
                gridview: true,
                caption:"List Of Person"
            }).navGrid('#pager',{edit:false,add:false,del:false});
        });
    </script>

For the view file for myself i create two folder in views directory js and css. and in js foder i place the jquery-1.5.2.min.js, grid.locale-en.js(views/js/i18n/), jquery.jqGrid.min.js which you find in jqgrid package.

In a same way jquery-ui-1.8.16.custom.css, ui.jqgrid.css needed that also is available in jqgrid package.

for running full process you have to create a database named jqgrid_sample and in the database create a table named info contains fields...

id

name

email

passport

phone

fax

address

thats it. enjoy. good bye.


These Solution is Cover full JqGrid Data Load and CRUD. This is Very Simple Task. Just go through the following steps and enjoy.

  1. Write a Model just like below

    class gridAction_model extends CI_Model {
    
    public function __construct() {
        $this->load->database();
    }
    
    function getAllTeacherDesignation($start, $limit, $sidx, $sord, $where) {
    
        $this->db->select('DesignationId,DesignationName,Description,Status');
        $this->db->limit($limit);
        if ($where != NULL)
            $this->db->where($where, NULL, FALSE);
        $this->db->order_by($sidx, $sord);
        $query = $this->db->get('TeacherDesignation', $limit, $start);
    
        return $query->result();
    }
    
    function insert_teacherDesignation($data) {
        return $this->db->insert('TeacherDesignation', $data);
    }
    
    function update_teacherDesignation($id, $data) {
        $this->db->where('DesignationId', $id);
        return $this->db->update('TeacherDesignation', $data);
    }
    
    function delete_teacherDesignation($id) {
        $this->db->where('DesignationId', $id);
        $this->db->delete('TeacherDesignation');
    }
    

    }

  2. Now Add the following Method to the Controller Class

        class grid_action extends CI_Controller {
    
    public function __construct() {
        parent::__construct();
        $this->load->helper("form");
        $this->load->model("gridAction_model");
    }
    
    public function loadTeacherDesignationData() {
    
        $page = isset($_POST['page']) ? $_POST['page'] : 1;
        $limit = isset($_POST['rows']) ? $_POST['rows'] : 10;
        $sidx = isset($_POST['sidx']) ? $_POST['sidx'] : 'DesignationName';
        $sord = isset($_POST['sord']) ? $_POST['sord'] : '';
        $start = $limit * $page - $limit;
        $start = ($start < 0) ? 0 : $start;
    
        $where = "";
        $searchField = isset($_POST['searchField']) ? $_POST['searchField'] : false;
        $searchOper = isset($_POST['searchOper']) ? $_POST['searchOper'] : false;
        $searchString = isset($_POST['searchString']) ? $_POST['searchString'] : false;
    
        if ($_POST['_search'] == 'true') {
            $ops = array(
                'eq' => '=',
                'ne' => '<>',
                'lt' => '<',
                'le' => '<=',
                'gt' => '>',
                'ge' => '>=',
                'bw' => 'LIKE',
                'bn' => 'NOT LIKE',
                'in' => 'LIKE',
                'ni' => 'NOT LIKE',
                'ew' => 'LIKE',
                'en' => 'NOT LIKE',
                'cn' => 'LIKE',
                'nc' => 'NOT LIKE'
            );
            foreach ($ops as $key => $value) {
                if ($searchOper == $key) {
                    $ops = $value;
                }
            }
            if ($searchOper == 'eq')
                $searchString = $searchString;
            if ($searchOper == 'bw' || $searchOper == 'bn')
                $searchString .= '%';
            if ($searchOper == 'ew' || $searchOper == 'en')
                $searchString = '%' . $searchString;
            if ($searchOper == 'cn' || $searchOper == 'nc' || $searchOper == 'in' || $searchOper == 'ni')
                $searchString = '%' . $searchString . '%';
    
            $where = "$searchField $ops '$searchString' ";
        }
    
        if (!$sidx)
            $sidx = 1;
        $count = $this->db->count_all_results('TeacherDesignation');
        if ($count > 0) {
            $total_pages = ceil($count / $limit);
        } else {
            $total_pages = 0;
        }
    
        if ($page > $total_pages)
            $page = $total_pages;
    
        $query = $this->gridAction_model->getAllTeacherDesignation($start, $limit, $sidx, $sord, $where);
    
        $responce = new stdClass;
    
        $responce->page = $page;
        $responce->total = $total_pages;
        $responce->records = $count;
        $i = 0;
    
        foreach ($query as $row) {
            $responce->rows[$i]['id'] = $row->DesignationId;
            $responce->rows[$i]['cell'] = array($row->DesignationId, $row->DesignationName, $row->Description, $row->Status);
            $i++;
        }
        echo json_encode($responce);
    }
    
    public function crudTeacherDesignation() {
    
        $oper = $this->input->post('oper');
        $id = $this->input->post('id');
        $DesignationId = $this->input->post('DesignationId');
        $DesignationName = $this->input->post('DesignationName');
        $Description = $this->input->post('Description');
        $Status = $this->input->post('Status');
    
        switch ($oper) {
            case 'add':
                $data = array('DesignationId' => $DesignationId, 'DesignationName' => $DesignationName, 'Description' => $Description, 'Status' => $Status);
                $this->gridAction_model->insert_teacherDesignation($data);
                break;
            case 'edit':
                $data = array('DesignationId' => $DesignationId, 'DesignationName' => $DesignationName, 'Description' => $Description, 'Status' => $Status);
                $this->gridAction_model->update_teacherDesignation($DesignationId, $data);
                break;
            case 'del':
                $this->gridAction_model->delete_teacherDesignation($DesignationId);
                break;
        }
    }  
    

    }

  3. Add the Script at View

     <table id="gridDesignation"> </table>
    
     <div id="pager"> </div>
    
    
    
    
    
            $(document).ready(function () {
    
        jQuery("#gridDesignation").jqGrid({
            url:'<?php echo base_url(); ?>grid_action/loadTeacherDesignationData',                
            mtype : "post",              //Ajax request type. It also could be GET
            datatype: "json",            //supported formats XML, JSON or Arrray
            colNames:['Designation ID','Designation Name','Description','Status'],       //Grid column headings
            colModel:[
                {name:'DesignationId',index:'DesignationId', width:100, align:"left", editable:true, editrules:{required:true}},
                {name:'DesignationName',index:'DesignationName', width:150, align:"left",editable:true,editrules:{required:true}},
                {name:'Description',index:'Description', width:100, align:"left", sortable:false, editable:true,editrules:{required:true}},
                {name:'Status',index:'Status', width:100, align:"right",editable:true,editrules:{required:true}, 
                    edittype:'select', editoptions:{value:"1:Active;0:InActive"}
                }
            ],
            rownumbers: true,
            rowNum:10,
            width: 750,
            height: "100%",
            rowList:[10,20,30],
            pager: jQuery('#pager'),
            sortname: 'DesignationName',
            autowidth: true,
            viewrecords: true,            
            gridview: true,  
            ondblClickRow: function(id){              
                $("#gridDesignation").editGridRow(id, {closeAfterEdit:true,mtype:'POST'});                
            },
            sortorder: "desc",       
            editurl: '<?php echo base_url() ?>grid_action/crudTeacherDesignation', //URL Process CRUD
            multiselect: false,
            caption:"List Of Teacher Designation"
        }).navGrid('#pager',
        {view:true,edit:true,add:true,del:true},
        {closeOnEscape:true},
        {closeOnEscape:true},
        {closeOnEscape:true},
        {closeOnEscape:true},
        {
            closeOnEscape:true,closeAfterSearch:false,multipleSearch:false, 
            multipleGroup:false, showQuery:false,
            drag:true,showOnLoad:false,sopt:['cn'],resize:false,
            caption:'Search Record', Find:'Search', 
            Reset:'Reset Search'
        }
    );        
    
    });
    


Please be warned the example code of triand used here many times has SQL-injection risk. before generating $where string u should escape your searchString like;

replace this:

$where = "$searchField $ops '$searchString' "; 

with this:

$searchString = mysql_real_escape_string($searchString);
$where = "$searchField $ops '$searchString' "; 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜