2010-02-24 49 views
9

Tengo un problema con la paginación en mi página de búsqueda. Cuando un usuario busca algo, tengo una url como domain.com/search/?s=keyword pero paginator me da enlaces como domain.com/search/page:x, así que en la página siguiente y anterior y números se pierde el parámetro get. Necesito configurar el paginador para obtener enlaces como domain.com/search/page:x/?s=keyword Pero no puedo hacer esto.Paginación de CakePHP y los parámetros get

Necesito saber cómo configurar

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

para obtener el efect necesario. Gracias.

Respuesta

0

Básicamente, usted puede hacerlo de esta manera:

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

Lo sentimos Paweł, que no me entienden. Tengo los $ datos en mi opinión, pero solo en la página uno, si voy a la página 2 voy a domain.com/search/page:2 porque $ paginator en la vista genera enlaces como este, entonces el get "s" el valor no está presente en mi controlador, si voy a domain.com/search/page:2/?s=keyword, tengo la página 2 del resultado de la búsqueda. No sé cómo forzar $ paginator para generar enlaces como domain.com/search/page:x/?s=keyword – Jos

+0

Oh, sí, entiendo lo que quieres decir ahora. Bueno, me gustaría ver la solución a esto también. Una cosa que puede hacer es usar el componente de la sesión para llevar la palabra clave a través de las páginas. Sin embargo, tiene algunas desventajas (no puede dar un enlace a alguien). – PawelMysior

20

crear la matriz opciones

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

conjunto al ayudante

$paginator->options($options) 

y entonces puede utilizar el ayudante paginador conservando las variables GET.

esperanza de que ayudó a :)

para que sea más fácil que puede putl $ paginador opciones en la vista o el archivo .ctp

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

continuación, poner el valor que desee :)

+4

+1 Además, si no desea sobrescribir las opciones de paginación actuales (es decir, número de página, etc.), puede agregar a la matriz de opciones: '$ this-> Paginator-> options ['url'] ['? '] = $ queryString; ' –

1

Comprobar this comment.

Lo usé, funciona bien.

en app_controller archivo:

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

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

en el archivo de puntos de vista:

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

espero que ayude.

+0

este enlace de comentario no funciona –

2

utilicé solución Matyas, pero por $ palabra clave me ha gustado esta:

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

comunicado su uso en la vista de parámetros de paso, mientras que la paginación

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

ésta es la manera más sencilla de pasar parámetros.

Algún tiempo $this->passedArgs que no funciona en ese momento pasa el valor estático y prueba con ese valor estático.

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

Sé que esto es viejo, pero encontré una solución simple que funciona para mí. Añadir siguiente en archivo de vista -

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

encontrado que here

Cuestiones relacionadas