2

我有一个小问题。

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

没关系,当我搜索某些内容时 - 结果的列表分页是通过这样的 URL 完成的:

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

奇迹般有效。

但是当我进入我的一张图片(它是图片库)时,我希望有一个选项可以从我的搜索结果中进入 NEXT 和 PREVIOUS 图像 - 我输入这张图片的那些。

我现在正在以这种方式解决这个案例 - 我有一个名为“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);     

}

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

谢谢!

4

2 回答 2

2

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

于 2012-08-06T21:58:56.700 回答
2

$search_conditions为变量添加索引:

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

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

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

于 2012-08-06T22:31:11.820 回答