Guten Abend zusammen,
so, ich bewege mich stark auf die erste Beta meiner Komponente zu und habe heute schon (auch dank @Re:Later s Hilfe) einige Fortschritte gemacht.
In meiner Komponente ist es nun möglich, Datensätze nach Datum zu filtern und diese zu exportieren.
Die Exportfunktion bilde ich durch die Toolbar ab:
if (isset($this->items[0]->state)) { JToolBarHelper::custom('items.exportcsv', 'download', '', 'COM_BESTIA_EXPORT', true);}
Im Controller existiert folgende Methode:
/** * exportcsv function. * * @access public * @return void */public function exportcsv(){ $jinput = JFactory::getApplication()->input; $ids = $jinput->get('cid', '', 'array'); $modelitems = $this->getModel(); $array = array(); foreach($ids as $id) { $item = $modelitems->getItem($id); $array[$item->id]['itemid'] = $item->itemid; $array[$item->id]['state'] = $item->state; $array[$item->id]['creationdate']= $item->creationdate; } $csv = ArrayHelper::exportArrayToCSV($array, "item-report"); $this->setRedirect('index.php?option=com_bestia&view=items', false); }
Diese wird auch ganz wunderbar angesteuert und der Export funktioniert durch meinen kleinen Helper auch ganz wunderbar
public static function exportArrayToCSV($array, $filename, $delimiter=";")
{
$config = JFactory::getConfig();
$tmppath = $config->get('tmp_path');
$keys = array_keys($array);
if(is_dir($tmppath))
{
$filename = "$filename.csv";
$filepath = "$tmppath/$filename";
$file = new SplFileObject($filepath, 'w');
$file->fputcsv(array_keys($array[$keys[0]]),$delimiter);
foreach ($array as $fields)
{
$file->fputcsv($fields,$delimiter);
}
if(file_exists($filepath))
{
header ( 'Content-Description: File Transfer' );
header ( 'Content-Type: application/force-download' );
header ( 'Content-Type: application/octet-stream' );
header ( 'Content-Disposition: attachment; filename=' . $filename );
header ( 'Expires: 0' );
header ( 'Cache-Control: must-revalidate' );
header ( 'Pragma: public' );
header ( 'Content-Length: ' . filesize ($filepath) );
ob_clean();
flush();
readfile ($filepath);
unlink($filepath);
exit();
}
else return false;
}
else return false;
}
Alles anzeigen
Jetzt habe ich aber ein letztes Problem: Wenn ich nach einem Export in der Searchbar z.B. den zu filternden Status ändere, dann wird der Export erneut vorgenommen - ohne dass ich auf einen entsprechenden Button klicken würde.
Ich vermute, dass dies mit dem "exit();" in der exportArrayToCSV zusammen hängt. Das Exit ist aber notwenig, da der Download sonst nicht funktioniert.
Habt ihr da ggf. Ansätze, wie ich das lösen könnte?