Я пытаюсь создать кнопку, которая заставит загрузку файла 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; }
Я не уверен даже, где начать искать. Я просматриваю Интернет по различным способам этого и пробовал все, и до сих пор не могу заставить его работать. Пожалуйста, помогите мне!
-Благодаря
Поместите этот код ниже своего цикла.
header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="pedidos.csv"'); echo $shtml;
Как вы узнали приложение типа контента / force-download? Я никогда не слышал об этом. Правильный тип MIME для CSV – текст / csv
Вы можете найти дополнительные примеры использования функции заголовка в руководстве php
Вам также нужно отобразить $shtml
вы не делали в своем коде.
Что ж. вы можете попробовать это, это сработает, если ваш результат не будет пустым
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); }
вы должны echo
свой контент после заголовка
header('Content-Description: File Transfer'); header('Content-Type: application/force-download'); header('Content-Disposition: attachment; filename=pedidos.csv'); echo $shtml