2012-02-09 21 views
5

me quedé atrapado con OOP PHP y datos json. No soy completamente nuevo en OOP, pero no puedo entender esto. si alguien puede por favor explicarme, sería genial!Pasar datos de la clase PHP a PHPExcel a través de AJAX

tengo el siguiente objeto de cuadrícula en PHP:

Class Grid { 

     var $data; 
     var $joins; 
     var $fields; 
     var $where; 
     var $table; 
     var $groupBy; 
     var $having; 
     var $limit; 
     var $order_by; 
     var $sort; 
     var $security; 
     var $set; 
     var $sql; 

.... 

     // loads data into the grid 
     function load() { 
    ... 
      // setup the sql - bring it all together 
      $sql = " 
       SELECT $post[cols] 
       FROM `$table` 
       $joins 
       $where 
       $groupBy 
       $having 
       ORDER BY $order_by $sort 
       $limit 
      "; 

      $this->sql = $sql; 

      // execute the sql, get back a multi dimensial array 
      $rows = $this->_queryMulti($sql); 

      // form an array of the data to send back 
      $data = array(); 
      $data['rows'] = array(); 
      foreach($rows as $i=>$row) { 
       foreach($row as $col=>$cell) { 
        // use primary key if possible, other wise use index 
        $key = $primaryKey ? $row[$primaryKey] : $i; 
        // primary key has an _ infront becuase of google chrome re ordering JSON objects 
        //http://code.google.com/p/v8/issues/detail?id=164 
        $data['rows']["_".$key][$col] = $cell; 
       } 
      } 

    ...   
      $data['order_by'] = $order_by; 
      $data['sort'] = $sort; 
      $data['page'] = $page; 
      $data['start'] = $startRow + 1; 
      $data['end'] = $startRow + $nRowsShowing; 
      $data['colData'] = $colData; 

      $this->data = $data; 
     } 

y se llama AJAX callgrid.php:

$grid->load(); 
     // here we need to add field in data[sql] = sql query, then we can pass it to toExcel() - how? 
     echo json_encode($grid->data); 

lo que estoy tratando de conseguir es ser capaz de exportar actual consulta sql (puede ser todos o resultados buscados) en Excel usando PHPExcel. Así que tengo queExcel.php con la función toexcel ($ query) - que tomará una consulta y lo exportará a Excel.

ahora - ¿CÓMO paso la consulta sql de la cuadrícula a toexcel a través de AJAX?

  1. entiendo que tengo que añadir a los datos ($):

    datos

    $ [ 'sql'] = $ sql;

¿qué sigue?


ACTUALIZACIÓN: estoy usando la siguiente cuadrícula de jQuery: http://square-bracket.com/openjs

entiendo que PHPExcel debe iniciarse ya sea por cuadrícula o jQuery

+0

Por qué a través de AJAX? ¿Por qué no hacerlo todo dentro de PHP? – Mchl

+2

porque la red se carga desde ajax. por lo que la consulta sql se formará solo cuando sea invocada por ajax: '$ (". grid.digital_edit "). loadGrid ({...})' – Elen

+0

ok - no necesito estar atascado con AJAX. pero ¿cómo, de todos modos? – Elen

Respuesta

11

una idea general de lo que podría hacer:

Crear un botón, por ejemplo

<a href="#" id="export">export to Excel</a> 

Luego, en jQuery que tiene que crear algo como:

var grid = $(".grid.digital_edit").loadGrid({...}); //or similar - what you did to load the data into the grid 

$('#export').click(function() { 
    $.ajax({ 
     url: "export_to_excel.php", // the url of the php file that will generate the excel file 
     data: grid.getData(), //or similar - based on the grid's API 
     success: function(response){ 
      window.location.href = response.url; 
     } 
    }) 

}); 

El export_to_excel.php archivo contendrá el código que genera el archivo de Excel:

  1. Aquí es donde usted' Iniciaremos la clase PHPExcel y crearemos un archivo, por ejemplo new_excel.xls
  2. En su matriz de respuestas, $ respuesta ['url'] contendrá la url absoluta en el archivo recién creado. (http://www.example.com/files/new_excel.xls)

Puede parecer demasiado complejo, pero intente separar sus objetivos y lograr uno a la vez. P.ej.

  1. Cree el botón.
  2. Luego intente realizar una simple llamada AJAX al presionar el botón.
  3. A continuación, cree su archivo export_to_excel.php e intente trabajar con la clase PHPExcel.
  4. Crea un archivo de muestra de Excel basado en los tutoriales encontrados.
  5. Crea un archivo de Excel basado en tus propios datos, pero codificado en el archivo php.
  6. Crea la llamada AJAX correcta que envía los datos deseados a un archivo php.
  7. Captura la llamada AJAX correcta.
  8. Pase los datos de la llamada AJAX a la clase PHPExcel.
  9. Crea el archivo de Excel.
  10. Devuelve la url al archivo de Excel.
  11. Redirige al usuario a la URL del archivo de Excel.

EDITAR

Para ayudarte un poco más: Sólo necesita un script PHP/archivo. El mismo recibirá la llamada AJAX del archivo javascript, generará el archivo excel y devolverá/responderá la url del archivo al archivo javascript (en ese orden). Un ejemplo simplificado sería:

<?php 
//export_to_excel.php 

$data = $_POST['data']; // get the data from the AJAX call - it's the "data: grid.getData()" line from above 

//... format the received data properly for the PHPExcel class 

// later on in the same file: 
$xls = new PHPExcel(); 
$xls->loadData($formattedData); //I assume that there is a similar loadData() method 
$xls->exportToFile('/vaw/www/example.com/public/files/new_excel.xls'); // I assume that there is an exportToFile() method 

$response = array(
    'success' => true, 
    'url' => 'http://www.example.com/files/new_excel.xls' 
); 

header('Content-type: application/json'); 

// and in the end you respond back to javascript the file location 
echo json_encode($response); 

Y luego en javascript que visualice el archivo con esta línea

window.location.href = response.url; //response.url is $response['url'] from the PHP script 
+0

Gracias Aletzo - Ya tengo todos los archivos php en funcionamiento - mi problema es interconectarlos. por lo que sugiere que pueda acceder a la consulta sql actualmente ejecutada simplemente llamándola a AJAX como datos: grid.getData() - this getData() ¿me creo o asume que esta función ya debería estar disponible dentro de la grilla? – Elen

+0

La parte grid.getData() es javascript. La librería javascript que usa para mostrar la grilla, _debería haber implementado un método para que pueda obtener los datos de la grilla (lo llamé getData). Si no, debes hacerlo tú mismo, pero generalmente cada biblioteca tiene un método similar que puedes usar. – aletzo

+0

En javascript, no tiene acceso a la consulta sql ni a la clase PHPExcel. Es por eso que tiene que hacer la llamada AJAX, lo que significa que el javascript (lado del cliente) le está pidiendo al php (lado del servidor) que haga algo. El php se ocupará de la clase PHPExcel, generará el archivo y le dirá a javascript que "OK aquí está la url del archivo Excel que creé". Luego, javascript mostrará esa url al usuario. – aletzo

Cuestiones relacionadas