[Wordpress] Exportar datos desde una BBDD con una interfaz de usuario

Buenas.

Necesito que los usuarios sean capaces de seleccionar un rango de fechas (preferiblemente con un DatePicker), y se lance una consulta a una BBDD MySQL.

Posteriormente, estos datos se han de mostrar y haber la opción de descargarlos a CSV.

¿Existe algún plugin que permita esto desde una interfaz de usuario embebida en Wordpress?

Gracias!
@[Jun].

El primero de todos es el único que puede valer. Lo probaré.

Gracias!
Yo hace unos meses tuve que hacer algo parecido aunque no para wordpress, si no para el sistema que desarrollamos.

Hice un formulario donde pones la fecha o los selects / datepickers a filtrar y mediante Ajax envias la peticion al servidor. Este responde con los datos con JSON y luego con Javascript puedes crear el fichero csv y forzar la descarga.

Te dejo el codigo

function consultaCarregaPersona() {
   var RGXCurs = new RegExp("^\\d{4}$");
   var curs = $("#curs").val();
   var areainput = $("#area").val().trim();
   var tipuscontracte = $("#tipuscontracte").val().trim();
   var dni = $("#persona").val();
   var format = $("#format").val();
   var urlAJAX = $("#urlAJAX").val()+"?/aplicacio=2705&/tipus_plana=1003&curs="+curs+"&contracte="+tipuscontracte+"&area="+areainput+"&dni="+dni;
   if ( !curs.trim().match(RGXCurs) ) { swal("ERROR","El curs posat no te un format valid","error"); return false; }

   // LIMPIAMOS LOS RESULTADOS ANTERIORES
   $("#resultat").html("");   
   
   $.ajax({
      url: urlAJAX,
      async: true,
      success: function (result) {
         var respuestaParseada = jQuery.parseJSON(result);
         if ( respuestaParseada["response"] == "OK" ) {
            
            var total_hores = 0; var total_calcul = 0;
            if (format == "CSV") {
               
               var nom_fitxer= "";               
               if (areainput != "" ) { nom_fitxer += "_Area["+$("#area option:selected").text()+"]"; }
               if (tipuscontracte != "" ) { nom_fitxer += "_Contracte["+$("#tipuscontracte option:selected").text()+"]"; }
               if (dni != "" ) {
                  var nompersona = $("#persona option:selected").text();
                  nompersona = nompersona.replace(",","_");
                  nompersona= nompersona.replace(/ +/g,'_');
                  nompersona= nompersona.replace(/\_+/g,'_');
                  nom_fitxer += "_Persona["+nompersona+"]";
               }
               
               var csvContent = "data:text/csv;charset=utf-8,";
               // csvContent+= "Departament;Contracte;Àrea;Projecte;Subprojecte;Persona;Grup;Tipus Càrrega [Factor];Hores Càrrega;Càlcul\n";
               csvContent+= "Departament;Contracte;Àrea;Projecte;Subprojecte;Persona;Grup;Tipus Càrrega [Factor];Hores Càrrega;Càlcul\n";
               
               
               $.each(respuestaParseada["llistat"], function (row, elem) {
               //   csvContent += elem["departament"]+";";
               //   csvContent += elem["contracte"]+";";
                  csvContent += elem["area"]+";";
                  csvContent += elem["projecte"]+";";
                  csvContent += elem["subprojecte"]+";";
                  csvContent += elem["persona"]+";";
                  csvContent += elem["grup"]+";";
                  csvContent += elem["tipuscarrega"]+";";
                  csvContent += elem["hores_carrega"]+";";   if ( elem["hores_carrega"].length != 0 && !isNaN(elem["hores_carrega"]) ) { total_hores += parseFloat(elem["hores_carrega"]); }
                  csvContent += elem["calcul"]+"\n";          if ( elem["calcul"].length != 0 && !isNaN(elem["calcul"]) ) { total_calcul += parseFloat(elem["calcul"]); }

               });
               csvContent += ";;;;;Total;"+total_hores.toFixed(2)+";"+total_calcul.toFixed(2)+"\n";
               var encodedUri = encodeURI(csvContent);
               var link = document.createElement("a");
                  link.setAttribute("href", encodedUri);
                  link.setAttribute("download", "InformePersones_"+curs+nom_fitxer+".csv");
                  link.click();
            } else {
               // FORMATO HTML
               var htmlCode = "";
               htmlCode+= "<div class='col-lg-12 col-md-12'>";
               htmlCode+= "<table id='resultats-persona' class='table table-striped table-condensed table-bordered'>";
               //htmlCode+= "<thead><tr><th>Departament</th><th>Contracte</th><th>Àrea</th><th>Projecte</th><th>Subprojecte</th><th>Grup</th><th>Tip.Càrrega [Factor]</th><th>Càlcul</th></tr></thead><tbody>";
               htmlCode+= "<thead><tr><th>Àrea</th><th>Projecte</th><th>Subprojecte</th><th>Persona</th><th>Grup</th><th>Tip.Càrrega [Factor]</th><th>Hores</th><th>Càlcul</th></tr></thead><tbody>";
               
               $.each(respuestaParseada["llistat"], function (row, elem) {
                  htmlCode += "<tr>";
                  //htmlCode += "<td class='text-left'>"+elem["departament"]+"</td>";
                  //htmlCode += "<td class='text-left'>"+elem["contracte"]+"</td>";
                  htmlCode += "<td class='text-left'>"+elem["area"]+"</td>";
                  htmlCode += "<td class='text-left'>"+elem["projecte"]+"</td>";
                  htmlCode += "<td class='text-left'>"+elem["subprojecte"]+"</td>";
                  htmlCode += "<td class='text-left'>"+elem["persona"]+"</td>";
                  htmlCode += "<td class='text-left'>"+elem["grup"]+"</td>";
                  htmlCode += "<td class='text-left'>"+elem["tipuscarrega"]+"</td>";
                  htmlCode += "<td class='text-right'>"+elem["hores_carrega"]+"</td>";   if ( elem["hores_carrega"].length != 0 && !isNaN(elem["hores_carrega"]) ) { total_hores += parseFloat(elem["hores_carrega"]); }
                  htmlCode += "<td class='text-right'>"+elem["calcul"]+"</td>";           if ( elem["calcul"].length != 0 && !isNaN(elem["calcul"]) ) { total_calcul += parseFloat(elem["calcul"]); }
                  htmlCode += "</tr>";
               });
   
               htmlCode += "</tbody>";
               htmlCode += "<tfoot><tr>";
               htmlCode += "<th></th><th></th><th></th><th></th><th></th><th class='text-right'>Total:</th><th class='text-right'>"+total_hores.toFixed(2)+"</th><th class='text-right'>"+total_calcul.toFixed(2)+"</th>";
               htmlCode += "</tr></tfoot>";
               htmlCode += "</table>";
               // PINTAMOS LOS DATOS EN EL HTML
               $("#resultat").html(htmlCode);
            }
Gracias @sodark, seguro que puedo aprovecharlo [oki]
Si ves que no existe ningún plugin para WP y te animas a desarrollarlo - seguro que en un futuro alguien podría utilizarlo - no te olvides de publicarlo o comentarlo en el hilo :)

Un saludo,
Newton escribió:Si ves que no existe ningún plugin para WP y te animas a desarrollarlo - seguro que en un futuro alguien podría utilizarlo - no te olvides de publicarlo o comentarlo en el hilo :)

Un saludo,


Dudo que haga algo como un plugin. Si acaso lo desarrollaré a medida, pero no en formato plugin.

No obstante, si me sale y a alguien le interesa, lo pongo por aquí [oki]
No, como plugin no existe, te va a tocar desarrollarlo en php a pelo, puedes crear una página nueva y una plantilla detrás para hacer la consulta.
cipoteloth escribió:No, como plugin no existe, te va a tocar desarrollarlo en php a pelo, puedes crear una página nueva y una plantilla detrás para hacer la consulta.


En ello estoy :) . Ya tengo la página php a medias. La consulta me funciona. Ahora he de mirar como mandar los datos como un descargable csv.

Saludos!
Puedes crear el fichero (añadele un timestamp al nombre) y enviar al usuario el link. Otra opción es lo que te puse yo antes de json y crear el csv con JavaScript
9 respuestas