CodeIgniter を使用してテーブルの並べ替えを行うにはどうすればよいですか?
-
02-07-2019 - |
質問
私はここ数週間、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/
最近これを追加しました テーブルソーター (プロトタイプを使用) を私のページの束に追加します。実装は迅速かつ非常に簡単です。