Передача данных из класса PHP в PHPExcel через AJAX - PullRequest
6 голосов
/ 09 февраля 2012

Я застрял с ООП PHP и данными JSON. я не совсем новичок в ООП, но я не могу разобраться с этим. если кто-нибудь может объяснить мне, было бы здорово!

У меня есть следующий объект сетки в 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;
        }

и вызывается 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);

я пытаюсь получить возможность экспортировать текущий запрос sql (это могут быть все или результаты поиска) в Excel, используя PHPExcel. Итак, у меня есть файл toExcel.php с функцией toexcel ($ query), которая принимает запрос и экспортирует его в Excel.

сейчас - КАК мне передать sql-запрос из сетки в toexcel через AJAX?

  1. Я понимаю, что мне нужно добавить к $ data ():

    $ data ['sql'] = $ sql;

что дальше?


UPDATE: Я использую следующую сетку jquery: http://square -bracket.com / openjs

Я понимаю, что PHPExcel должен инициироваться либо с помощью grid, либо с помощью jquery

1 Ответ

12 голосов
/ 13 февраля 2012

Общее представление о том, что вы можете сделать:

Создайте кнопку, например

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

Затем в jquery вы должны создать что-то вроде:

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

});

Файл export_to_excel.php будет содержать код, который генерирует файл Excel:

  1. Здесь вы инициируете класс PHPExcel и создаете файл, например, new_excel.xls
  2. .массив ответов $ response ['url'] будет содержать абсолютный URL-адрес вновь создаваемого файла.(http://www.example.com/files/new_excel.xls)

Это может показаться слишком сложным, но попробуйте разделить свои цели и достичь одной за раз. Например:

  1. Создать кнопку.
  2. Затемпопробуйте выполнить простой вызов AJAX при нажатии кнопки.
  3. Затем создайте файл export_to_excel.php и попробуйте поработать с классом PHPExcel.
  4. Создайте образец файла Excel на основе найденных учебных пособий..
  5. Создайте файл Excel на основе ваших собственных данных, но жестко запрограммируйте его в файле php.
  6. Создайте правильный вызов AJAX, который отправит нужные данные в файл php.
  7. Перехватите правильный AJAX-вызов.
  8. Передайте данные из AJAX-вызова в класс PHPExcel.
  9. Создайте файл Excel.
  10. Отправьте URL-адрес вфайл Excel.
  11. Перенаправьте пользователя на URL-адрес файла Excel.

РЕДАКТИРОВАТЬ

Чтобы помочь вам немного больше: Вынужен только один скрипт / файл PHP. Тот же самый получит вызов AJAX из файла javascript, сгенерирует excel file и вернет / ответит URL файла в файл javascript (в таком порядке).Упрощенный пример будет:

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

И затем в javascript вы отображаете файл с этой строкой

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