2012-07-13 11 views
5

He leído todas las preguntas sobre Stackoverflow y no he visto una respuesta definitiva a la pregunta. Actualmente estoy usando la biblioteca de paginación CodeIgniter para generar mis enlaces de paginación utilizando un límite y un desplazamiento:¿Cómo usar los números de página en la paginación de Codeigniter en lugar del desplazamiento?

$config['base_url'] = base_url() . 'explore/featured/index/'; 
    $config['total_rows'] = $this->Projects_model->get_featured_count();//Count featured projects 
    $config['per_page'] = 12; 
    $config['uri_segment'] = 4; 
    $config['display_pages'] = FALSE; 
    $config['next_link'] = 'Older →'; 
    $config['prev_link'] = '← Newer'; 
    $this->pagination->initialize($config); 
    $limit = $config['per_page']; 
    $offset = $this->uri->segment(4); 

    $data['pagination'] = $this->pagination->create_links(); 

    $data['projects'] = $this->Projects_model->get_featured($limit, $offset); //get featured projects from database 

El código anterior limita los valores de salida de mi consulta y utiliza un desplazamiento que está contenida en mi cuarto segmento URI.

¿Cómo puedo cambiar el código siguiente por el número de página? Parece ser imposible porque ya no podría usar un desplazamiento en mi url.

Respuesta

16

En algún momento, CI actualizan su pagination library a (por fin) adaptarse a esto:

$config['use_page_numbers'] = TRUE;

Por defecto, el segmento URI utilizar el índice de partida para los artículos que está paginar. Si prefiere para mostrar el número de página real, configúrelo como VERDADERO.

Si se encuentra en una versión que no tiene esta característica y no puede actualizar toda su instalación de CI, debería poder ingresar la última biblioteca de paginación.

Para calcular su compensación de base de datos, use $limit * $page_number donde "número_página" es el valor en su URL (4to segmento en su caso).

+0

"En algún momento" === Versión 2.10 lanzado 14 de noviembre de 2011. Me abandonaron sus lib paginación hace mucho tiempo yo no No se dan cuenta de que hicieron el cambio. Probablemente ya lo estás usando. –

+1

¿Y qué estás usando? Sólo curioso. –

5

$limit * $page_number mencionados anteriormente no devolvió una compensación verdadera como punto de partida y creó problemas cuando el número de página es 1 porque la compensación debe ser 0 para entonces. Esto funcionó para mí:

$offset = ($page_number == 1) ? 0 : ($page_number * $config['per_page']) - $config['per_page']; 
+1

Solo quiero poner esto aquí si alguien quiere usar esto. Si obtiene el número de página del segmento, solo una comprobación adicional a la primera condición: ($ page_number == 1 || $ page_number == NULL). Eso funcionó para mi programa, y ​​gracias por compartir la respuesta, realmente útil :) –

-1
$page_num = $this->uri->segment(1); 
$offset = ($page_num == NULL) ? 0 : 
      ($page_num * $config['per_page']) - $config['per_page']; 
1

sólo tiene que utilizar:

$offset = ($this->uri->segment(4)) ? $this->uri->segment(4) : 1; 
$data['projects'] = $this->Projects_model->get_featured($limit, $limit*($offset-1)); 
+0

Por favor, agregue algunas explicaciones también. – BlackBeard

+1

Sí, mi inglés es malo, así que espero que puedan entenderlo. Por ejemplo: su límite es de 4 publicaciones. En la página 1 (desplazamiento = vacío por lo que obtendrá el valor "1" de forma predeterminada), el modelo seleccionará de 0 (límite * (desplazamiento-1) = 0) a su límite (4). Página 2 (desplazamiento = 2) es el mismo, seleccionará de 4 (límite * (desplazamiento-1) = 4) a su límite (4). Para que cada página tengas 4 publicaciones como desees. –

Cuestiones relacionadas