如何使用数据库而不是localstore jqgrid保存网格的状态

时间:2013-01-11 00:03:34

标签: php jqgrid grid

我有一个使用jqGrid PHP API和Choose Columns附件(显示/隐藏列)创建的网格。我需要添加保存网格状态的功能(在进行任何过滤,更改列顺序或隐藏任何列之后)。

我见过几个使用cookie或localStore来保存网格状态的帖子。但是,我希望能够将其保存在数据库中,以便以后在用户下次登录系统时进行恢复。

这是我对网格的PHP代码:

    require_once JQGRID_PATH."php/jqGrid.php";
    require_once JQGRID_PATH."php/jqGridPdo.php";

    // Connection to the server
    $conn = new PDO(DB_DSN,DB_USER,DB_PASS);

    // Create the jqGrid instance
    $grid = new jqGridRender($conn);

    // Write the SQL Query
    $grid->SelectCommand = 'SELECT timestamp, user_name, action_type FROM audit_log';

    // set the ouput format to json
    $grid->dataType = 'json';

    // Let the grid create the model
    $grid->setColModel();

    // Set the url from where we obtain the data
    $grid->setUrl('audit_log');

    // Set grid caption using the option caption
    $grid->setGridOptions(array(
        "caption"=>"Audit Log Report",
        "height"=>470,
        "width" => 1100,
        "rowNum"=>25,
        "shrinkToFit"=>false,
        "sortname"=>"timestamp",
        "sortorder"=>"desc",
        "rowList"=>array(25,50,100)
    )); 

    $grid->navigator = true;
    $grid->setNavOptions(
        'navigator', array(
            "excel"=>true,
            "add"=>false,
            "edit"=>false,
            "view"=>false,
            "del"=>false,
            "pdf"=>true
        )
    );

    $grid->renderGrid('#grid','#pager', true, null, null, true, true, true);

此外,我见过的使用localStore保存网格状态的帖子都是使用jQuery而不是jqGrid PHP Suite构建的。关于如何使用jqGrid PHP API完成此任务的任何想法?

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您的网格选项是一个数组,为什么不只是序列化该数组并将其保存到与该用户关联的记录中的数据库?

如果你想变得非常花哨,可以使用persist()load()等方法扩展jqGridRender类,以将选项保存到数据库并重新加载。

所以假设你有某种用户对象,也许你会这样做:

$grid = new persistingJQGrid($conn); // instantiate your special extended class
$grid->setUser($user);
$grid->load();
...

或坚持:

$grid->persist()

答案 1 :(得分:0)

the answer中,我展示了如何保存一些代表localStorage中网格状态的信息,以及如何使用这些信息创建网格。在答案中,您可以找到saveObjectInLocalStorage方法,该方法使用window.localStorage.setItem来保存表示本地存储中的状态的对象。您需要将信息保存在数据库中,只需将window.localStorage.setItem替换为$.ajax,即将信息发送到服务器。以同样的方式,您可以在初始化网格期间替换getObjectFromLocalStorage使用一次,以使用先前保存的数据库中保存的读取来指导数据的初始化。因此,可以很容易地将方法修改为保持网格状态的任何位置。