jqgridaデータをExcelまたはcsvファイルにエクスポートしようとしていますが、この例の php + jqgrid + export to Excelに従っていましたが、ボタンをクリックしてデータをエクスポートしても何も起こりません。ここにコードが入ります..
これは、グリッドをレンダリングする list.phtml です。エクスポート ボタンを押すと、jqgrid からデータが取得され、アクション /checkins/export に送信されます。
<div class="simplebox grid740" style="z-index: 500;">
<script>
$(function() {
$("#toolbar").jqGrid({
caption:"Checkins",
colNames:['ID','Nome da Tag','Localização da Tag','Cliente','Utilizador','Data da Leitura','Data da Escrita',],
colModel:[
{name:'id_checkin',index:'id_checkin',hidden:true},
{name:'tag_nome',index:'tag_nome'},
{name:'localizacao',index:'localizacao'},
{name:'nome_cli',index:'nome_cli'},
{name:'nome_user',index:'nome_user'},
{name:'data_leitura',index:'data_leitura'},
{name:'data_escrita',index:'data_escrita'},
],
datatype:"json",
height:421,
rownumWidth:40,
pager:'#ptoolbar',
rowList:[10,20,30],
rowNum:10,
sortname:'id_cliente',
sortorder:'desc',
url:'/checkins/list/',
viewrecords:true,
width:740,
});
$("#toolbar").jqGrid('navGrid','#ptoolbar',{del:false,add:false,edit:false,search:false,excel:true});
jQuery("#toolbar").jqGrid('navButtonAdd','#ptoolbar',{
caption:"export",
onClickButton : function () {
alert('export to excel');
var mya=new Array();
mya=$("#toolbar").getDataIDs(); // Get All IDs
var data=$("#toolbar").getRowData(mya[0]); // Get First row to get the labels
var colNames=new Array();
var ii=0;
for (var i in data){colNames[ii++]=i;} // capture col names
var html="";
for(k=0;k<colNames.length;k++)
{
html=html+colNames[k]+"\t"; // output each Column as tab delimited
}
html=html+"\n"; // Output header with end of line
for(i=0;i<mya.length;i++)
{
data=$("#toolbar").getRowData(mya[i]); // get each row
for(j=0;j<colNames.length;j++)
{
html=html+data[colNames[j]]+"\t"; // output each Row as tab delimited
}
html=html+"\n"; // output each row with end of line
}
html=html+"\n"; // end of line at the end
$.ajax({
url: '/checkins/export',
type: 'POST',
data: {param1: html},
datatype: "json"
});
}
});
});
</script>
<table id="toolbar"></table>
<div id="ptoolbar"></div>
</div>
したがって、firebug によると、これを送信します: param1:
id_checkin tag_nome localizacao nome_cli nome_user data_leitura data_escrita
1 ササ マイア;ポルト; tesret1212; 管理者 2013-08-14 15:45:00 2013-08-14 16:00:00
2 ササ マイア;ポルト; tesret1212; トレ 2013-08-14 16:06:00 2013-08-14 16:05:00
3 ササ マイア;ポルト; tesret1212; テスト 2013-08-14 12:15:00 2013-08-14 16:15:00
そして私のアクション /checkins/export im でこれをやっています:
public function exportAction()
{
if($this->_request->isXmlHttpRequest())
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$param1 = $this->_request->getParam('param1');
header("Content-Type: application/vnd.ms-excel");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment;filename=contacts-download-" . time() . ".xls");
$buffer = $param1;
try{
echo $buffer;
}catch(Exception $e){
}
}
}
ここでは、param1 情報を受信してヘッダーを設定し、データをエコーします。しかし、ファイルのダウンロードを求めるボックスが表示されません。他の解決策を試しましたが、何も機能しません...何が欠けていますか。Excelレイアウトを作成することで、ビューをcsv/excelファイルとしてレンダリングすることは可能ですか? 前もってありがとうヒューゴ