8

在过去的几周里,我一直在使用 CodeIgniter 作为框架开发一个网站。我一直在考虑完成某事的最佳方式,在其他语言的许多其他框架中,这相对简单:可排序表。CodeIgniter 默认关闭查询字符串,因为您的 URL 包含方法参数。因此 URL 可能如下所示:

/controller/method/param1/param2

您可能认为您可以将sortBysortOrder作为两个附加参数添加到控制器方法中。我不是特别想这样做,主要是因为我想要一个可重复使用的控制器。当您使用查询字符串参数时,PHP 可以很容易地告诉您是否有一个名为sortBy. 但是,当您使用基于 URL 的参数时,它会因每个控制器而异。

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

  • 传入我的sortBysortOrder参数,把它吸起来,然后为它开发一些不可重用的组件。
  • 有一个额外的控制器,它将sortBy和存储sortOrder在会话中(尽管它必须知道您来自哪里,并将您送回原始页面)。
  • 有某种 AJAX 函数,它会调用上面的控制器;然后重新加载页面。
  • 破解 CodeIgniter 以重新打开查询字符串。实际上,如果这是唯一的选择,那么任何有关如何执行此操作的链接都将不胜感激。

我简直不敢相信这么简单的任务会出现这样的问题!我错过了什么吗?有人有什么建议吗?

虽然我喜欢 jQuery,并且我已经在网站上使用它,但 TableSorter 是一个不错的选择。但是,我想做服务器端排序,因为有些页面可能有大量结果,包括分页。

4

3 回答 3

2

如果您可以在客户端进行排序,那么用于 jQuery 的 Tablesorter 插件非常好。

于 2008-09-22T14:51:40.457 回答
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
}

我过于简单化了,但你明白了。目的是有一个这样的网址:

/控制器/排序器/列名,排序顺序

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

当然,这可以简化为您当前的功能:

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
}

这样,您甚至不需要单独的函数 - 并且可以使用第三段来定义您的排序。

于 2008-09-23T05:16:05.357 回答
0

我最近将这个表格分类器(使用 Prototype)添加到我的一堆页面中。它快速且易于实施。

于 2008-09-22T14:48:00.623 回答