• Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!

Necesito Ayuda con un Grid

Foros generales de ayuda Ext 2.0.

Ext.foro.Nuevo
Mensajes: 11
Registrado: 09 Jun 2011, 06:17
NotaPublicado: 30 Sep 2011, 05:06
Hola,
estoy trabajando con datos cartograficos con lo q la salida de mi Json es GeoJson. Defini un grid en el q cargo el resultado de una consulta en PHP, pero claro estoy haciendo una salida a un fichero y quiero hacerlo del modo q no tenga q escribir un fichero e ir a leerlo del disco, ya q los datos vienen de un form y la consulta se modifica a cada rato. Para enviar los datos del form estoy usando AJAX para q no se me recargue la pagina cuando envio la consulta.
Primeramente pongo como defino el grid:
Código: Seleccionar todo
//Aquí definimos el gridpanel que recogera la información del vecLayer
   //se crea el feature store, que se unirá al vecLayer
    store = new GeoExt.data.FeatureStore({
      layer: vecLayer,
        fields: [
      {name: 'a_code', type:'string'},
      {name: 'shooting_time', type: 'string'},
               {name: 'total_discarded_weight', type: 'double'},
        ],
        proxy: new GeoExt.data.ProtocolProxy({
            protocol: new OpenLayers.Protocol.HTTP({
            url: "data/especie.json",
            format: new OpenLayers.Format.GeoJSON(),
            })
        })
    });

sigue el grid:
Código: Seleccionar todo
gridPanel = new Ext.grid.GridPanel({
       title: "Información de Capturas",
      region: "south",
      border: true,
      collapsible: true,
      collapsed:true,
      collapseMode: "mini",
          store: store,
      stateful: true,
      width:320,
      height:400,
      boxMinHeight: 450,
      autoScroll: true,
      split:true,
       columns: [{
            header: "COD",
            width: 35,
       sortable: true,
            dataIndex: "a_code"
        },{
            header: "Fecha Lance",
            width: 160,
       sortable: true,
            dataIndex: "shooting_time"
        },{
            header: "Total Descartes",
            width: 100,
       sortable: true,
            dataIndex: "total_discarded_weight"
        }],
      stripeRows: true,
      sm: new GeoExt.grid.FeatureSelectionModel()
   });

La pagina PHP desde donde genero el GeoJson seria la siguiente:
Código: Seleccionar todo
<?php
/*conexion a la base de datos */
$conexion = pg_connect("host=*** port=*** dbname=*** user=postgres password=***");
   if (!$conexion){
      echo "<center>La conexi&oacute;n con la base de datos no se ha realizado.</center>";
      exit;
}
$date1 = "'".$_POST['date1']."'";
$date2 = "'".$_POST['date2']."'";
$especies_procesar = $_POST['especies'];
$especies_procesar = str_replace("#",",",$especies_procesar);
$query = "select id_haul, id_catch, shooting_time, total_discarded_weight, a_code, ST_AsGeoJSON(geom, 4) AS geojson from \"haul\" natural inner join catch where a_code in (".ltrim($especies_procesar,',').") and shooting_time between ".$date1." and (timestamp ".$date2." + interval '1 days')";
echo $query;
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
?>
<?php
$geojson = array(
   'type' => 'FeatureCollection',
   'features' => array()
);
$i = 0;
while ($line = pg_fetch_assoc($result)) {
   $feature = array(
      'geometry' => json_decode($line['geojson'], true),
      'properties' => $data[]=$line,
      'id' => $i++
      );
array_push($geojson['features'], $feature);
}
$especie = json_encode($geojson);
$archivo = fopen(".../data/especie.json", "w");
fwrite($archivo, $especie);
fclose($archivo);
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
pg_free_result($result);
// cerramos la Base de dtos.
pg_close($conexion);
?>

y el codigo AJAX donde envio los datos del formulario para hacer la consulta
Código: Seleccionar todo
<script type="text/javascript">
function enviarDatos(){
   var formulario = document.getElementById("formulario");
   var datos = new FormData(formulario);
   //xhr(datos);
      probadate1=document.getElementById('date1');
    proba_date1=probadate1.value;
    probadate2=document.getElementById('date2');
    proba_date2=probadate2.value;
   probachooser=document.getElementById('especies');
   // completar la seguiente linea para obtener los values seleccionados en "selector"
   var txt='';
   var i;
   var count = 0;
   for (i=0; i<probachooser.options.length; i++) {
       if (probachooser.options[i].selected) {
         if (count==0)
      txt+= "'"+probachooser.options[i].value+"'";
         else
        txt+= "#'"+probachooser.options[i].value+"'";
       }
   count++;
   }
   //hace la comparacion de las dos fechas
   compareDates('datechooser','date1','date2');
    url_proba='date1='+proba_date1+'&date2='+proba_date2+'&especies='+txt;
   xhr(url_proba);
}
var xmlhttp;
function xhr(datos){ //funcion para crear las peticiones de XMLHttpResquest
// Generalmente sacada de páginas que usan un método para IE6 o anteriores,
// IE 7, FF, Opera, Google Chrome, u otros.
      if (window.XMLHttpRequest)
           {// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
           }
      else
           {// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      xmlhttp.onreadystatechange = procesarRespuesta; //Ojo sin parentesis
      xmlhttp.open("POST", "consulta2.php", true);
      xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlhttp.setRequestHeader("Content-length", 3);
      xmlhttp.setRequestHeader("Connection", "close");
      xmlhttp.send(datos);
      //hace la comparacion de las dos fechas
      //compareDates('datechooser','date1','date2');
      }
   function procesarRespuesta(){
      if(xmlhttp.readyState == 4) {
            if(xmlhttp.status == 200) {
            //document.getElement.innerHTML = xmlhttp.responseText;
         //alert(xmlhttp.responseText);
         //recarga el grid al hacer la peticion. de salida esta a false para que no lo muestre.
         store.load();
         }
       }
}
</script>

El asunto seria pasar los datos al grid sin hacer el fichero.
he probado a hacer un echo json_enconde($geojson); y en la url del grid poner la pagina consulta2.php y metod POST, el echo del POST me devuelve la consulta q hago en el form:
select id_haul, id_catch, shooting_time, total_discarded_weight, a_code, ST_AsGeoJSON(geom, 4) AS geojson from "haul" natural inner join catch where a_code in ('14') and shooting_time between '20110905' and (timestamp '20110914' + interval '1 days')

pero el GET me da error, no reconoce los date q le envio por POST:

Notice: Undefined index: date1 in /var/www/html/faros/Geo/consulta2.php on line 8

Notice: Undefined index: date2 in /var/www/html/faros/Geo/consulta2.php on line 9

Notice: Undefined index: especies in /var/www/html/faros/Geo/consulta2.php on line 10
select id_haul, id_catch, shooting_time, total_discarded_weight, a_code, ST_AsGeoJSON(geom, 4) AS geojson from "haul" natural inner join catch where a_code in () and shooting_time between '' and (timestamp '' + interval '1 days')
Warning: pg_query(): Query failed: ERROR: syntax error at or near ")" at character 162 in /var/www/html/faros/Geo/consulta2.php on line 16
Query failed: ERROR: syntax error at or near ")" at character 162


Agradezco la ayuda.
Para no ver esta publicidad, debes ser usuario del Foro.
Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)


Cuixer, una forma de administrar páginas web que nunca viste!

Volver a Ext 2.0: Ayuda





  • Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!