2012-02-09 17 views
5

utknąłem z danymi OOP PHP i json. Nie jestem całkowicie nowy w OOP, ale nie mogę tego zrozumieć. jeśli ktokolwiek może mi to wyjaśnić, byłby świetny!Przekazywanie danych z klasy PHP do PHPExcel przez AJAX

mam następujący obiekt siatki w 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; 
     } 

i jest nazywany przez 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); 

co staram się dostać to, aby móc eksportować prąd kwerendy sql (może to być wszystkie lub wyniki wyszukiwania) do programu Excel przy użyciu PHPExcel. Więc mam do Exxcel.php z funkcją toexcel ($ query) - to zajmie kwerendę i wyeksportuje ją do programu Excel.

teraz - JAK przekazać zapytanie sql z siatki do toexcel za pośrednictwem AJAX?

  1. Rozumiem, że trzeba dodać do $ dane():

    $ data [ 'sql'] = $ sql;

co dalej?


UPDATE: Używam następujące jquery siatki: http://square-bracket.com/openjs

Rozumiem, że PHPExcel należy rozpoczynać albo przez siatkę lub jQuery

+0

Dlaczego poprzez AJAX? Dlaczego nie zrobić tego wszystkiego w PHP? – Mchl

+2

, ponieważ sama siatka ładuje z ajax. tak zapytań SQL zostaną utworzone tylko wtedy, gdy wywołana przez AJAX: '$ loadGrid ({...})' – Elen

+0

ok - i nie muszą być skazani na AJAX ("grid.digital_edit.").. ale jak to w ogóle było? – Elen

Odpowiedz

11

ogólny pomysł co można zrobić:

Utwórz przycisk np.

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

Następnie w jquery trzeba stworzyć coś takiego:

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; 
     } 
    }) 

}); 

Plik export_to_excel.php będzie zawierać kod, który generuje plik Excel:

  1. To tu” Zainicjuję klasę PHPExcel i utworzę plik np new_excel.xls
  2. W twojej tablicy odpowiedzi $ response ['url'] będzie zawierał bezwzględny URL do nowo utworzonego pliku. (http://www.example.com/files/new_excel.xls)

Może to wydawać się zbyt skomplikowane, ale spróbuj oddzielić swoje cele i osiągnąć je pojedynczo. Na przykład.

  1. Utwórz przycisk.
  2. Następnie spróbuj wykonać proste wywołanie AJAX po naciśnięciu przycisku.
  3. Następnie utwórz plik export_to_excel.php i spróbuj pracować z klasą PHPExcel.
  4. Utwórz przykładowy plik Excela na podstawie znalezionych samouczków.
  5. Utwórz plik excel na podstawie własnych danych, ale zakodowany w pliku php.
  6. Tworzenie poprawnego wywołania AJAX, który wysyła dane chciał pliku php.
  7. Złap poprawne połączenie AJAX.
  8. przekazać dane z wywołania AJAX do klasy PHPExcel.
  9. Utwórz plik excel.
  10. Wyślij z powrotem adres URL pliku Excel.
  11. przekierować użytkownika do adresu URL pliku excel.

EDIT

aby pomóc Ci nieco więcej: Musisz tylko jeden skrypt PHP/plik. Ten sam otrzyma wywołanie AJAX z pliku javascript, wygeneruje plik excel i zwróci/odpowie URL pliku do pliku javascript (w tej kolejności). Uproszczony przykład byłyby:

<?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); 

A następnie w javascript wyświetlać plik z tej linii

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

Dzięki Aletzo - mam już wszystkie działające pliki php - moim problemem jest ich połączenie. więc sugerujesz, że mógłbym uzyskać dostęp do zapytania sql aktualnie uruchomionego przez po prostu wywołanie go do AJAX jako danych: grid.getData() - to getData() czy sam utworzyłem lub zakładasz, że ta funkcja powinna być już dostępna w siatce? – Elen

+0

Część grid.getData() to javascript. Biblioteka javascript, której używasz do wyświetlania siatki, _długo_ zaimplementowała już metodę, dzięki której możesz uzyskać dane siatki (nazwałem ją getData). Jeśli nie, musisz zrobić to sam, ale zazwyczaj każda biblioteka ma podobną metodę, z której możesz korzystać. – aletzo

+0

W javascript nie masz dostępu do kwerendy sql ani do klasy PHPExcel. Właśnie dlatego musisz wykonać wywołanie AJAX, co oznacza, że ​​javascript (strona klienta) pyta php (po stronie serwera) o zrobienie czegoś. Php zajmie się klasą PHPExcel, wygeneruje plik i powie javascript, że "OK, tutaj jest URL pliku Excel, który stworzyłem". Następnie javascript pokaże ten URL użytkownikowi. – aletzo

Powiązane problemy