0

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

我看过几篇使用 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 完成此任务的任何想法?

任何帮助将不胜感激。

谢谢!

4

2 回答 2

0

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

如果你想变得非常花哨,你可以使用方法扩展 jqGridRender 类,例如persist()load()将选项持久化到数据库并将它们加载回。

因此,假设您有某种用户对象,也许您会这样做:

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

或坚持时:

$grid->persist()
于 2013-01-11T00:07:12.540 回答
0

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

于 2013-01-11T09:04:46.393 回答