ProcessWire - schneller CSV-Export: Unterschied zwischen den Versionen
Aus Wikizone
Steff (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Quick & Dirty Template wenn du schnell mal Daten exportieren möchtest: <syntaxhighlight lang="php"> <?php namespace ProcessWire; /** * custom-export.php…“) |
(kein Unterschied)
|
Version vom 17. Juni 2025, 08:18 Uhr
Quick & Dirty Template wenn du schnell mal Daten exportieren möchtest:
<?php
namespace ProcessWire;
/**
* custom-export.php
* Template für quick and dirty exporte
* Um den selector leichter zu erstellen kannst du im Adminbereich unter Page->find eine Abfrage bauen.
* $selector ist der Selector für die Abfrage
* $fields sind die Felder die im CSV-Export ausgegeben werden (müssen Felder sein die zum Abfrageergebnis passen)
*/
$out = '';
// Selector für export von Usern bei fasch angelegter Antwort (wurde danach korrigiert)
//$selector = 'has_parent!=2, template=54|55, selected_answer*=B, pr_question=190720, checkbox=0, limit=0, sort=-modified, include=unpublished'; // hier kommt dein Selector
//$fields = ['pr_question', 'pr_user.firstname', 'pr_user.lastname', 'pr_user.email', 'selected_answer', 'checkbox'];
// User mit mindestens einer beantworteten Frage
$selector = 'template=3, parent=29, include=all, limit=100, status<9999999, template=3, parent=29, answered_questions!=0, roles=1044, sort=name';
$fields = ['name','firstname', 'lastname', 'email'];
exportCustomCSV($selector, $fields);
/**
* exportCSV
* @param String - the selector
* @param Array Feldnamen die exportiert werden.
*
*/
function exportCustomCSV($selector,$fields) {
/**
* Exportiert die user_answer-Datensätze als CSV.
*/
$filename = "pw_export_" . date("Ymd_His") . ".csv";
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $filename);
$output = fopen('php://output', 'w');
// CSV-Kopfzeile
$headers = [];
foreach($fields as $fieldName) {
// Versuche, das Field-Objekt zu holen
$f = wire()->fields->get($fieldName);
if($f) {
$headers[] = $f->label;
} else {
// Fallback
$headers[] = $fieldName;
}
}
$output = fopen('php://output', 'w');
fputcsv($output, $headers);
// DATEN
$items = pages()->find($selector);
foreach($items as $item) {
bd($item);
$row = [];
foreach($fields as $fieldName) {
$value = $item->$fieldName;
// Wenn PageArray (z.B. mehrere Referenzen), join Titles
if($value instanceof \ProcessWire\PageArray) {
$titles = [];
foreach($value as $p) $titles[] = $p->title;
$row[] = implode('|', $titles);
}
// Wenn einzelne Page (z.B. eine Referenz), Titel ausgeben
elseif($value instanceof \ProcessWire\Page) {
$row[] = $value->title;
}
// Sonst ganz normal in String casten
else {
$row[] = (string) $value;
}
}
fputcsv($output, $row);
}
//bd($items);
fclose($output);
exit;
}