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_bannersfind这个例子:

  • 控制器: 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