2012-02-09 10 views
5

tôi bị kẹt với OOP dữ liệu PHP và dữ liệu json. Tôi không hoàn toàn mới để OOP, nhưng tôi không thể có được đầu của tôi xung quanh này. nếu có ai vui lòng giải thích cho tôi, sẽ rất tuyệt!Truyền dữ liệu từ lớp PHP sang PHPExcel qua AJAX

tôi có đối tượng lưới sau trong 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; 
     } 

và nó được gọi là bởi 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); 

những gì tôi đang cố gắng để có được là để có thể xuất khẩu hiện tại truy vấn sql (nó có thể là tất cả hoặc tìm kiếm kết quả) vào Excel bằng cách sử dụng PHPExcel. Vì vậy, tôi đã có đểExcel.php với chức năng toexcel ($ truy vấn) - mà sẽ có một truy vấn và xuất khẩu nó để excel.

bây giờ - Làm cách nào để chuyển truy vấn sql từ lưới sang toexcel qua AJAX?

  1. Tôi hiểu rằng tôi cần phải thêm vào $ data():

    dữ liệu

    $ [ 'sql'] = $ sql;

tiếp theo là gì?


UPDATE: Tôi đang sử dụng lưới điện jquery sau: http://square-bracket.com/openjs

Tôi hiểu rằng PHPExcel nên được bắt đầu bằng cách lưới hoặc jquery

+0

Tại sao thông qua AJAX? Tại sao không làm tất cả trong PHP? – Mchl

+2

vì lưới tự tải từ ajax. Vì vậy, sql truy vấn sẽ được hình thành chỉ khi được gọi bởi ajax: '$ (". grid.digital_edit "). loadGrid ({...})' – Elen

+0

ok - tôi không cần phải bị mắc kẹt với AJAX. nhưng dù sao thì sao? – Elen

Trả lời

11

Một ý tưởng chung của những gì bạn có thể làm:

Tạo nút ví dụ:

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

Sau đó, trong jquery bạn phải tạo một cái gì đó như:

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

}); 

Các export_to_excel.php tập tin sẽ chứa mã để tạo file excel:

  1. Đây là nơi bạn' sẽ khởi tạo lớp PHPExcel và tạo một tệp ví dụ new_excel.xls
  2. Trong mảng phản hồi của bạn, $ response ['url'] sẽ chứa url tuyệt đối cho tệp mới được tạo. (http://www.example.com/files/new_excel.xls)

Nghe có vẻ quá phức tạp, nhưng hãy cố gắng tách riêng mục tiêu của bạn và đạt được từng mục tiêu. Ví dụ.

  1. Tạo nút.
  2. Sau đó thử thực hiện cuộc gọi AJAX đơn giản khi nhấn nút.
  3. Sau đó, tạo tệp export_to_excel.php của bạn và cố gắng làm việc với lớp PHPExcel.
  4. Tạo tệp excel mẫu dựa trên các hướng dẫn được tìm thấy.
  5. Tạo tệp excel dựa trên dữ liệu của riêng bạn, nhưng được mã hóa cứng trong tệp php.
  6. Tạo cuộc gọi AJAX chính xác để gửi dữ liệu mong muốn đến tệp php.
  7. Bắt cuộc gọi AJAX chính xác.
  8. Chuyển dữ liệu từ cuộc gọi AJAX đến lớp PHPExcel.
  9. Tạo tệp excel.
  10. Gửi lại url tới tệp excel.
  11. Chuyển hướng người dùng đến url của tệp excel.

EDIT

Để giúp bạn nhiều hơn một chút: Bạn chỉ cần một kịch bản PHP/file. Cùng một sẽ nhận được cuộc gọi AJAX từ tập tin javascript, sẽ tạo ra các tập tin excel và sẽ trả về/trả lời các tập tin url vào tập tin javascript (theo thứ tự đó). Một ví dụ đơn giản sẽ là:

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

Và sau đó trong javascript bạn hiển thị các tập tin với dòng này

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

Cảm ơn Aletzo - Tôi đã có tất cả các tập tin php làm việc - vấn đề của tôi là kết nối chúng. vì vậy bạn gợi ý rằng tôi có thể truy cập truy vấn sql hiện đang chạy bằng cách đơn giản gọi nó là AJAX dưới dạng dữ liệu: grid.getData() - getData() này tạo ra bản thân mình hoặc bạn cho rằng chức năng này đã có sẵn trong lưới? – Elen

+0

Phần grid.getData() là javascript. Thư viện javascript mà bạn sử dụng để hiển thị lưới, _should_ đã triển khai thực hiện một phương thức để bạn có thể nhận được dữ liệu lưới (tôi gọi nó là getData). Nếu không, bạn phải tự mình làm, nhưng thường thì mọi thư viện đều có phương pháp tương tự mà bạn có thể sử dụng. – aletzo

+0

Trong javascript bạn không có quyền truy cập nào cả vào truy vấn sql, hoặc tới lớp PHPExcel. Đó là lý do tại sao bạn phải thực hiện cuộc gọi AJAX, điều đó có nghĩa là javascript (phía máy khách) đang yêu cầu php (phía máy chủ) làm điều gì đó. Các php sẽ đối phó với các lớp PHPExcel, sẽ tạo ra các tập tin và sẽ nói với javascript rằng "OK đây là url của tập tin excel mà tôi tạo ra". Sau đó, javascript sẽ hiển thị url đó cho người dùng. – aletzo