过去几周我一直在使用CodeIgniter作为框架开发一个网站。我一直在考虑实现某些目标的最佳方法,在其他语言的许多其他框架中,这些方法相对简单:可排序表。 CodeIgniter默认关闭查询字符串,因为您的URL包含方法参数。因此,URL可能如下所示:
/controller/method/param1/param2
您可能认为只需将sortBy
和sortOrder
添加为控制器方法的两个附加参数即可。我并不特别想这样做,主要是因为我想拥有一个可重复使用的控制器。当您使用查询字符串参数时,PHP可以轻松地告诉您是否存在名为sortBy
的参数。但是,当您使用基于URL的参数时,它将随每个控制器而变化。
我想知道我的选择是什么。据我所知,他们是这样的:
sortBy
和sortOrder
参数,只需将其吸收,然后为其开发一些不太可重复使用的组件。sortBy
和sortOrder
(虽然它必须知道你来自哪里,并将你送回原始页面)。我简直不敢相信这么简单的任务就会出现这样的问题!我错过了什么吗?有没有人有任何建议?
编辑澄清:我喜欢jQuery,我已经在网站上使用它,所以TableSorter是一个不错的选择。但是,我想进行服务器端排序,因为有些页面可能包含大量结果,包括分页。
答案 0 :(得分:5)
我一直在使用这种方法: http://codeigniter.com/forums/viewthread/45709/#217816
我还将它扩展为基于排序设置cookie,因此当有人回来时,表格的分类与之前相同。
答案 1 :(得分:2)
如果您在客户端排序正常,the Tablesorter plugin for jQuery非常好。
答案 2 :(得分:1)
我遇到了一个相当复杂的表格。困难的部分是桌子可以根据某些变量增长/缩小!!痛苦:(
以下是我处理它的方式..
调整的system / application / config / config.php以允许URI中的逗号字符:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';
使用排序功能调整我的控制器:
function sorter() {
//get the sort params
$sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order
//pass the params to the model
$data = $this->model_name->get_the_data($sort[0],$sort[1]);
$this->_show($data);
}
function _show($data) {
//all the code for displaying your table
}
我过度简化了,但你明白了。目的是得到这样的网址:
/控制器/分拣机/ COLUMNNAME,排序顺序
分拣机函数调用另一个内部函数来处理显示/模板/视图逻辑 - 它的工作是处理排序调用并从模型中获取适当的数据。
当然,这可以简化为您当前的功能:
function showGrid() {
$sort = $this->uri->segment(3);
if ($sort) {
//get the data sorted
} else {
//get the data the default way
}
//rest of your view logic
}
这样,您甚至不需要单独的功能 - 并且可以使用第三段来定义您的排序。
答案 3 :(得分:1)
我一直在使用这个:http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/
来自net.tutsplus.com
不幸的是它正在使用你不喜欢的东西(/ controller / method / param1 / param2),但是当我需要分页时,我已经为每个控制器添加了这个(显示功能)。或者从中做一个帮助。
其他例子在这里:http://www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/
答案 4 :(得分:0)
我最近将这个Table sorter(使用Prototype)添加到了我的一些页面中。它实现起来快速且简单。