質問: 現在、PHP(fuelPHP)で、webサイトに掲載する『お知らせ』の管理用画面を作成しています。 作成したお知らせデータを一覧表示する際にテーブルを使用しており、 『更新日時』『掲載開始日時』『掲載終了日時』のそれぞれの項目で並び替えができるよう、 jqueryのtablesorterを使用しています。 【やりたいこと】 tablesorterでは、項目をクリックした際、 通常は、『昇順』→『降順』→『昇順』→『降順』・・・という順番で、 ソートがかかるものと認識しておりますが、 これを、 『降順』→『昇順』→『降順』→『昇順』と、逆順にしたいと考えております。 【やってみたこと】 読み込んでいる『jquery.tablesorter.min』のファイル内、 sortInitialOrder:"asc"という部分を"desc"に変更することによって、 最初のクリック時のみ、『降順』からのスタートを実現できました。 しかし、他の項目をクリックし、再度元の項目をクリックすると、 そこからは昇順スタートとなってしまいます。 色々なページを拝見しながら調べてみたのですが、 上記を実現できる旨の情報を見つけ出すことができず、 大変恐縮ながら、こちらの場で質問をさせて頂けたらと思います。 何卒、宜しくお願い申し上げます。
回答: プラグインの説明をざっくり読んでみましたにゃ。 プラグインのファイルを書き換えるのではなく、 オプションで設定すればいいみたいですよ: ``` $("table").tablesorter({ //最初の列を昇順でソート、3番目の列を降順でソートする sortList: [[0,0],[2,1]] }); ``` [テーブルの列数(最初が0), ASCなら0でDESCなら1] ーーー本体の修正ーーー tablesorter.js 707行に変数`beforeClickHeader`を追加 ``` sortOrder, beforeClickHeader; ``` tablesorter.js 741行の下に追加 ``` if(beforeClickHeader && beforeClickHeader.innerHTML !== this.innerHTML ) { beforeClickHeader.count = formatSortingOrder(config.sortInitialOrder); } beforeClickHeader = this; ``` ここののcountのインクリメントと剰余でorderのtoggleをしているんですにゃ。 保存先のthisはthなので、前にクリックされたものかどうか判別してcountを操作すればリセットできますにゃ。 これは仮にinnerHTMLで判別してますが、中が空っぽならidとかclassNameみたいな属性を使うといいですにゃ。 本体がバージョンアップされたらこのソースをその都度いれないとですから、 作者にリクエストを飛ばしてオプションで制御できるようにしてもらうといいと思いますにゃあ。