Force Загрузить CSV файл
Я пытаюсь создать кнопку, которая заставит загрузку файла CSV, но по какой-то причине я не могу заставить его работать. Это код, который у меня есть:
public function export_to_csv($result) {
$shtml="";
for ($i=0; $i<count($result); $i++){
$shtml = $shtml.$result[$i]["order_number"]. "," .$result[$i]["first_name"]. "," .$result[$i]["middle_name"]. "," .$result[$i]["last_name"]. "," .$result[$i]["email"]. "," .$result[$i]["shipment_name"]. "," .$result[$i]["payment_name"]. "," .$result[$i]["created_on"]. "," .$result[$i]["modified_on"]. "," .$result[$i]["order_status"]. "," .$result[$i]["order_total"]. "," .$result[$i]["virtuemart_order_id"]. "\n";
}
Header('Content-Description: File Transfer');
Header('Content-Type: application/force-download');
Header('Content-Disposition: attachment; filename=pedidos.csv');
}
Здесь возникает переменная $result:
public function get_orders_k() {
$db=JFactory::getDBO();
$query = " select o.order_number, o.virtuemart_order_id, o.order_total, o.order_status, o.created_on, o.modified_on, u.first_name,u.middle_name,u.last_name "
.',u.email, pm.payment_name, vsxlang.shipment_name ' .
$from = $this->getOrdersListQuery();
$db->setQuery($query);
$result=$db->loadAssocList();
if ( $result > 0 )
{
$datos = VirtueMartModelKiala::export_to_csv($result);
}else return 0;
}
Я не уверен даже, где начать искать. Я просматриваю Интернет по различным способам этого и пробовал все, и до сих пор не могу заставить его работать. Пожалуйста, помогите мне!
-Спасибо
Ответы
Ответ 1
Поместите этот код ниже вашего цикла.
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="pedidos.csv"');
echo $shtml;
Как вы узнали приложение типа контента/принудительное скачивание? Я никогда не слышал об этом. Правильный тип MIME для CSV текст /csv
Вы можете найти дополнительные примеры использования функции заголовка в php manual
Вам также нужно отобразить $shtml
, который вы не сделали в своем коде.
Ответ 2
Ну. вы можете попробовать это, он будет работать, если ваш результат не пуст.
public function export_to_csv($result)
{
if(!$result) return false;
ob_end_clean();
header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename=pedidos.csv');
$fp = fopen('php://output', 'w');
$headrow = $result[0];
fputcsv($fp, array_keys($headrow));
foreach ($result as $data) {
fputcsv($fp, $data);
}
fclose($fp);
$contLength = ob_get_length();
header( 'Content-Length: '.$contLength);
}
Ответ 3
вам нужно echo
ваше содержимое после заголовка
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename=pedidos.csv');
echo $shtml