Frage

Ich habe eine Website in den letzten Wochen entwickelt mit CodeIgniter als Rahmen. Ich habe die beste Art und Weise zu denken, etwas zu erreichen, was in vielen anderen Frameworks in anderen Sprachen ist relativ einfach: sortierbare Tabellen. CodeIgniter schaltet Abfrage-Strings standardmäßig, weil Ihre URLs Methode Parameter enthalten. So eine URL könnte wie folgt aussehen:

/controller/method/param1/param2

Man könnte denken, dass Sie nur in sortBy und sortOrder als zwei zusätzliche Parameter an den Controller-Methode hinzufügen könnte. Ich will das nicht besonders tun, vor allem, weil ich einen wiederverwendbaren Controller haben will. Wenn Sie Query-String-Parameter verwenden, können PHP Sie leicht feststellen, ob ein Parameter sortBy genannt wird. Wenn Sie jedoch URL Basis-Parameter verwenden, wird es mit jedem Controller variieren.

Ich habe mich gefragt, was meine Optionen waren. Soweit ich sehen kann, sie sind so etwas wie:

  • Der Pass in meinem sortBy und sortOrder Parameter, es ist einfach aufzusaugen, und entwickeln einige weniger als wiederverwendbare Komponente für sie.
  • Haben Sie einen zusätzlichen Controller, der die sortBy und sortOrder in der Sitzung gespeichert werden (obwohl es würde wissen, wo man herkommt, und Sie zurück auf die ursprüngliche Seite senden).
  • Haben Sie irgendeine Art von AJAX-Funktion, die den Controller oben nennen würde; dann die Seite neu.
  • Hack CodeIgniter zu Abfrage-Strings wieder einschalten. Eigentlich, wenn dies die einzige Möglichkeit ist, alle Links, wie dies zu tun, würde geschätzt.

Ich kann einfach nicht glauben eine so einfache Aufgabe, ein solches Problem darstellen würde! Bin ich etwas fehlt? Hat jemand irgendwelche Empfehlungen?


Bearbeiten zur Klarstellung: Ich liebe jQuery, und ich bin schon auf der Website, so Tablesorter ist eine gute Wahl. Aber ich möchte Server-Seite tun Sortierung, da es einige Seiten mit potenziell großen Anzahl von Ergebnissen, einschließlich Paginierung.

War es hilfreich?

Lösung

Ich habe diese Methode wurde verwendet: http://codeigniter.com/forums/viewthread/45709/#217816

I erweiterte es auch Cookies setzen basieren weg so die Art, wenn jemand den Tisch kommt zurück sortiert ist das gleiche wie zuvor.

Andere Tipps

Wenn Sie mit Sortierung auf der Client-Seite OK sind, die Tablesorter Plugin für jQuery ist ziemlich nett.

Ich lief in diesen mit einer ziemlich komplexen Tabelle. Der schwierige Teil war, dass die Tabelle könnte wachsen / schrumpfen in Abhängigkeit von bestimmten Variablen !! Große Schmerzen: (

Hier ist, wie ich es behandelt ..

Bereinigtes System / application / config / config.php das Kommazeichen in der URI zu ermöglichen:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';

Stellen Sie meinen Controller mit einer Sortierfunktion:

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
}

Ich habe stark vereinfacht, aber Sie bekommen die Idee. Der Zweck ist es, eine URL wie diese haben:

/ controller / Sorter / column, sortorder

Die Sorter-Funktion ruft eine andere interne Funktion mit der Anzeige / template / Ansicht Logik beschäftigen -. Es ist Aufgabe ist mit dem Sortieren Aufruf und erhalten die entsprechenden Daten aus dem Modell behandeln

Natürlich könnte dies nur Ihre aktuelle Funktion reduziert werden:

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
}

Auf diese Weise brauchen Sie nicht einmal eine eigene Funktion -. Und das dritte Segment verwenden können, um Sortierung zu definieren

Ich habe das schon mit: http : //net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

von net.tutsplus.com

Leider nutzt das, was Sie nicht mögen (/ Controller / Verfahren / param1 / param2), aber ich habe dies (die Anzeigefunktion) für jeden Controller hinzugefügt, wenn ich Paginierung müssen. Oder machen Sie einen Helfer von ihm.

Ein anderes Beispiel ist hier: http: //www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

Ich habe vor kurzem diese Tabelle Sorter (die verwendet Prototype) zu einem Bündel von meinen Seiten. Es ist schnell und sehr einfach zu implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top