2010-02-24 20 views
9

Ich habe ein Problem mit der Seitenumbruch in meiner Suchseite. Wenn ein Benutzer etwas suche ich habe eine URL wie domain.com/search/?s=keyword aber Paginator gibt mir Links wie domain.com/search/page:x, so in der nächsten und prev und Zahlen Seite der Get-Parameter verloren ist. Ich muss Paginator konfigurieren, um Links wie domain.com/search/page:x/?s=keyword zu bekommen, aber ich kann das nicht tun.CakePHP Paginierung und die Get-Parameter

muss ich wissen, wie

$paginator->options(); 
$paginator->next(); 
$paginator->prev(); 
$paginator->numbers(); 

konfigurieren, dass die benötigten efect zu erhalten. Danke.

Antwort

0

Grundsätzlich können Sie es wie folgt tun:

function list_results($keywords) 
    { 
    $data = $this->paginate('Posts', array('Post.title LIKE' => '%'.$keywords.'%')); 
    } 
+0

Leider Paweł, du mich nicht verstehen. Ich habe die $ Daten in meiner Ansicht, aber nur auf der ersten Seite, wenn ich auf Seite 2 gehe ich gehe zu domain.com/search/page:2 weil $ paginator in der Ansicht generieren Links wie diese, so dass die get "s" Wert ist nicht in meinem Controller vorhanden, wenn ich auf domain.de/search/page:2/?s=keyword gehe, habe ich die 2 Seite des Suchergebnisses. Ich weiß nicht, wie man $ paginator erzwingt, um Verbindungen wie domain.com/search/page:x/?s=keyword – Jos

+0

zu erzeugen Oh, yeah, ich verstehe, was Sie jetzt meinen. Nun, ich würde gerne die Lösung dafür sehen. Eine Sache, die Sie tun können, ist, die Sitzungskomponente zu verwenden, um das Schlüsselwort durch Seiten zu tragen. Es hat jedoch einige Nachteile (kann keine Verbindung zu jemandem herstellen). – PawelMysior

20

das Array Optionen erstellen

$options = array(
    'url'=> array(
     'controller' => 'posts', 
     'action' => 'search', 
     '?' => 'keyword='.$keyword 
    ) 
); 

Set es dem Helfer

$paginator->options($options) 

und dann können Sie den paginator Helfer verwenden während die GET-Variablen beibehalten werden.

Hoffnung, dass es geholfen :)

erleichtern Sie $ paginator Optionen in Ihrer Ansicht putl oder .ctp

$this->Paginator->options['url']['?'] = $this->params['ur]; 

dann den Wert setzen Datei, die Sie wollen :)

+4

+1 Wenn Sie die aktuellen Seitennummerierungsoptionen (dh Seitennummer usw.) nicht überschreiben möchten, können Sie sie an das Optionsfeld anhängen: '$ this-> Paginator-> options ['url'] ['? '] = $ queryString; ' –

1

Überprüfen Sie this comment.

Ich benutzte es, es funktioniert gut.

in app_controller Datei:

function _paginatorURL() { 
    $passed = ""; 
    $retain = $this->params['url']; 
    unset($retain['url']); 
    $this->set('paginatorURL',array($passed, '?' => http_build_query($retain))); 
} 

function beforeFilter() 
{ 
    $this->_paginatorURL(); 
} 

in Aussicht file:

<?php $paginator->options = array('url' => $paginatorURL);?> 

Hoffe, es hilft.

+0

Dieser Kommentar funktioniert nicht –

2

verwendete ich Matyas Lösung, aber für $ Schlüsselwort ich so tat:

$queryString = explode('?', $_SERVER['REQUEST_URI']); 
$options = array('url'=> array('controller' => 'post', 'action' => 'search', '?' => $queryString[1])); 
2

Verwendung Anweisung in der Ansicht für Parameter Pass während Paginierung

$paginator->options(array('url' => $this->passedArgs)); 

diese einfachste Art und Weise Parameter zu übergeben ist.

Einige Zeit $this->passedArgs funktioniert nicht zu diesem Zeitpunkt statischen Wert übergeben und versuchen Sie mit diesem statischen Wert.

$paginator->options(array('url' => array('a', 'b'))); 
0

Ich weiß, das ist alt, aber eine einfache Lösung gefunden, die für mich funktioniert. In Datei folgenden in Sicht -

$paginator->options(array('url' => array_merge($this->passedArgs, 
array('?' => ltrim(strstr($_SERVER['QUERY_STRING'], '&'), '&'))))); 

Found it here