【问题标题】:How do I do table sorting using CodeIgniter?如何使用 CodeIgniter 进行表格排序?
【发布时间】:2010-09-12 00:36:00
【问题描述】:

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

/controller/method/param1/param2

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

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

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

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

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

【问题讨论】:

    标签: php sorting codeigniter


    【解决方案1】:

    如果您可以在客户端进行排序,the Tablesorter plugin for jQuery 非常好。

    【讨论】:

    • Tablesorter 一次性加载整个查询结果,不适合要加载大量数据的情况。
    • @Randell - 它确实内置了分页功能,但我没有尝试过,如果数据集足够大,你仍然是对的。
    • 这个插件非常棒,但即使是 1000 行,HTML 页面也会首先在没有样式的情况下呈现。如果您的数据超过 200 行,最好使用服务器端。试试看jsfiddle.net/Mottie/4mVfu/411
    【解决方案2】:

    我在一张相当复杂的桌子上遇到了这个问题。困难的部分是表格可以根据某些变量增长/缩小!大痛:(

    这就是我的处理方式..

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

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

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

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

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

    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
    }
    

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

    【讨论】:

    • 您可以接受排序函数的参数,而不是硬编码 URI 段 3。否则,这似乎是个好主意。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多