我的问题很小。
我使用CodeIgniter框架在php中编写了一个完整的网站。我的一个模块是搜索模块,它包含带有关键字的文本输入和带有过滤标准的三个选择列表。
没关系,当我正在搜索某些内容时 - 结果的列表分页是通过以下网址完成的:
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);
}
你能推荐一些其他更舒适的解决方案,因为这似乎并不好...... :)
谢谢!
答案 0 :(得分:2)
从下一个()和上一个()函数中的URI中拉出段。使用codeigniter URL帮助程序。这应该允许您将不同的搜索条件作为变量传递到下一页,这也将消除您使用会话的需要。
答案 1 :(得分:2)
为$search_conditions
变量添加索引:
$search_conditions[1]['catid']
$search_conditions[1]['brandid']
...
然后用控制器或配置变量引用它。这样,您可以允许一个会话存储多个搜索条件。
但我会建议您在会话中删除存储搜索条件。相反,只需使用URI传递它。在您描述的情况下,会话数据作为中间人;你不需要它。使用Pagination Class并将搜索页面编号,不方向(next
或previous
)传递给URI。
不要担心URI可能看起来很丑 - 它只取决于用户搜索的内容,并且它仍然可以分享。您唯一关心的是GET字符串是否未扩展limited length。