En este tutorial vamos a crear un pequeño sistema de alarmas. Dicho sistema consistirá en la administración de promociones en una tienda, de tal forma que el administrador será capaz de agregar promociones, establecer un rango de fechas y, si la fecha actual entra en ese rango se mostrará la promoción (alarma) en el catalogo.
Para la elaboración del sistema necesitamos descargar los siguientes archivos.

Una vez descargados, el primer paso es descomprimir el archivo de CodeIgniter, cuando se haya descomprimido renombramos la carpeta a alarmas, después lo copiamos a nuestro servidor local.
El segundo paso es descomprimir Grocery CRUD, aquí hay más pasos que debemos realizar.
- Copiar la carpeta assets dentro de la carpeta alarmas.
- Copiar el archivo application/config/grocery_crud.php a la carpeta alarmas/application/config/
- Copiar el todo contenido de la carpeta application/libraries a la carpeta alarmas/application/libraries/
- Copiar el archivo application/models/grocery_crud_model.php a la carpeta alarmas/application/models/grocery_crud.php
Ahora procedemos a descomprimir bootstrap, cuando se haya descomprimido copiamos la carpeta bootstrap dentro de alarmas/assets/
Finalmente nuestra estructura de archivos debe quedar igual que la siguiente imagen.

Ahora vamos a crear una nueva base de datos y le llamaremos alarmas_db.

Dentro de esta base de datos, crearemos una tabla a la que llamaremos promociones.

Podemos crearla a mano, o insertar el siguiente código.
1 2 3 4 5 6 7 |
CREATE TABLE `alarmas_db`.`promociones` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `nombre_promocion` VARCHAR( 120 ) NOT NULL , `mensaje_promocion` VARCHAR( 250 ) NOT NULL , `fecha_inicio` TIMESTAMP NOT NULL , `fecha_vencimiento` TIMESTAMP NOT NULL ) ENGINE = INNODB; |
Después de esto procederemos a configurar CodeIgniter.
Primero tenemos que abrir el archivo alarmas/application/config/config.php y modificar la siguiente línea.
1 |
$config['base_url'] = 'http://localhost/alarmas/'; |
Luego abrimos el archivo alarmas/applications/config/database.php y modificamos las siguientes líneas.
1 2 3 4 5 |
$db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = ''; /*tu password*/ $db['default']['database'] = 'alarmas_db'; $db['default']['dbdriver'] = 'mysql'; |
Ya con esto que hemos realizado, tenemos configurado CodeIgniter correctamente, eso quiere decir que si van a la siguiente dirección http://localhost/alarmas/ les tendrá que mostrar una pagina como la siguiente.

Ahora vamos a tener que crear un archivo en la carpeta alarmas/application/controllers/ el cual lo llamaremos admin.php, e insertamos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Admin extends CI_Controller { protected $now; public function __construct() { parent::__construct(); /* Cargamos el helper url y date */ $this->load->helper('url'); $this->load->helper('date'); /* Inicializamos la base de datos */ $this->load->database(); /* Cargamos la libreria groceru_crud */ $this->load->library('grocery_crud'); /* Obtenemos la fecha actual */ $timestamp = now(); $timezone = 'UM8'; $daylight_saving = FALSE; $now = gmt_to_local($timestamp, $timezone, $daylight_saving); $datestring = "%Y-%m-%d %h:%i:%s"; $this->now = mdate($datestring, $now); } public function index() { /* Redirigimos a la funcion promociones() */ redirect('admin/promociones'); } public function promociones() { try{ /* Instanciamos la clase grocery CRUD */ $crud = new grocery_CRUD(); /* Establecemos flexigrid como nuestro tema */ $crud->set_theme('flexigrid'); /* Le decimos que la tabla con la que trabajaremos es promociones */ $crud->set_table('promociones'); /* Nombre de referencia a la tabla */ $crud->set_subject('Promociones'); /* Establecemos español como el lenguaje predeterminado */ $crud->set_language('spanish'); /* Añadimos una funcionalidad extra a las columnas */ $crud->callback_column('estatus',array($this,'_GC_Estatus')); /* Estos campos seran obligatorios */ $crud->required_fields( 'nombre_promocion', 'mensaje_promocion', 'fecha_inicio', 'fecha_vencimiento' ); /* Establecemos las columnas que mostraran */ $crud->columns( 'nombre_promocion', 'mensaje_promocion', 'fecha_inicio', 'fecha_vencimiento', 'estatus' ); /* Obtenemos la tabla dinamica */ $output = $crud->render(); /* La mandamos a la vista alermas/application/views/admin/promociones.php */ $this->load->view('admin/promociones', $output); }catch(Exception $e){ show_error($e->getMessage().' --- '.$e->getTraceAsString()); } } public function _GC_Estatus($value, $row) { /* Si la fecha actual es mayor o igual a la del inicio de la promocion y es menor * a la de la fecha de vencimiento, la promocion esta activa. */ if($this->now >= $row->fecha_inicio AND $this->now < $row->fecha_vencimiento) { return '<span class="alert alert-success">Activa</span>'; } else { return '<span class="alert alert-danger">Inactiva</span>'; } } } |
Después creamos una carpeta llamada admin dentro de la carpeta alarmas/applications/views y dentro de admin creamos un archivo que se llame promociones.php, e insertamos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Administración Promociones</title> <?php foreach($css_files as $file): ?> <link type="text/css" rel="stylesheet" href="<?php echo $file; ?>" /> <?php endforeach; ?> <?php foreach($js_files as $file): ?> <script src="<?php echo $file; ?>"></script> <?php endforeach; ?> <link type="text/css" rel="stylesheet" href="<?php echo base_url(); ?>assets/bootstrap/css/bootstrap.css" /> <style type='text/css'> body { padding: 11px; } </style> </head> <body> <h1>Promociones</h1> <div> <?php echo $output; ?> </div> </body> </html> |
Una vez hecho esto, tenemos nuestro administrador listo para crear promociones.

Ahora procederemos a crear la vista del catalogo, donde se muestren las promociones activas.
Para esto, en la carpeta alarmas/applications/controllers/ creamos un nuevo archivo y le llamamos catalogo.php, dentro de este archivo insertamos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Catalogo extends CI_Controller { protected $now; public function __construct() { parent::__construct(); /* Cargamos el helper url y date */ $this->load->helper('url'); $this->load->helper('date'); /* Inicializamos la base de datos */ $this->load->database(); /* Obtenemos la fecha actual */ $timestamp = now(); $timezone = 'UM8'; $daylight_saving = FALSE; $now = gmt_to_local($timestamp, $timezone, $daylight_saving); $datestring = "%Y-%m-%d %h:%i:%s"; $this->now = mdate($datestring, $now); } public function index() { /* Redirigimos a la funcion promociones() */ redirect('catalogo/promociones'); } public function promociones() { /* Si la fecha de inicio de la promocion es menor o igual a la fecha actual */ $this->db->where('fecha_inicio <=', $this->now); /* Y la fecha de vencimiento es mayor a la fecha actual */ $this->db->where('fecha_vencimiento >', $this->now); /* Traemos todas las promociones de nuestra base de datos */ $data['promociones'] = $this->db->get('promociones')->result(); //print_r($data['promociones']); /* Mandamos las variables a la vista alarma/application/views/catalogo/promociones.php */ $this->load->view('catalogo/promociones', $data); } } |
Después tenemos que crear una carpeta llamada catalogo dentro de alarma/application/views, y dentro de catalogo creamos un nuevo archivo llamado promociones.php, dentro insertamos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Promociones | Catalogo</title> <link type="text/css" rel="stylesheet" href="<?php echo base_url(); ?>assets/bootstrap/css/bootstrap.css" /> <style type='text/css'> body { padding: 11px; } </style> </head> <body> <h1>Promociones</h1> <div> <?php if($promociones): ?> <?php foreach($promociones as $promocion): ?> <div class="alert alert-info"> <strong><?php echo $promocion->nombre_promocion; ?></strong><br /> <?php echo $promocion->mensaje_promocion; ?><br /> Fecha de vencimiento: <?php echo $promocion->fecha_vencimiento; ?> </div> <?php endforeach; ?> <?php else: ?> <div class="alert alert-danger"> No hay ninguna promoción activa </div> <?php endif; ?> </div> </body> </html> |
Listo ahora tendremos nuestro pequeño sistemas de alarmas completamente funcional, solo falta modificar un último archivo, alarma/application/config/routes.php. Modificamos la siguiente línea.
1 |
$route['default_controller'] = "catalogo/promociones"; |

Para dar de alta una promoción solo basta con ir a http://localhost/alertas/index.php/admin.
Para verificar las promociones vigentes basta con ir a http://localhost/alertas.