如何使用CodeIgniter进行表格排序?

时间:2020-03-06 14:32:33  来源:igfitidea点击:

在过去的几周中,我一直在使用CodeIgniter作为框架来开发一个站点。我一直在思考完成某件事的最佳方法,在其他语言的许多其他框架中,这是相对简单的:可排序的表。默认情况下,CodeIgniter会关闭查询字符串,因为URL包含方法参数。因此,URL可能类似于:

/controller/method/param1/param2

我们可能认为我们可以只将sortBysortOrder作为两个添加参数添加到controller方法中。我特别不想这样做,主要是因为我想拥有一个可重用的控制器。当我们使用查询字符串参数时,PHP可以轻松告诉我们是否有一个名为sortBy的参数。但是,当我们使用基于URL的参数时,每个控制器的参数将有所不同。

我想知道我的选择是什么。据我所知,它们类似于:

  • 传入我的sortBysortOrder参数,将其吸干,并为其开发一些不可重复使用的组件。
  • 还有一个额外的控制器,它将在会话中存储" sortBy"和" sortOrder"(尽管它必须知道我们来自何处,然后将我们发送回原始页面)。
  • 有某种AJAX函数,可以调用上面的控制器;然后重新加载页面。
  • Hack CodeIgniter可以重新打开查询字符串。实际上,如果这是唯一的选择,则将感谢我们提供有关如何执行此操作的任何链接。

我简直不敢相信如此简单的任务会带来这样的问题!我想念什么吗?有人有什么建议吗?

编辑以澄清问题:我喜欢jQuery,并且我已经在网站上使用它了,因此TableSorter是一个不错的选择。但是,我想进行服务器端排序,因为有些页面可能包含大量结果,包括分页。

解决方案

最近,我将此表排序器(使用原型)添加到了我的一堆页面中。它快速且易于实施。

如果我们可以在客户端进行排序,那么jQuery的Tablesorter插件非常不错。

我遇到了一个相当复杂的表。困难的部分是,表格可能会根据某些变量而增长/缩小!大痛:(

这是我的处理方式。

调整了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
}

我简化了,但是我们明白了。目的是拥有这样的网址:

/控制器/分类器/列名,排序

sorter函数调用另一个内部函数来处理显示/模板/视图逻辑,其工作是处理sort调用并从模型中获取适当的数据。

当然,可以将其简化为我们当前的功能:

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
}

这样,我们甚至不需要一个单独的函数,就可以使用第三段来定义排序。

我一直在使用这种方法:
http://codeigniter.com/forums/viewthread/45709/#217816

我还扩展了它以根据排序设置cookie,因此当有人回来时,该表的排序与以前相同。