在会话中保持搜索表单过滤器

时间:2012-02-27 14:42:31

标签: php design-patterns

我在不同的页面上有不同的搜索表单,例如在页面上我有一个搜索表单 左手边。 http://www.terra-reisen.com/

同样在预览页面上标题区域中的表单 http://www.terra-reisen.com/web/index.cfm/pm/uebersicht#1

并在详细页面上点击“Termine& preise”标签,可以看到另一种形式。 http://www.terra-reisen.com/web/index.cfm/pm/detail/idobjekt/4799/suchartFrom/uebersicht

现在我想开发的是每页的过滤器容器的kinf。我的意思是如果用户在起始页面上过滤一些数据,例如country = Austrie(在searchform中) 并进入预览页面并再次过滤特定城市和详细信息页面 现在我从详细页面进入预览页面,所选过滤器应该自动应用,类似地从预览到开始应该应用所有文件管理器。

是否存在任何设计模式或类似于此类情境的东西?

1 个答案:

答案 0 :(得分:0)

你应该编写一个php脚本来创建一个带过滤器的会话, 此脚本还需要检查该会话是否存在,如果存在,则需要获取过滤器 从中并应用它们。

您可以编写该脚本一次,然后将其包含在所有页面中。 一个例子:

session_start();

$filters = array('location' , 'age' , 'language')

if (!isset($_SESSION['filters'])) {
  if(array_key_exists('set_new_filters', $_POST)) //the name of the submit button of the filters form
  {
     foreach($filters as $filter)
     {
         $session_filters = $filter.":".$_POST[$filter].";";
     }
     $_SESSION['filters'] = $session_filters;
  }
} else {

  $user_filters = explode(";" , $_SESSION['filters']);  
  /*
  $user_filters: Array (
     [0] => location:somevalue
     [1] => age:somevalue
     [2] => language:somevalue
  )
  */
}