comma-separated-value data processor 

The \TYPO3\CMS\Frontend\DataProcessing\CommaSeparatedValueProcessor , alias comma-separated-value, allows to split values into a two-dimensional array used for CSV files or tt_content records of CType table.

The table data is transformed to a multi-dimensional array, taking the delimiter and enclosure into account, before it is passed to the view.

Options: 

Name Type Default
if condition ''
string / stdWrap ''
string defaults to the fieldName
integer / stdWrap 0
string / stdWrap ,
string / stdWrap "
if
if
Type
if condition
Default
''

If the condition is met, the data processor is processed.

fieldName
fieldName
Type
string / stdWrap
Required

true

Default
''

Name of the field in the processed ContentObjectRenderer.

as
as
Type
string
Default
defaults to the fieldName

The variable's name to be used in the Fluid template.

maximumColumns
maximumColumns
Type
integer / stdWrap
Default
0

Maximal number of columns to be transformed. Surplus columns will be silently dropped. When set to 0 (default) all columns will be transformed.

fieldDelimiter
fieldDelimiter
Type
string / stdWrap
Default
,

The field delimiter, a character separating the values.

fieldEnclosure
fieldEnclosure
Type
string / stdWrap
Default
"

The field enclosure, a character surrounding the values.

Example: Transforming comma separated content into a html table 

Please see also About the examples.

In this example, the bodytext field contains comma-separated values (CSV) data. To support different formats, an extension adds the field tx_myextension_separator to tt_content. An editor enters the separator between the values in this field.

This example is also described in-depth in TYPO3 Explained: Extended content element example.

Example data in the field bodytext

Field bodytext in table tt_content:

"This is row 1 column 1","This is row 1 column 2","This is row 1 column 3"
"This is row 2 column 1","This is row 2 column 2","This is row 2 column 3"
"This is row 3 column 1","This is row 3 column 2","This is row 3 column 3"
Copied!
TypoScript

We define the dataProcessing property to use the CommaSeparatedValueProcessor :

EXT:my_extension/Configuration/Sets/Main/setup.typoscript
tt_content {
  myextension_dataproccsv =< lib.contentElement
  myextension_dataproccsv {
    templateName = DataProcCsv
    dataProcessing.10 = comma-separated-value
    dataProcessing.10 {
      if.isTrue.field = bodytext
      fieldName = bodytext
      fieldDelimiter.field = tx_myextension_separator
      fieldEnclosure = "
      maximumColumns.field = imagecols
      as = myTable
    }
  }
}
Copied!
The Fluid template

In the Fluid template, you can iterate over the processed data. "myContentTable" can be used as a variable {myContentTable} inside Fluid for iteration.

EXT:my_extension/Resources/Private/Templates/ContentElements/DataProcCsv.fluid.html
<html data-namespace-typo3-fluid="true" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
  <h2>Data in variable "myTable"</h2>
  <f:debug inline="true">{myTable}</f:debug>

  <h2>Output, {data.imagecols} columns separated by char {data.tx_myextension_separator}</h2>
  <table class="table table-bordered">
    <f:for each="{myTable}" as="columns" iteration="i">
      <tr>
        <th scope="row">{i.cycle}</th>
        <f:for as="column" each="{columns}">
          <td>{column}</td>
        </f:for>
      <tr>
    </f:for>
  </table>
</html>
Copied!
Output

Using maximumColumns limits the amount of columns in the multi dimensional array. In this example, the field data of the last column will be stripped off. Therefore the output would be:

Dump of the variable myTable with 3 rows of 2 items each, and a table under the headline "Output, 2 columns separated by char ,", with the rows 1 to 3 and the columns "This is row 1 column 1" and "This is row 1 column 2" up to "This is row 3 column 2"