Perché il paginatore non ricorda i miei parametri personalizzati quando vado a pagina 2?
-
02-07-2019 - |
Domanda
Quando si utilizza l'helper paginator nelle viste cakephp, non ricorda parti dell'URL personalizzate per il mio utilizzo.
Ad esempio:
http://example.org/users/index/moderators/page:2/sort:name/dir:asc
qui moderatori è un parametro che mi aiuta a filtrare per quel tipo. Ma premendo un link paginator non includerà questo link.
Soluzione
Per aggiungere alla risposta di Alexander Morland sopra, vale la pena ricordare che la sintassi è cambiata in CakePHP 1.3 e ora è:
$this->Paginator->options(array('url' => $this->passedArgs));
Questo è ulteriormente descritto nella impaginazione nelle viste sezione del libro CakePHP.
Altri suggerimenti
Il segreto sta aggiungendo questa riga alla tua vista:
$ paginator - GT &; Opzioni (& Array ( 'url' = gt; $ this - gt &; PassedArgs));
(Ho creato questa domanda e rispondo perché è una domanda molto frequente e continuo a dover scavare la risposta poiché non riesco a ricordarla.)
$ this - > ;passArgs è il modo preferito per farlo dalla vista.
Mi hai salvato! Questo mi ha aiutato molto, grazie.
Avevo bisogno di un modo per passare i parametri che avevo originariamente inviato per posta ($ this - > data) al componente di paging, quindi la mia query personalizzata avrebbe continuato a usarli.
Ecco cosa ho fatto:
a mio avviso l'ho messo
$paginator->options(array('url'=>$this->data['Transaction']));
prima del $ paginator - > prev ('< < Precedente' roba.
In questo modo il collegamento successivo sul paginatore è stato reso come " ... / Pagina: 1 / start_date: 2000-01-01% 2000: 00: 00 / END_DATE: 3000-01-01% 2023: 59: 59 / payments_recieved: & 1 quot;
Quindi sul mio controller ho dovuto solo ottenere i parametri e inserirli nei dati $ this - > in modo che la mia funzione continuasse come al solito:
foreach($this->params['named'] as $k=>$v)
{
/*
* set data as is normally expected
*/
$this->data['Transaction'][$k] = $v;
}
E questo è tutto. Il paging funziona con la mia query personalizzata. :)
Le opzioni qui sono un buon vantaggio ... Puoi anche controllare per maggiori informazioni sulla paginazione di cakePHP su cakephp.org/view/166/Pagination-in-Views
Con quel parametro 'url' puoi solo mettere la tua stringa preferita prima dell'impaginazione della stringa in url ..
se uso questa tecnica:
$urlpagin = '?my_get1=1&my_get2=2';
$paginator->options = array('url'=>$urlpagin);
Ottengo solo:
url/controller/action/?my_get1=1&my_get2=2/sort:.../...
e Cake ha perso i miei parametri personali
Hai una tecnica alternativa?