Empfehlungen: Erweiterte Suche

Dem Paginator mehrere keys zum Sortieren übergeben

Unterstützung der Daten-Formatierung in den Views (DRY)

Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon anselmoso » Mo 25. Mai 2009, 12:25

Moin die Herrschaften,

ich versuche momentan, meine Index-View mit dem Paginator anhand mehrerer Keys zu sortieren - bin mir aber nicht sicher, ob das überhaupt möglich ist?
In den ganzen Paginator-Tutorials findet man immer nur Anleitungen dazu, wie man seine Ergebnisse / sein Model mit einem Parameter / Key sortiert, aber nicht mit mehreren.
In meinem Beispiel beinhaltet mein Model Städte mit Spalten wie Land, Region, Stadt, PLZ.
Jetzt möchte ich aber eben meine Index-View nicht immer nur nach Land oder Stadt sortieren, sondern z.B. auch mal nach Land und Stadt.
Geht das irgendwie?
Habe versucht dem Paginator z.B. ein Array mit den beiden Keys für Land und Stadt zu übergeben, funkt aber leider nicht wirklich.
Nur die Sortierung nach einzelnen Spalten / Keys funkt.
anselmoso
 
Beiträge: 11
Registriert: Mo 25. Mai 2009, 12:21

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon anselmoso » Mo 25. Mai 2009, 12:46

EDIT: Jetzt ist dein Beitrag weg? (Jörg hatte mich auf das Standard-Tutorial zu "Pagination" im Cakebook hingewiesen)
http://book.cakephp.org/view/166/Pagination-in-Views


Usprüngliche Antwort meinerseits auf seinen gelöschten Post:

Hi Jörg und danke erstmal.
Genau nach diesem Tutorial hab ich ja gearbeitet. Das Problem: Die zuvorige Sortierung bleibt nicht erhalten.

Beispiel: Ich habe die Spalten "Land", "Region", "Stadt".

Ich klicke einmal auf "Land" und er sortiert nach Land.
Danach möchte ich zusätzlich auch nach "Stadt" sortiert haben und klicke daher auch auf "Stadt".

--> Das Ergebnis ist, dass nun nur noch nach "Stadt" sortiert ist und die zuvorige Sortierung nach "Land" verworfen wird.

--> Ich dachte, ich mache oberhalb der Tabelle eigene Links die ich z.B. "Sortiere nach Land und Stadt" nenne und wo ich dem Paginator dann die Keys "Land" und "Stadt" als Array übergebe. Funkt aber nicht.
anselmoso
 
Beiträge: 11
Registriert: Mo 25. Mai 2009, 12:21

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon euromark » Mo 25. Mai 2009, 19:34

ich glaube der paginator selbst ist auf 1 eintrag maximal beschränkt, was das Sortieren anbelangt
aber Links mit eigener Sortierung müsste gehen
einfach dann im Controller abfangen - und dem $this->paginate die gewünschte Kombination mitgeben!
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon Jörg » Mo 25. Mai 2009, 20:40

Hi,
ich hatte meinen Beitrag wieder entfernt, da ich dir ja nicht die richtige Antwort gegeben hatte ...
Hatte ich erst im zweiten Durchgang verstanden, dass du die "UND"-Komponente darin haben möchtest.

Gruß
Jörg
Jörg
 
Beiträge: 105
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon havanna » Mo 25. Mai 2009, 22:13

Hallo Anselm,

have a look into the api... Sieht tatsächlich so aus, dass CakePHP nur ein Feld verträgt. Da hilft dir ggf. nur die Methode zu überdefinieren.

Code: Alles auswählen
  function sort($title, $key = null, $options = array()) {
 $options = array_merge(array('url' => array(), 'model' => null), $options);
 $url = $options['url'];
 unset($options['url']);
 
 if (empty($key)) {
 $key = $title;
 $title = __(Inflector::humanize(preg_replace('/_id$/', '', $title)), true);
 }
 $dir = 'asc';
 $sortKey = $this->sortKey($options['model']);
 $defaultModel = $this->defaultModel();
 
 if (strpos($sortKey, $defaultModel) !== false && strpos($key, $defaultModel) === false) {
 $isSorted = ($sortKey === $defaultModel . '.' . $key);
 } else {
 $isSorted = ($sortKey === $key);
 }
 
 if ($isSorted && $this->sortDir($options['model']) === 'asc') {
 $dir = 'desc';
 }
 if (is_array($title) && array_key_exists($dir, $title)) {
 $title = $title[$dir];
 }
 
 $url = array_merge(array('sort' => $key, 'direction' => $dir), $url, array('order' => null));
 return $this->link($title, $url, $options);
 }

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon anselmoso » Mi 27. Mai 2009, 09:27

Danke für eure Antworten.
Werde das mal testen mit dem $this->paginate im controller.

Den Code von dir, havannah, versteh ich ehrlich gesagt nicht wirklich bzw. bin noch nicht so tief in Cake drin, dass ich Methoden überschreiben will.
anselmoso
 
Beiträge: 11
Registriert: Mo 25. Mai 2009, 12:21

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon havanna » Mi 27. Mai 2009, 12:18

Hallo Anselm,

das würde auch nichts nützen, denn das ist der Original-Quellcode der Funktion den du auch in der API-Dokumentation auf http://www.cakephp.org findest.
Und wenn du den Code liest, siehst du, dass hier eben nur ein key (string) übergeben und verwendet wird. Also nichts mit array oder so.

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Dem Paginator mehrere keys zum Sortieren übergeben

Beitragvon anselmoso » Di 28. Jul 2009, 09:07

Ich habe es jetzt etwas unschön gelöst (denke ich), mir ist aber bislang keine bessere Möglichkeit eingefallen:

In meiner View habe ich ein Formular, wo man per Checkbox auswählen kann, nach welchen Feldern man sortieren will. (z.B. Land, PLZ, Stadt) Beim Absenden dieses Formulars wird eine Funktion "sort()" in meinem Kontroller aufgerufen. Dieser baut dann ein "order" Array zusammen aus den Feldern, die vom Formular auf "1" (wegen Checkbox) gesetzt wurden.
Und dann setze ich in meiner sort() Funktion die paginate-Variable jedes Mal neu mit der neuen "order" und rufe anschließend "paginate" auf und rendere die View neu.

Joa.
anselmoso
 
Beiträge: 11
Registriert: Mo 25. Mai 2009, 12:21


Zurück zu Helper

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron