sábado, 27 de abril de 2013

Componente Tabla tercera parte borrando los datos

Como se puede ver en el atributo permisos está habilitado "D" que le dice a nuestro script lineas(49-52) que añada la opción de borrar, no hay que olvidar que nosotros armamos la configuración del jtable antes de enviárselo al pluggin para eso le enviamos en la linea 83 del script:
title: config_jtable.titulo - el titulo de la tabla
actions: acciones - las acciones , urls, o controllers donde se realizan las acciones de borrar, crear, actualizar, etc
fields: campos -- los campos de la tabla que coinciden con la base de datos
Internamente el plugin jtable envía los datos anteriores por medio de ajax a los controlleer necesarion


    <jtabla id="invtabla" tabla="inventario" permisos="CRUD" titulo="Mis inventarios">
         <campo nombre="id" titulo="El id dek item" autoinc="true"></campo>
    </jatbla> 
   




Para actualizar los datos necesitamos necesariamente enviar el id de la fila que se está cambiando linea 15

 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
/* 
 * La lógica por parte del cliente usando jquery
 */

jQuery(document).ready(function(){
    // datepicker("#datepicker");
    html_jtabla();
    function html_jtabla(){
        var arr_jtabla = $("jtabla");
        $.each(arr_jtabla, function(key, value) {
            var id_jtabla = $(this).attr("id");
            var nombre_tabla = $(this).attr("tabla");
            var permisos = $(this).attr("permisos");
            var titulo = $(this).attr("titulo");
            var campo_id = $("campo[autoinc=true]").attr("nombre");
           
            var string_div = '<div id="'+ id_jtabla + '" ></div>';
            $(this).replaceWith(string_div);
            var config_jtable = {
                "id":id_jtabla,
                "tabla":nombre_tabla,
                "permisos":permisos,
                "titulo":titulo,
                "campo_id": campo_id  // el campo id(autoincrement de la tabla en la bd
            }
            jtable(config_jtable);
        });
    }

    function jtable(config_jtable){
        // crea las acciones
        var acciones = {};
        var campos ={};
            // CORREGIR NOTA se tuvo que cambiar en el config de codeigniter a $config['uri_protocol']    = "PATH_INFO";
        var $config_urlencoded = $.param(config_jtable);//codifica la url
        $.each(config_jtable.permisos, function(key, value) {
            if(value=="R"){
                acciones.listAction = "componentes/listar/"+config_jtable.tabla;
            }
            if(value=="C"){
               
                //console.log($config_json);
                acciones.createAction = "componentes/crear?"+$config_urlencoded;
            }
            if(value=="U"){
                console.log("Actualizar activado")
                acciones.updateAction = "componentes/actualizar?"+$config_urlencoded;
            }
            if(value=="D"){
                //console.log("Borrar activado")
                acciones.deleteAction = "componentes/borrar?"+$config_urlencoded;
            }
            if(value==null){
                console.log("Defina las acciones");
            }
        });
        //esta parte obtiene los campos de la tabla automaticamente
        $.ajax({
            type: "POST",
            url: "componentes/listar_campos/"+config_jtable.tabla,
            async:false,
            success: function(msg){
                var datos = $.evalJSON(msg);// se convierte de json a un objeto javascript
                $.each(datos, function(key, value) {
                    campos[value] = {
                        title:value
                    };
                   
                    // se añade el campo autoincrement de la tabla a la configuracion
                    if(config_jtable.campo_id == value){
                   
                        campos[value].key= true;//es el campo id
                        campos[value].create=false;//no se puede crear
                        campos[value].edit=false;//no se puede editar
                        campos[value].list=false;//no se muestra
                    }

                });
   
            }
        },config_jtable); //CORREGIR REVISAR SI ELPARAMETRO DE ESTA LINEA ESTA BIEN
    // se crea el objeto jtable
        $('#'+config_jtable.id).jtable({
            title: config_jtable.titulo,
            actions: acciones,
            fields:  campos
        });
//se cargan los datos
        $('#'+config_jtable.id).jtable('load');
    }

});// fin de ready function


Una vez que se ha definido el action o la función del controller en este caso linea 51 del javascript   acciones.deleteAction = "componentes/borrar?"+$config_urlencoded; , es tiempo  tiempo de definirla en el controller componentes, no crei necesario incluir todo el codigo del controller así que solo copie la función borrar que es la que nos interesa. De la linea 4 a la 7 se obtieen los datos que vienen del plugin y del script anterior, en la linea 7 simplemente se ejecuta la función que se encarga de borrar el dato de la fila identificado por el id, en las lineas 11 a 14 se regresa al javascript, que solicita el listar los datos, el array que define el éxito del proceso y que se ha mencionado antes y se incluye el id_registro o identificador que se borro de la base de datos y ot


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php   
 public function borrar() {
        //Delete from database
        $tabla = $this->input->get('tabla'); // se envian por querystring
        $campo_id = $this->input->get('campo_id');
        $id_registro = $this->input->post($campo_id);
        $this->Generic_model->borra_registro($tabla, $campo_id, $id_registro);
        //$result = mysql_query("DELETE FROM people WHERE PersonId = " . $_POST["PersonId"] . ";");
        // borra el campo
        //Return result to jTable
        $jTableResult = array();
        $jTableResult['Result'] = "OK";
        $jTableResult['debug'] = $id_registro;
        echo json_encode($jTableResult);
    }
?>

El modelo simplemente he copiado la función que ejecuta la consulta de borrado del registro de la base de datos por id, y que es llamado en la linea 7 del controller, recibe como argumentos la tabla donde se realiza la consulta, el campo que se quiere consultar y el id del registro que se quiere borrar



1
2
3
4
5
 <?   function borra_registro($tabla, $campo_id, $id_registro) {

        $this->db->delete($tabla, array($campo_id => $id_registro));
    }
?>

El resultado al ejecutar http://localhost/blog/index.php/tabla se puede apreciar que se ha icluido al final del registro un icono en forma de papelera y al hacer click hay que confirmar para borrar el dato.


No hay comentarios:

Publicar un comentario