Paginación en CodeIgniter La Guía Completa

La ventaja de utilizar cualquier marco de aplicación web de pila completa es que no tiene que preocuparse por las tareas comunes, como el manejo de entrada, la validación de formularios y similares, ya que el marco ya proporciona envoltorios para esas características. Por lo tanto, le permite concentrarse en la lógica de negocios de la aplicación en lugar de reinventar la rueda una y otra vez.

Hoy vamos a explorar una biblioteca importante en el marco de CodeIgniter: la biblioteca de paginación.

Permítanme resaltar los temas que vamos a cubrir en el curso de este artículo:

  • Demostración de la paginación básica
  • Explora las opciones de personalización
  • Configuración de paginación

Demostración de paginación básica

En esta sección, veremos un ejemplo que demuestra el uso de la paginación en CodeIgniter. Es la mejor manera de entender cómo funcionan las cosas en conjunto..

En nuestro ejemplo, crearemos una lista de usuarios bastante simple en la que buscaremos registros de la tabla MySQL de los usuarios. Para ejecutar correctamente este ejemplo, asegúrese de que tiene el uid y tu nombre campos en tu tabla de usuarios.

Con esa puesta en marcha, estamos listos para rodar..

Adelante, crea un archivo controlador. controladores / Paging.php con los siguientes contenidos.

load-> library ('pagination'); // cargar URL helper $ this-> load-> helper ('url');  índice de función pública () // load db and model $ this-> load-> database (); $ this-> load-> model ('Users'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // obtener registros de la página actual $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'paginación / índice'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ this-> pagination-> initialize ($ config); // crear enlaces de paginación $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params);  public function custom () // load db and model $ this-> load-> database (); $ this-> load-> model ('Users'); // init params $ params = array (); $ limit_per_page = 2; $ page = ($ this-> uri-> segment (3))? ($ this-> uri-> segment (3) - 1): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // obtener registros de la página actual $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ page * $ limit_per_page); $ config ['base_url'] = base_url (). 'paginación / personalizado'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; // configuración de paginación personalizada $ config ['num_links'] = 2; $ config ['use_page_numbers'] = TRUE; $ config ['reuse_query_string'] = TRUE; $ config ['full_tag_open'] = '
'; $ config ['full_tag_close'] = '
'; $ config ['first_link'] = 'First Page'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Last Page'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Next Page'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Prev Page'; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = ''; $ this-> pagination-> initialize ($ config); // crear enlaces de paginación $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);

A continuación, necesitaremos un archivo modelo. modelos / Usuarios.php que recupera registros de la tabla de usuarios.

db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("users"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () as $ row) $ data [] = $ row;  devuelve $ datos;  falso retorno;  función pública get_total () return $ this-> db-> count_all ("usuarios"); 

Finalmente, vamos a crear un archivo de vista en vistas / user_listing.php que muestra la lista de usuarios.

   Ejemplo de lista de usuarios   

Listado de usuarios

CARNÉ DE IDENTIDAD NOMBRE
uid?> uname?>
No se encontraron usuarios.

Ahora, ve y accede a nuestra página personalizada en http: // your-code-igniter-site / paging / index y deberías ver el listado del usuario junto con la paginación. Así que, eso es todo, lo hemos hecho! No te preocupes, no te dejaré eso pronto, ya que comenzaremos a analizar cada parte del código ahora..

Comenzaremos con el archivo modelo modelos / Usuarios.php Como eso es algo se llamará desde nuestros métodos de control. Hay dos métodos importantes, get_current_page_records y get_total, que nuestro modelo implementa para construir los enlaces de paginación.

Vayamos a través de la get_total método. Se utiliza para contar el número de registros en la tabla de usuarios.

función pública get_total () return $ this-> db-> count_all ("usuarios"); 

A continuación, hay una get_current_page_records método.

función pública get_current_page_records ($ limit, $ start) $ this-> db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("users"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () as $ row) $ data [] = $ row;  devuelve $ datos;  falso retorno; 

Hay dos argumentos importantes que debe tener en cuenta en el get_current_page_records método. El primer argumento, $ limite, se utiliza para especificar el número de registros que se devolverán durante la ejecución de la consulta. Y el segundo argumento., $ inicio, Actúa como el índice de inicio del registro..

Entonces, como puedes ver, dados los valores de $ inicio y $ limite Podemos buscar registros por página. Esa es la esencia de la paginación, y mientras tanto, hemos implementado el método más importante de este artículo.!

Entonces, ese era nuestro modelo-simple y elegante.!

Avanzando, vamos a cambiar nuestra atención al archivo del controlador. Adelante, toma el código del método constructor..

función pública __construct () parent :: __ construct (); // cargar la biblioteca de paginación $ this-> load-> library ('pagination'); // cargar URL helper $ this-> load-> helper ('url'); 

Para utilizar la paginación en CodeIgniter, lo primero que debe hacer es cargar la biblioteca de paginación. Y podemos hacerlo usando $ this-> load-> library ('paginación').

También hemos cargado el ayudante de URL para que podamos usar las funciones de ayudante globales proporcionadas por ese ayudante.

Ahora, estamos listos para pasar por el corazón de nuestro controlador, el índice método.

índice de función pública () // load db and model $ this-> load-> database (); $ this-> load-> model ('Users'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // obtener registros de la página actual $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'paginación / índice'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ this-> pagination-> initialize ($ config); // crear enlaces de paginación $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Para empezar, nos aseguramos de que la base de datos se carga correctamente. A continuación, cargamos el Usuarios Modelo para que podamos usar los métodos del modelo..

$ this-> load-> database (); $ this-> load-> model ('Users');

A continuación, inicializamos un par de variables importantes..

// init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total ();

La variable $ limit_per_page Define el límite por página. Por supuesto, puedes configurarlo como desees; Se establece en 1 en este momento por ejemplo..

los $ start_index variable mantiene el índice de inicio del registro MySQL. Cuando CodeIgniter construye los enlaces de paginación, agrega el índice de inicio de la página como el tercer segmento en la URL de forma predeterminada. Puede cambiar este comportamiento predeterminado, pero eso es algo que reservaremos en la última sección de este artículo, donde analizaremos las opciones de personalización..

Finalmente, llamamos al get_total El método del modelo Usuarios para obtener los registros totales de la tabla de usuarios, y se asigna a la $ total_records variable.

A continuación, recuperamos los registros de la página actual usando el get_current_page_records método.

// obtener los registros de la página actual $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index);

Antes de que realmente podamos seguir adelante y crear enlaces de paginación, debemos inicializar la configuración de paginación mínima usando la inicializar método de la biblioteca de paginación.

$ config ['base_url'] = base_url (). 'paginación / índice'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ this-> pagination-> initialize ($ config);

Y ese es el conjunto de parámetros mínimos para construir los enlaces de paginación..

  • base_url: La URL que se usará al crear enlaces de paginación
  • Total_rows: Número total de registros
  • por página: Recuento de registros por página

Finalmente, utilizamos el crear_ enlaces método para construir enlaces de paginación.

// crear enlaces de paginación $ params ["links"] = $ this-> pagination-> create_links ();

El resto es solo la formalidad para llamar nuestra vista. lista de usuarios y renderizar la salida! Ejecute la URL http: // your-code-igniter-site / paging / index para ver la lista de usuarios junto con los enlaces de paginación.

Así que ese es un ejemplo de paginación muy simple pero útil a su disposición que podría ampliar para satisfacer sus necesidades..

En la siguiente sección, exploraremos cómo puede personalizar la paginación predeterminada en términos de apariencia y funcionalidad.

Explorar las opciones de personalización

En esta sección, exploraremos las opciones disponibles que podría usar si desea personalizar los enlaces de paginación predeterminados.

Segmento URI

Aunque la biblioteca de paginación CodeIgniter detecta automáticamente el parámetro relacionado con la paginación desde la URL, puede definir un valor personalizado si tiene un patrón de URL diferente.

$ config ["uri_segment"] = 4;

Número de enlaces de dígitos

los num_links opción le permite definir el número de dígito enlaces que se mostrarán antes y después del número de página activa en los enlaces de paginación.

$ config ['num_links'] = 2;

Número de página como segmento URI

Cuando accede al segmento URI de paginación, es un índice de inicio de forma predeterminada. Por ejemplo, si tiene diez registros por página, el segmento URI de paginación es 20 para la tercera página. En su lugar, si desea mostrar números de página reales en los enlaces de paginación, puede configurar use_page_numbers a CIERTO.

$ config ['use_page_numbers'] = TRUE;

Por supuesto, debe asegurarse de que calcula el índice de inicio adecuado en función del número de página que recupera de la URL.

Preservar cadena de consulta

La mayoría de las veces, termina en la situación en la que desea conservar los parámetros de cadena de consulta que no están relacionados con la paginación. Puedes usar el reuse_query_string opción para habilitar esa facilidad.

$ config ['reuse_query_string'] = TRUE;

Estas fueron algunas de las opciones que podría usar para modificar la funcionalidad de paginación predeterminada. A continuación, veremos un par de otras opciones que le permiten modificar la forma en que se muestran los enlaces de paginación..

Etiqueta de la envoltura

Si desea envolver el código de paginación con cualquier otra etiqueta HTML, puede hacerlo usando el full_tag_open y full_tag_close opciones.

$ config ['full_tag_open'] = '
'; $ config ['full_tag_close'] = '
';

Podría ser realmente útil si desea aplicar un estilo personalizado a los enlaces de paginación..

Primero, Último, Siguiente y Anterior

Si desea cambiar el texto que se mostrará para los enlaces primero, último, siguiente y anterior, también puede hacerlo..

$ config ['first_link'] = 'First Page'; $ config ['last_link'] = 'Last Page'; $ config ['next_link'] = 'Next Page'; $ config ['prev_link'] = 'Prev Page';

Además, si desea envolver esos enlaces individuales con cualquier etiqueta HTML, puede hacerlo de la misma manera que lo hicimos para envolver todo el código de paginación..

$ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = '';

Enlace activo y enlace de número

A veces, desea personalizar el enlace activo de forma diferente. Puede hacerlo aplicando etiquetas de envoltura como se muestra a continuación.

$ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = '';

De la misma manera, si quieres envolver enlaces de dígitos con algo:

$ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';

Y eso termina la historia de la personalización. De hecho, puede seguir adelante y ver el ejemplo de personalización en http: // your-code-igniter-site / paging / custom que ya está incluido en nuestro archivo de controlador!

Configuración de paginación

Ahora está al tanto de la configuración que se requiere para configurar una paginación decente con cualquier lista de modelos. Y la mayoría de las veces, desea mantenerlo igual en todo el sitio. ¿Qué vas a hacer para lograrlo? Podría tener la tentación de copiar el código de configuración y pegarlo en cada acción que requiera la configuración de paginación.

De hecho, hay una mejor manera de manejar este escenario. Puede crear un archivo de configuración de paginación en aplicación / config / pagination.php y usar el $ config Variable para definir tus ajustes..

'; $ config ['full_tag_close'] = '
'; $ config ['first_link'] = 'First Page'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Last Page'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Next Page'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Prev Page'; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';

En base a eso, el revisado índice El método de acción debería verse así:

índice de función pública () // load db and model $ this-> load-> database (); $ this-> load-> model ('Users'); // init params $ params = array (); $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); // cargar el archivo de configuración $ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination'); $ settings ['total_rows'] = $ this-> Users-> get_total (); $ settings ['base_url'] = base_url (). 'paginación / config'; if ($ total_records> 0) // obtener registros de la página actual $ params ["results"] = $ this-> Users-> get_current_page_records ($ settings ['per_page'], $ start_index); // usa la configuración para inicializar la biblioteca $ this-> pagination-> initialize ($ settings); // crear enlaces de paginación $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Por supuesto, el Total_rows y base_url las variables cambian de una acción a otra, por lo que debe establecerlas explícitamente en cada acción.

Para lograrlo, necesita cargar la configuración de paginación en primer lugar.

$ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination');

A continuación, puede anular la configuración específica de la acción.

$ settings ['total_rows'] = $ this-> Users-> get_total (); $ settings ['base_url'] = base_url (). 'paginación / config';

Y ya has terminado con eso!

Así que esa fue la historia de la configuración de paginación, y eso también termina este artículo.!

Conclusión

Hoy pasamos por la biblioteca de paginación en CodeIgniter.

En la primera parte de este artículo, demostré cómo puede usar la biblioteca de paginación proporcionando un ejemplo muy simple pero útil..

A continuación, discutimos las opciones de personalización que están disponibles a su disposición al configurar la paginación.

Finalmente, discutimos la configuración de paginación en la última sección..

CodeIgniter es una poderosa plataforma PHP. Ya sea que esté comenzando o que comience con la próxima versión, no se olvide de consultar lo que tenemos disponible para usted también..

Me encantaría conocer sus comentarios en forma de consultas y comentarios utilizando el feed a continuación.!