2011-05-28 32 views
1

这个问题是关于一个后台数据列表,用样订货变量,页面排名,过滤器等。传递变量列出

我使用GET传递页面之间的变量,但是我遇到了很多麻烦,并且改变为在会话中存储这些变量。我不介意书签问题,因为它是一个后台工具。一切都很好,直到今天:我正在查看一个列表,我更换了一个过滤器,然后我想回到以前的结果。我的自然姿态是按下浏览器“返回”按钮。当然,我没有被拿到以前的结果,因为我已经覆盖了会议。

那么,这是最好的方法来做到这一点?不仅要记住用户的使用体验,还要编码设施和避免错误。

麻烦我发现,当我通过URL传递的变量,特别是在两个或三个层次列表:

  • 有许多变数,许多 地方,我必须把它们:链接 到的编辑工作项目,表单的动作, 反向链接,页面导航链接...
  • 某些变量可以具有相同的名称(即每个级别将有一个 页数)。这很容易造成 错误,特别是当您的 必须在 以前的脚本中编写新内容时。
  • 我不能只使用 查询字符串,因为有 案件中,我必须要改变一些 VAR的值(即,在寻呼 导航链接,我已经改变 number_of_pag变量)。

我想最好的解决方案不是“嘿,如果你多加注意,你不会犯这些错误”。有没有我没有发现的系统?伟大的人如何做到这一点?

也许实现方法来自动呈现链接?

谢谢。

回答

1

这些类型的变量的地方是查询字符串。不仅需要书签,而且还需要导航至给定内容,正如您使用后退按钮发现的那样。但是,如果您确实想要缩写查询字符串,请考虑使用标记或标识。

也就是说,在会议上,考虑使用的系统是这样的:

// this represents the query data for one page request 
$_SESSION['queryid']['38hghfd85423lk'] = array(
    'all' => array('the => 'query', 'data'), 
    'is' => array('stored', 'like', 'this) 
); 

// this represents the query data for another page request 
$_SESSION['queryid']['432423jkgrfsd9'] = array(
    // .... other data .... 
); 

现在您的查询字符串像这样:

http://www.example.com/index.php?queryid=38hghfd85423lk 

或者这样:

http://www.example.com/index.php?queryid=432423jkgrfsd9 

当然,您可以使用GET数据中给出的queryid来标识要使用的查询数据$_SESSION。现在,浏览器后退按钮将起作用。

一个问题可能是,在长时间的会话之后,$_SESSION中的查询缓存将变得相当大。为了缓解这种情况,您可以限制缓存的长度,比如说最后100页。如果用户试图导航超过100页,您会注意到他们的queryid不再存在,并且能够通知他们页面已过期。

如果您想支持书签,可以将queryids和数据保存到数据库。当然,你可能仍然需要考虑修剪方法 - 比如说,一个月内没有使用的queryids被清除。然而,这可能令用户感到沮丧。