Joomla导出或下载报告到CSV
我在我的库存部分有以下代码当我运行这个代码保存一个Excel文件,但结果显示整个HTML文件不是我的数据。
<?php $csv = NULL; $arr = array("product_name","product_sku","product_in_stock","virtuemart_product_id","product_price_display","product_instock_value"); $csv = "Product Name, Product SKU, In Stock, Booked ordered products, Cost Price, Stock Value \n"; $c=0; while(list($key,$value)=each($arr)){ $c++; $cc=1; foreach ($this->inventorylist as $key => $product){ $cc++; $csv .= join(',',array($product->product_name.",".$product->product_sku.",".$product->product_in_stock.",".$product->virtuemart_product_id.",".$product->product_price_display.",".$product->product_instock_value))." \n"; } } JResponse::clearHeaders(); JResponse::setHeader('Content-Type', 'application/vnd.ms-excel', true); JResponse::setHeader('Content-Disposition', 'csv; filename=inventory_report.csv; size='.strlen($csv), true); JResponse::sendHeaders();
任何帮助将不胜感激。
谢谢
Khalique
这里是暴力解决scheme,让你走吧:
header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=file.csv"); header("Pragma: no-cache"); header("Expires: 0"); // Echo the csv content. echo "foo,bar\n1,2"; // Close the application gracefully. JFactory::getApplication()->close();
不使用视图,而是在url中包含&format=raw
的更简洁的方法是:
$app = JFactory::getApplication(); $doc = JFactory::getDocument(); $doc->setMimeEncoding('application/vnd.ms-excel'); $app->setHeader( 'Content-disposition', 'attachment; filename="inventory_report.csv"', true ); echo "foo,bar\n1,2";
但最好的方法是使用基于raw
文档types的下载视图。 你可以在com_banners
find这个例子:
- 控制器: https : //github.com/joomla/joomla-cms/blob/staging/administrator/components/com_banners/controllers/tracks.raw.php
- 查看: https : //github.com/joomla/joomla-cms/blob/staging/administrator/components/com_banners/views/tracks/view.raw.php
您也可以从此讨论中获得一些额外的信息https://groups.google.com/forum/#!topic/joomla-dev-general/dRa_39AGDBY