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:
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..
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.
En esta sección, exploraremos las opciones disponibles que podría usar si desea personalizar los enlaces de paginación predeterminados.
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;
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;
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.
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..
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..
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'] = '';
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!
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'] = '
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.!
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.!