【发布时间】:2012-02-09 10:19:59
【问题描述】:
我被 OOP PHP 和 json 数据卡住了。我对 OOP 并不完全陌生,但我无法理解这一点。如果有人可以向我解释一下,那就太好了!
我在 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);
我想要的是能够使用 PHPExcel 将当前的 sql 查询(可以是全部或搜索结果)导出到 Excel 中。所以我有 toExcel.php 函数 toexcel($query) - 它将接受查询并将其导出到 excel。
现在 - 我如何通过 AJAX 将 sql 查询从网格传递到 toexcel?
-
我知道我需要添加到 $data():
$data['sql'] = $sql;
接下来呢?
更新: 我正在使用以下 jquery 网格: http://square-bracket.com/openjs
我了解 PHPExcel 应该由 grid 或 jquery 启动
【问题讨论】:
-
为什么要通过 AJAX?为什么不在 PHP 中完成这一切?
-
因为网格本身是从 ajax 加载的。所以只有在ajax调用时才会形成sql查询:
$(".grid.digital_edit").loadGrid({...}) -
好的 - 我不需要被 AJAX 卡住。但那又如何呢?
-
不要回显
$grid->data,而是将其用作PHPExcel的输入数据 -
@ Mchl - 你是什么意思“代替”?那么网格将不会加载。它应该在浏览器中加载并且仍然具有导出到 Excel 的能力......而且我不需要每次都将它导出到 Excel - 只有当用户请求时,比如按下按钮?