如何使用php和Codeigniter存储搜索条件


How to store search conditions with php and Codeigniter?

我有个小问题。

我已经使用CodeIgniter框架用php编写了一个完整的网站。我的模块之一是搜索模块,它包含带关键字的文本输入和带过滤标准的三个选择列表。

没关系,当我搜索某个东西时,结果的列表分页是通过这样的URL完成的:

mysite.com/$keyword/$criteria1/$criteria2/$criteria3/$offset

工作起来很有魅力。

但是,当我输入我的一张图片(它是图片库)时,我想从我的搜索结果中选择进入下一张和上一张图片——我输入这张图片的图片。

我现在正在用这种方式解决这个问题——我有一个名为"search_conditions"的会话表,我在那里存储关键字和我的三个标准的值,但这很不舒服,因为如果有人打开第二个窗口并在那里搜索其他内容,为什么要这样做呢?

然后,他在另一个窗口或选项卡中的所有搜索都得到了相同的条件——因为每次新的搜索,用户都会覆盖会话值。

我的下一个和上一个功能:

public function next($count)
{
    $search = $this->session->userdata('search_conditions'); //getting session table and overwriting it
    $catid = isset($search['catid'])?$search['catid']:'0';
    $brandid = isset($search['brandid'])?$search['brandid']:'0';
    $prodid = isset($search['prodid'])?$search['prodid']:'0';
    $keyword = isset($search['keyword'])?$search['keyword']:'';
    $res = $this->search_model->main_search($keyword,  $catid, $brandid, $prodid, $count, 1);       
}

public function previous($count)
{
    $search = $this->session->userdata('search_conditions');
    $catid = isset($search['catid'])?$search['catid']:'0';
    $brandid = isset($search['brandid'])?$search['brandid']:'0';
    $prodid = isset($search['prodid'])?$search['prodid']:'0';
    $keyword = isset($search['keyword'])?$search['keyword']:'';
    $res = $this->search_model->main_search($keyword,  $catid, $brandid, $prodid, $count-2, 1);     
}

你能给我推荐一些其他更舒适的解决方案吗,因为这似乎不好。。。:)

谢谢!

$search_conditions变量添加索引:

$search_conditions[1]['catid']
$search_conditions[1]['brandid']
...

然后用控制器或配置变量引用它。通过这种方式,您可以允许一个会话存储多个搜索条件。

但我建议您放弃在会话中存储搜索条件。相反,只需将其与URI一起传递即可。在您描述的情况下,会话数据充当中介;您不需要它。使用分页类并将搜索页面编号而不是方向(nextprevious)传递给URI
不要担心URI可能看起来很难看——它只取决于用户搜索的内容,而且共享起来仍然很友好。您唯一关心的是GET字符串是否没有扩展有限的长度。

从next()和previous()函数中的URI中提取段。使用代码点火器URL帮助程序。这应该允许您将不同的搜索条件作为变量传递到下一页,这也将消除您使用会话的需要。