Direkt zum Inhalt springen Direkt zur Navigation springen Direkt zum Footer springen

CSV Export mit Extbase und Fluid

Für eine Schnittstelle möchte die Gegenseite per HTTP Request auf Daten in TYPO3 zugreifen.

Ich habe das ohne zusätzliches Plugin gelöst. Dabei legt man zunächst in Typoscript ein neues Seitenobjekt an:

csv = PAGE 
csv { 
  typeNum = 1238 
  config { 
    disableAllHeaderCode = 1 
    additionalHeaders = Content-type:text/csv|Cache-Control:no-cache, must-revalidate, max-age=0|Pragma:no-cache 
    xhtml_cleaning = 0 
    admPanel = 0 
  } 
  10 < tt_content.list.20.iwcompanies_address 
  10.switchableControllerActions { 
    Address { 
      1 = csv 
    } 
  } 
}

Wird nun eine beliebige Seite mit dem Suffix "&type=1238" aufgerufen, gelangt man auf die Action "csv". Vorteil dieser Methode im Gegensatz zu einem zusätzlichen Plugin ist, dass man hier die Header direkt im Typoscript definieren kann. 

Die Action csv sieht so aus:

/** 
* 
* @return void 
*/ 
public function csvAction() {
     $addresses = $this->addressRepository->findAll();
     $this->view->assign('addresses', $addresses); 
}

Hier werden die Adressen (um diese Datensätze geht es) einfach wie gewohnt an Fluid übergeben.

Im Template Csv.html kann die CSV Liste konfiguriert werden.

"companyName";"street";"zip";"city";"country"; 
<f:for each="{addresses}" as="address"><f:format.htmlentitiesDecode>"{address.company.companyName}";"{address.street}";"{address.zip}";"{address.city}";"{address.country}";</f:format.htmlentitiesDecode> 
</f:for>