代码之家  ›  专栏  ›  技术社区  ›  Gaurav Sharma

如何在使用cakephp1.3创建的web应用程序中实现jqgridv3.7

  •  0
  • Gaurav Sharma  · 技术社区  · 16 年前

    我正在努力实现 jqgrid v3.7 在我的webapplication中使用cakephp v1.3创建。

    我的控制器代码如下

    function admin_index()
    {
        // get how many rows we want to have into the grid - rowNum parameter in the grid
        $limit = $this->params['url']['rows'];
    
        // get index row - i.e. user click to sort. At first time sortname parameter -
        // after that the index from colModel
        $sidx = $this->params['url']['sidx'];
    
        // sorting order - at first time sortorder
        $sord = $this->params['url']['sord'];
    
        // if we not pass at first time index use the first column for the index or what you want
        if( !$sidx ) $sidx = 1;
    
        // calculate the number of rows for the query. We need this for paging the result
        $row = $this->Constituency->find('count');
        $count = $row;
    
        // calculate the total pages for the query
        if( $count > 0 )
        {
            $total_pages = ceil($count / $limit);
        }
        else
        {
            $total_pages = 0;
        }
    
        // if for some reasons the requested page is greater than the total
        // set the requested page to total page
        if( $page > $total_pages ) $page = $total_pages;
    
        // calculate the starting position of the rows
        $start = $limit * $page - $limit;
    
        // if for some reasons start position is negative set it to 0
        // typical case is that the user type 0 for the requested page
        if( $start < 0 ) $start = 0;
    
        // the actual query for the grid data
        $limit_range = $start . "," . $limit;
        $sort_range = $sidx . " " . $sord;
        //$result = $this->Constituency->findAll(null, "id,name", $sort_range, $limit_range, 1, null);
        $this->Constituency->recursive = -1;
        $result = $this->Constituency->find('all', array(
            'fields' => array('id', 'name'),
            'order' => $sidx,
            'limit' => $start .",". $limit_range
        ));
    
        $i=0;
        $response->page = $page;
        $response->total = $total_pages;
        $response->records = $count;
    
        foreach($result as $result)
        {
            $response->rows[$i]['id'] = $result['Constituency']['id'];
            $responce->rows[$i]['cell']=array($result['Constituency']['id'],$result['Constituency']['name']);
            $i++;
        }
    
        echo json_encode($response);
    }
    

    视图文件包含以下代码

    $this->Html->css('ui.jqgrid');
    $this->Html->script('jquery.jqGrid.min');
    
    <script type="text/javascript">
        $(document).ready(function(){
            $("#list").jqGrid(
            {
                url:'<?php echo $this->Html->url(array("controller" => "constituencies", "action" => "index")); ?>',
                datatype: "json",
                colNames:['Id','Name'],
                colModel:[
                    {name:'id',index:'id', width:55},
                    {name:'name',index:'name', width:90},
                ],
                rowNum:10,
                rowList:[10,20,30],
                pager: jQuery('#pager'),
                sortname: 'id',
                viewrecords: true,
                sortorder: "desc",
                caption:"Constituencies"
            });
            $("#list").navGrid("#pager",{edit:false,add:false,del:false});
        })
    </script>
    
    <div class="constituencies index">
        <h2><?php __('Constituencies'); ?></h2>
        <table id="list"  class="scroll"></table>
        <div id="pager"  class="scroll" ></div>
    </div>
    

    未定义索引:行 未定义索引:sord

    有人在基于cakephp的应用程序中包含jqgrid吗?

    请帮我做这个。

    3 回复  |  直到 16 年前
        2
  •  1
  •   Leo    16 年前

    debug($this->params); 语句来查看控制器输出的内容。

        3
  •  1
  •   Gaurav Sharma    16 年前

    选区模型的查找函数中分配了一些不正确的值。

    以下是正确的完整工作代码:



    1.)将显示网格的函数留空如下

    function index()
    {
    
    }
    


    2.)然后创建一个新函数,用如下数据显示网格:

    function admin_showGrid()
    {
        $this->autoRender = false;
    
        // get how many rows we want to have into the grid - rowNum parameter in the grid
        $limit = $this->params['url']['rows'];
    
        // get index row - i.e. user click to sort. At first time sortname parameter -
        // after that the index from colModel
        $sidx = $this->params['url']['sidx'];
    
        // sorting order - at first time sortorder
        $sord = $this->params['url']['sord'];
    
        $page = $this->params['url']['page'];
    
        // if we not pass at first time index use the first column for the index or what you want
        if( !$sidx ) $sidx = 1;
    
        // calculate the number of rows for the query. We need this for paging the result
        $row = $this->{Model_Name}->find('count');
        $count = $row;
    
        // calculate the total pages for the query
        if( $count > 0 )
        {
            $total_pages = ceil($count / $limit);
        }
        else
        {
            $total_pages = 0;
        }
    
        // if for some reasons the requested page is greater than the total
        // set the requested page to total page
        if( $page > $total_pages ) $page = $total_pages;
    
        // calculate the starting position of the rows
        $start = $limit * $page - $limit;
    
        // if for some reasons start position is negative set it to 0
        // typical case is that the user type 0 for the requested page
        if( $start < 0 ) $start = 0;
    
        // the actual query for the grid data
        $limit_range = $start . "," . $limit;
        $sort_range = $sidx . " " . $sord;
        //$result = $this->{Model_Name}->findAll(null, "id,name", $sort_range, $limit_range, 1, null);
        $this->{Model_Name}->recursive = -1;
        $result = $this->{Model_Name}->find('all', array(
            'fields' => array('id', 'name'),
            'order' => $sort_range,
            'limit' => $limit_range
        ));
    
        $i = 0;
        $response->page = $page;
        $response->total = $total_pages;
        $response->records = $count;
    
        foreach($result as $result)
        {
            $response->rows[$i]['id'] = $result['{Model_Name}']['id'];
            $response->rows[$i]['cell'] = array($result['{Model_Name}']['id'], $result['{Model_Name}']['name']);
            $i++;
        }
    
        echo json_encode($response);
    
        //writing exit() is necessary.
        exit();
    }
    





    1.)包括必要的文件

    echo $this->Html->css('ui.jqgrid');
    
    echo $this->Html->script('grid.locale-en');
    echo $this->Html->script('jquery.jqGrid.min');
    


    <script type="text/javascript">
    jQuery(document).ready(function(){
        jQuery("#list").jqGrid(
        /* '#list' is the ID of the table in which you want populated results */
        {
            url:'<?php echo $this->Html->url(array("controller" => "{Controller_Name}", "action" => "{Action_Name}")); ?>',
            datatype: "json",
            mtype: "GET",
            colNames:['Id','Name'],
            colModel:[
                {name:'id',index:'id', width:55},
                {name:'name',index:'name', width:90},
            ],
            rowNum:10,
            rowList:[10,20,30],
            pager: jQuery('#pager'), /* id of the pagination element */
            sortname: 'id',
            viewrecords: true,
            sortorder: "asc",
            caption:"Enter table Heading or the name you want to show for the table",
            height:"auto",
            autowidth: true
        });
        jQuery("#list").navGrid("#pager",{edit:false,add:false,del:false});
    })
    </script>
    


    3.)最后在同一视图文件中显示HTML

    <table id="list" style="height:auto;"></table>
    <div id="pager"></div>
    


    推荐文章