Crear un sistema de alarmas, manipulando fechas con CodeIgniter

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.

Imagen 1

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.

  1. Copiar la carpeta assets dentro de la carpeta alarmas.
  2. Copiar el archivo application/config/grocery_crud.php a la carpeta alarmas/application/config/
  3. Copiar el todo contenido de la carpeta application/libraries a la carpeta alarmas/application/libraries/
  4. 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.

Imagen 2

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

Imagen 3

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

Imagen 5

Podemos crearla a mano, o insertar el siguiente código.

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.

Luego abrimos el archivo alarmas/applications/config/database.php y modificamos las siguientes líneas.

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.

Imagen 6

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.

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.

Una vez hecho esto, tenemos nuestro administrador listo para crear promociones.

Imagen 7

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.

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.

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.

Imagen 8

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.

Descarga los archivos del tutorial aquí

Descargar

loading...

Escrito por pedgarc

Soy estudiante de Ciencias Computacionales de la Universidad Autónoma de Nuevo León y desarrollador de software enfocado a la web, especialmente, carritos y tiendas electrónicas.

12 Comentarios

Deja una respuesta
  1. Hola tengo una duda y quiero que me colaboren como hago cuando un campo “X” este vacio y me de como mensaje de alerta campo vacio Gracias!!!

  2. Hola, para variar funciona todo perfecto , ahora bien estoy usando un callback_after_insert funciona bien, salvo que las fechas no me las inserta en la tabla de relación (utilizo esto para agregar estos datos para insertar en una tercera tabla junto con la clave primaria del elemento que creo) el tema es que la fecha que esta en timestamp no me captura con $post_array que es el que tiene los valores formulario, tendrá algún tratado especial este tipo de variables?
    Espero me pueda ayudar, use el set_n_n_ relation() pero no se adapta la vista a lo que necesito :-/

  3. hola buen dia muchas gracias por compartir este sistema esta muy bien elaborado, tengo una pregunta al insertar una promocion lo agrega correctamente pero cuando deseo mostrar las promociones no aparece a que se debe esto pero si inserto una promocion con la fecha de ayer o mas antigua si lo acepta como hacer que si acepte las fechas actuales y que las muestre ojala puedas ayudarme…

  4. buen tutorial discula y si en tu proyecto le añadimos un set_ralation para traer datos de otra tabla como seria he tratado de implementarlo pero no he podido mostrar los datos de otra tabla a menos que omita el callback_comun este es el cidigo

    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’);
    /*redirect(‘admin/respuestas’);*/
    }

    public function promociones()
    {
    try{
    $crud = new grocery_CRUD();

    $crud->set_theme(‘datatables’);
    $crud->set_table(‘promociones’);

    $crud->columns(
    ‘nombre_promocion’,
    ‘mensaje_promocion’,
    ‘fecha_inicio’,
    ‘fecha_vencimiento’,
    ‘nombre_producto’,

    ‘estatus’
    );

    $crud->display_as(‘numprod’,’producto nombre_producto’)
    ->display_as(‘fecha_vencimiento’)
    ->display_as(‘fecha_inicio’)
    ->display_as(‘estatus’);
    $crud->set_subject(‘promociones’);

    /* Establecemos español como el lenguaje predeterminado */
    $crud->set_language(‘spanish’);

    //$crud->set_relation(‘numalar’,’promociones’,’nombre_promocion’,’mensaje_promocion’);
    $crud->set_relation(‘numprod’,’producto’,’nombre_producto’);

    /* Añadimos una funcionalidad extra a las columnas */
    $crud->callback_column(‘estatus’,array($this,’_GC_Estatus’));

    //$crud->columns(‘nombre_producto’,’descripcion_producto’,’nombre_promocion’,’mensaje_promocion’,’fecha_inicio’);
    /* $crud->required_fields(
    ‘nombre_promocion’,
    ‘mensaje_promocion’,
    ‘fecha_inicio’,
    ‘fecha_vencimiento’,
    ‘nombre_producto’,
    ‘descripcion_producto’
    );*/

    $output = $crud->render();

    $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.
    */

    $fechaVencimiento = ($row->fecha_vencimiento);
    $arrStr = explode(“-“, $fechaVencimiento);
    $arrStr = explode(“/”, $arrStr[0] );
    $fechaVencimiento = $arrStr[1] . “/” . $arrStr[ 0 ] . “/” . $arrStr[2];
    $fechaVencimiento = strtotime( $fechaVencimiento );

    $fechaInicio = ($row->fecha_inicio);
    $arrStr = explode(“-“, $fechaInicio);
    $arrStr = explode(“/”, $arrStr[0] );
    $fechaInicio = $arrStr[1] . “/” . $arrStr[ 0 ] . “/” . $arrStr[2];
    $fechaInicio = strtotime( $fechaInicio );

    if( $fechaVencimiento > time() && $fechaInicio < time())

    {
    return 'Activa’;

    } else {

    return ‘Inactiva’;
    }
    }

    }

  5. Pedgarc, muchas gracias por tus sistema de alarmas, lo agregue a un proyecto que estoy haciendo. Me funciona muy bien la alarma de que una “promocion” este vigente, sin embardo me gustaria que tambien estuviera una seccion de “proximas”. He intentado crear otra funcion en el controlador.. sin exito, tambien intente hacer otro controlador, pero no se puede tener dos para una sola vista… como podria pasar dos “datas” al view?

    Gracias.

  6. A Database Error Occurred

    Unable to select the specified database: alarmas_db

    Filename: core/Loader.php

    Line Number: 346

    me sale este error me podrian ayudar por favor

  7. Hola buen dia!!!

    sabes como agregar un boton alado de editar, para que puedas generar un pdf con los datos de la alerta?

    Saludos!!!

  8. como excluir registros digamos todos los que tengas cero un un campo
    encontre esto y funciona para traer a los registros que tiene 0
    $crud->where(‘nombreci!’,’0′);
    pero para evitar que los traiga seria un Where Not
    pero no funciona, sabrian algo que funcione para eso

    ayuda!!!!!
    por favor!!!!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *