CodeIgniter を使用してテーブルの並べ替えを行うにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/115167

質問

私はここ数週間、CodeIgniter をフレームワークとして使用してサイトを開発してきました。私は何かを達成するための最良の方法を考えてきました。他の言語の他の多くのフレームワークでは、これは比較的単純です。ソート可能なテーブル。URL にはメソッド パラメータが含まれているため、CodeIgniter はデフォルトでクエリ文字列をオフにします。したがって、URL は次のようになります。

/controller/method/param1/param2

ただ追加すればいいのではないかと思うかもしれません sortBy そして sortOrder コントローラー メソッドへの 2 つの追加パラメーターとして。特にそうしたいわけではありません。主な理由は、再利用可能なコントローラーが欲しいからです。クエリ文字列パラメータを使用すると、PHP は次のパラメータがあるかどうかを簡単に知ることができます。 sortBy. 。ただし、URL ベースのパラメーターを使用している場合、コントローラーごとに異なります。

私の選択肢は何だろうと考えていました。私が見る限り、それらは次のようなものです:

  • 私のものを渡してください sortBy そして sortOrder パラメータがある場合は、それを吸い上げて、再利用可能とは言えないコンポーネントを開発してください。
  • 追加のコントローラーが必要です。 sortBy そして sortOrder (ただし、ユーザーがどこから来たのかを認識して、元のページに戻す必要があります)。
  • 上記のコントローラーを呼び出す何らかの AJAX 関数を用意します。次にページをリロードします。
  • CodeIgniter をハックしてクエリ文字列を有効に戻します。実際、これが唯一のオプションである場合、その方法へのリンクをいただければ幸いです。

このような単純なタスクがこのような問題を引き起こすとは、まったく信じられません。何かが足りないのでしょうか?誰かお勧めはありますか?


明確にするために編集:私は jQuery が大好きで、すでにサイトで使用しているので、TableSorter は良い選択肢です。ただし、ページネーションを含め、潜在的に大量の結果が含まれるページがいくつかあるため、サーバー側で並べ替えを行いたいと考えています。

役に立ちましたか?

解決

私はこの方法を使用しています:http://codeigniter.com/forums/viewthread/45709/#217816

また、ソートに基づいて Cookie を設定するように拡張し、誰かが戻ってきたときにテーブルが以前と同じようにソートされるようにしました。

他のヒント

クライアント側での並べ替えに問題がない場合は、 jQuery 用の Tablesorter プラグイン かなりいいです。

かなり複雑なテーブルでこれに遭遇しました。難しいのは、テーブルが特定の変数に応じて拡大/縮小する可能性があることです。大きな痛み:(

これが私がそれを処理した方法です..

URI にカンマ文字を使用できるように system/application/config/config.php を調整しました。

$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
}

簡略化しすぎましたが、理解していただけたでしょうか。目的は次のような URL にすることです。

/コントローラー/ソーター/列名,ソート順序

ソーター関数は、表示/テンプレート/ビュー ロジックを処理するために別の内部関数を呼び出します。その仕事は、ソート呼び出しを処理し、モデルから適切なデータを取得することです。

もちろん、これを現在の関数だけに縮小することもできます。

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 番目のセグメントを使用して並べ替えを定義できます。

私はこれを使用してきました: 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-easyer-for-codeigniter/

最近これを追加しました テーブルソーター (プロトタイプを使用) を私のページの束に追加します。実装は迅速かつ非常に簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top