Las bases de datos son entidades vivientes. Crecen a medida que pasa el tiempo. Al diseñar aplicaciones, debemos tener en cuenta la gran cantidad de registros que los usuarios necesitan para navegar. La página nos permite dividir nuestros resultados en pequeñas secciones manejables. La siguiente imagen muestra un ejemplo de una página de búsqueda de Google.
En este tutorial, aprenderá cómo replicar los resultados de la base de datos en CodeIgniter usando la biblioteca de páginas. Este tutorial asume que está familiarizado con los conceptos básicos de CodeIgniter Active Record. Si no es así, puede leer los tutoriales anteriores. La otra suposición que se hace es que ya ha descargado CodeIgniter.
En este tutorial, aprenderá:
Configuración de la base de datos
Comenzaremos creando la base de datos y agregando algunos registros ficticios. Será una base de datos de una sola tabla con 50 registros.
Ejecute el siguiente script en MySQL para crear la tabla de autor de la base de datos. Envíe 50 registros ficticios.
CREATE SCHEMA ci_pagination; DROP TABLE IF EXISTS `authors`; CREATE TABLE `authors` ( `id` int(11) NOT NULL AUTO_INCREMENT, `first_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `birthdate` date NOT NULL, `added` timestamp NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (1, 'Brielle', 'O'Hara', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1974-05-21', '1999-09-17 19:17:28'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (2, 'Flavio', 'Lehner', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1971-10-14', '1998-09-09 00:25:06'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (3, 'Elmira', 'Johns', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1983-11-28', '2015-02-07 15:56:43'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (4, 'Elza', 'Mitchell', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1989-03-08', '1992-08-21 00:21:39'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (5, 'Viva', 'Greenfelder', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1995-04-17', '2017-04-30 05:55:39'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (6, 'Maxwell', 'VonRueden', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1994-07-01', '1996-05-08 23:30:14'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (7, 'Deontae', 'Becker', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1992-02-19', '2017-07-22 11:49:15'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (8, 'Sylvester', 'Christiansen', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1990-09-03', '2004-05-08 08:15:37'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (9, 'Torrey', 'Strosin', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1999-10-09', '2009-08-30 21:30:44'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (10, 'Kelli', 'Smitham', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2012-11-07', '1986-01-22 20:52:57'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (11, 'Abigale', 'Schuppe', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2018-02-18', '1994-05-07 06:26:36'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (12, 'Letha', 'Gleason', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2009-02-06', '1998-05-25 04:37:54'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (13, 'Sienna', 'Upton', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2017-08-17', '2009-08-08 19:08:10'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (14, 'Harley', 'Gutkowski', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1987-11-30', '1998-07-31 11:08:01'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (15, 'Lois', 'Bednar', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2002-02-11', '2001-07-26 15:04:16'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (16, 'Gail', 'McDermott', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1987-03-30', '2004-12-15 20:38:29'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (17, 'Sydney', 'Strosin', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1985-04-29', '2010-08-07 08:50:35'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (18, 'Anne', 'Cremin', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1976-02-15', '1980-03-25 05:29:41'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (19, 'Norberto', 'Bergnaum', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1971-03-11', '1993-03-20 23:36:25'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (20, 'Arvid', 'Johns', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2016-01-03', '1995-04-30 17:07:15'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (21, 'Bernita', 'Fay', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1983-12-26', '1987-02-23 16:55:28'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (22, 'Gonzalo', 'Gorczany', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1987-10-19', '2016-10-18 19:25:46'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (23, 'Jackie', 'Klein', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1971-01-20', '2010-11-16 02:58:05'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (24, 'Andrew', 'Kessler', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1984-08-07', '1971-12-15 08:46:42'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (25, 'Claire', 'Hudson', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1984-12-19', '1991-07-04 14:35:53'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (26, 'Prudence', 'Runte', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2008-12-27', '1985-09-30 04:57:55'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (27, 'Destinee', 'Romaguera', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1978-11-09', '1997-11-09 19:58:08'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (28, 'Marianna', 'Harvey', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2013-08-28', '1990-08-06 19:29:19'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (29, 'Eloy', 'Lakin', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1989-12-08', '1974-03-16 03:21:16'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (30, 'Rubie', 'McClure', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1987-09-12', '1998-07-02 10:45:36'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (31, 'Marisa', 'Stracke', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1975-05-28', '1975-03-19 00:57:35'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (32, 'Jacey', 'Beatty', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1979-12-17', '1971-01-21 16:50:58'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (33, 'Idella', 'Ruecker', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2009-09-15', '1996-04-19 22:27:31'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (34, 'Dimitri', 'Bednar', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1998-12-02', '2008-12-30 23:29:57'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (35, 'Elfrieda', 'Smitham', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2018-07-23', '1972-04-01 07:52:25'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (36, 'Dwight', 'Walter', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2016-08-15', '1994-07-02 11:06:55'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (37, 'Macie', 'Fay', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1976-01-29', '2005-12-13 18:44:46'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (38, 'Lori', 'Kshlerin', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1983-04-08', '1986-01-18 16:03:52'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (39, 'Jeffry', 'Paucek', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2002-10-02', '2004-03-29 07:06:03'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (40, 'Yvonne', 'Bernhard', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2017-11-04', '1986-12-15 23:55:23'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (41, 'Ludwig', 'Heathcote', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1981-02-09', '2000-08-02 20:45:48'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (42, 'Jadyn', 'Wiegand', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1982-06-16', '1980-12-05 13:09:37'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (43, 'Ferne', 'Smitham', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1996-12-17', '1984-11-18 19:26:27'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (44, 'Meta', 'Corkery', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1972-03-31', '2007-01-20 00:07:31'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (45, 'Toni', 'Wolf', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2012-04-15', '1973-06-22 12:14:37'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (46, 'Zack', 'Luettgen', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2003-05-29', '2018-11-19 05:03:21'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (47, 'Kameron', 'Dietrich', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1973-05-20', '1974-09-16 20:27:17'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (48, 'Zetta', 'Lebsack', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1996-11-04', '2001-03-06 01:33:01'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (49, 'Benny', 'Hane', This email address is being protected from spambots. You need JavaScript enabled to view it.', '2008-02-02', '2006-01-27 22:12:39'); INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (50, 'Evans', 'Gleason', This email address is being protected from spambots. You need JavaScript enabled to view it.', '1999-09-09', '1990-09-26 17:50:11');
Ahora que hemos creado con éxito nuestra base de datos e insertado registros ficticios, configuremos nuestra aplicación CodeIgniter para comunicarse con la base de datos.
Abra la aplicación / config / database.php
Establezca los parámetros de conexión de la base de datos similares a los siguientes
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => 'melody', 'database' => 'ci_pagination', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
AQUÍ,
- ‘hostname’ => ‘localhost’, establece el nombre de host de la base de datos
- ‘username’ => ‘root’, especifica el nombre de la base de datos
- ‘password’ => ‘openseseme’, establece la contraseña de la base de datos
- ‘database’ => ‘ci_pagination’ especifica el nombre de la base de datos.
Cargaremos automáticamente la biblioteca de la base de datos cuando se inicie nuestra aplicación. Vamos a hacer eso. Abra la aplicación / config / autoload.php
Cargue la biblioteca de la base de datos como se muestra en el siguiente código
$autoload['libraries'] = array('database');
Esa es la configuración de su base de datos.
Ahora trabajamos en el modelo de base de datos para una página.
Modelo de base de datos de páginas de CodeIgniter
Cree un nuevo modelo Authors_model en la aplicación / modelos
Agrega el siguiente código
<?php class Authors_model extends CI_Model { protected $table="authors"; public function __construct() { parent::__construct(); } public function get_count() { return $this->db->count_all($this->table); } public function get_authors($limit, $start) { $this->db->limit($limit, $start); $query = $this->db->get($this->table); return $query->result(); } }
AQUÍ,
- protegido $ tabla = «autores»; definir una variable protegida que defina el nombre de la tabla de la base de datos para el modelo
- la función pública __construct () {…} llama al generador de métodos padre
- La función pública get_count () {…} devuelve los registros completos en la tabla de la base de datos. Esto es necesario para fines de la página.
- La función pública get_authors ($ limit, $ start) {…} define un método que se utilizará para recuperar múltiples resultados de la base de datos. Cruzaremos la frontera y el punto de partida. El límite define el número total de registros que se devolverán y el principio define el número de registros que se omitirán.
ese es nuestro modelo de base de datos. Ahora creamos los canales que responderán a los resultados de nuestra página.
Maneras extendidas de CodeIgniter
Abra el archivo de rutas en application / config / route.php
Agrega la siguiente ruta
$route['authors/(:num)'] = 'authors';
AQUÍ,
- Definimos un autor de ruta que acepta un parámetro opcional del número. El parámetro opcional se define mediante el uso de paréntesis de apertura y cierre. La ruta definida llama al método de índice en el controlador de Autores.
Pasemos ahora al controlador para nuestros resultados paginados
Controlador de paginación CodeIgniter
Cree un nuevo archivo Authors.php en el directorio application / controllers
Agrega el siguiente código
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Authors extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->model('authors_model'); $this->load->library("pagination"); } public function index() { $config = array(); $config["base_url"] = base_url() . "authors"; $config["total_rows"] = $this->authors_model->get_count(); $config["per_page"] = 10; $config["uri_segment"] = 2; $this->pagination->initialize($config); $page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; $data["links"] = $this->pagination->create_links(); $data['authors'] = $this->authors_model->get_authors($config["per_page"], $page); $this->load->view('authors/index', $data); } }
AQUÍ,
- La clase CI_Controller extiende la clase {…} definimos la clase Author que extiende la clase CI_Controller
- función pública __construct () {…} Este método inicia el constructor principal y carga el asistente de URL, el modelo de autor y la biblioteca de páginas.
- índice de función pública () {…} define el método correspondiente a nuestros autores de ruta
- $ config[«base_url»] = base_url (). «autor»; establece la URL de la página que se utilizará para generar enlaces de página
- $ config[«total_rows»] = $ seo-> modelo_autores-> get_count (); establece todo el conjunto que debe ser página. El valor se obtiene del modelo de autor llamando al método get_count.
- $ config[«per_page»] = 10; las filas que deben mostrarse por página están definidas
- $ config[«uri_segment»] = 2; especifica el segmento de URL que contiene el valor que se utilizará para omitir registros
- $ this-> page-> start ($ config); la biblioteca de páginas comienza a usar el valor de la matriz de configuración que definimos y le asignamos los valores anteriores.
- $ página = ($ esto-> uri-> segmento (2))? $ seo-> uri-> segmento (2): 0; comprueba que el número de omisión esté configurado en el segundo párrafo de la URI y si no lo está, se asigna un valor de 0 a la variable $
- $ detalles[«links»] = $ seo-> página-> crear_vínculos (); crea los enlaces de la página y les asigna la clave de enlaces de la variable de edición $ data.
- detalles[‘authors’] = $ seo-> author_model-> get_authors ($ config[«per_page»], $ página); recuperar los registros de los autores de la página y asignarlos a la clave de los autores de la variable $ edit data
- $ this-> load-> view (‘autor / índice’, $ datos); la vista de índice se carga en el directorio de autores y pasa la variable $ variable data.
Eso es todo para nuestro modelo. Ahora creamos la vista que mostrará los resultados de nuestra base de datos.
Cree nuevos autores de directorio en la aplicación / comentarios
Cree un nuevo archivo index.php en la aplicación / comentarios / autores / index.php
Agrega el siguiente código
<!DOCTYPE html> <html> <head> <title>CodeIgniter Pagination</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <h3 class="title is-3">CodeIgniter Database Pagination</h3> <div class="column"> <table class="table is-bordered is-striped is-narrow is-hoverable is-fullwidth"> <thead> <tr> <th>ID</th> <th>Contact Name</th> <th>Contact Number</th> <th>Email</th> <th>City</th> </tr> </thead> <tbody> <?php foreach ($authors as $author): ?> <tr> <td><?= $author->id ?></td> <td><?= $author->first_name ?></td> <td><?= $author->last_name ?></td> <td><?= $author->email ?></td> <td><?= $author->birthdate ?></td> </tr> <?php endforeach; ?> </tbody> </table> <p><?php echo $links; ?></p> </div> </div> </body> </html>
AQUÍ,
- enfermedad de buzo php foreach ($ údar mar $ údar) :?> por los resultados de la variable $ author e imprime los resultados en la tabla
php macalla $ naisc; Priontálann?>
los enlaces de la página en la parte inferior de nuestra tabla.
Comencemos con nuestra aplicación ahora y veamos los resultados.
En este tutorial, usamos el servidor web PHP incorporado, pero puede usar cualquier servidor web que admita PHP.
Abre la terminal
Ejecute el siguiente comando
cd C:Sitesci-app php -S localhost:3000
AQUÍ,
- El comando anterior examina el directorio del código de la aplicación e inicia el servidor integrado en el puerto 3000.
Nota: la ruta de la aplicación debe descargar la ruta en la que descargó CodeIgniter. Para hacer esto, puede usar cualquier número de puerto libre en su computadora. No es necesario utilizar el puerto 3000.
Abra el navegador web y cargue la siguiente URL
http: // localhost: 3000 / autores
Debería poder obtener resultados como los siguientes
Resumen
En este tutorial, combinamos los elementos básicos de la página y usamos la biblioteca de páginas en CodeIgniter y la usamos para crear una aplicación que reúne los resultados de la base de datos.