2016-07-11 13 views
0

In meinem Controller habe ich meine Seitenzahl um 2 Felder sortiert.Paginieren und Sortierfehler (s)?

public $paginate = [ 
    'limit' => 50, 
    'order' => ['first_name', 'last_name'] 
]; 
$contacts = $this->paginate($this->Contacts); 

Dies funktioniert auf der ersten Seite in Ordnung, aber da ich die Standardrichtung ausgelassen => 'ASC' die Paginator Links nicht funktionieren überhaupt:

/contacts?page=2&sort=0&direction=first_name 

Als ich in Richtung hinzufügen, funktioniert es , sortiert aber natürlich nur nach dem ersten Feld und verwirrt die Sortierreihenfolge.

/contacts?page=2&sort=Contacts.first_name&direction=ASC 
  1. die Standardrichtung explizit angefordert wird?
  2. Gibt es eine Methode, um beide Felder während der Paginierung zu sortieren?

Sortierung nach virtuellen Feldern (zB full_name => first_name . ' ' . last_name) funktioniert nicht wie es in 2.x tat

+0

Wo ist der Code Sie verwenden Ihre Links zu erstellen? – Dave

+0

Voreingestellt gebackener Code: '

    Paginator->prev('< ' . __('previous')) ?> Paginator->numbers() ?> Paginator->next(__('next') . ' >') ?>

Paginator->counter() ?>

' – Naidim

+1

1. Ja, sollte es. 2. Mögliches Duplikat von http://stackoverflow.com/questions/31763413/pagination-sort-link-on-a-virtual-field-entity-property-in-cakephp-3-0 – ndm

Antwort

1

Gelöst beide Probleme mit dem folgenden :

Legen Sie die Standardsortierreihenfolge auf das gleiche wie das virtuelle Feld fest:

public $paginate = [ 
    'order' => ['first_name', 'last_name'] 
]; 

Dann fügen Sie einfach die folgenden auf die Ansicht von Überschreiben der Standard um die paginator zu verhindern, es sei denn, vom Benutzer festgelegt:

if (empty($_GET['direction'])) { $this->Paginator->options(['url' => ['direction' => null, 'sort' => null]]); } 
0

Sie diesen Code versuchen sollte:

public $paginate = array('limit' => 10 ,'order' => array(
     'Contacts.first_name' => 'desc', 'Contacts.last_name' => 'asc' 
    )); 
+0

Ihr Code weist dieselben Probleme auf. Es scheint, dass Sie die Probleme nicht sehen. 1) Wenn die Reihenfolge ASC ist, und es funktioniert, ohne es zu deklarieren (ASC ist Standard), aber dann bricht es die Seitenumbruch. Warum müssen Sie einen Standardwert angeben? 2) Bei mehreren Sortierreihenfolgen funktioniert die Bestellung nur auf der ersten Seite, die Seitennummerierung verliert den zweiten Wert. – Naidim