0

我正在尝试在使用 cakephp v1.3 创建的 web 应用程序中实现jqgrid v3.7

我的控制器代码如下

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>

现在,当我加载索引操作时,我得到了很多错误

未定义索引:rows 未定义索引:sidx 未定义索引:sord 等

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

如何在我的应用程序中包含 jqgrid?请帮我做这件事。

谢谢

4

3 回答 3

1

我自己不使用 cakephp,但可能有两个链接 http://www.trirand.com/blog/?page_id=393/help/integration-of-cakephp-and-jqgrid-tutorial/http://www。 trirand.com/blog/?page_id=393/help/how-to-integrate-jqgrid-with-cakephp/ 可以为您提供帮助。

于 2010-07-01T11:44:22.207 回答
1

你得到的错误看起来像 PHP 错误。尝试debug($this->params);在视图文件的顶部放置一条语句,以查看控制器吐出的内容。

于 2010-07-01T13:19:29.697 回答
1

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

这是正确的完整工作代码:


这是控制器代码:


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');


2.) 在您的 VIEW 文件中添加以下 javascript 代码

<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>


如果您仍然遇到上述代码的任何问题,请告诉我。

于 2010-07-12T07:00:59.480 回答