Attention

TYPO3 v10 has reached end-of-life as of April 30th 2023 and is no longer being maintained. Use the version switcher on the top left of this page to select documentation for a supported version of TYPO3.

Need more time before upgrading? You can purchase Extended Long Term Support (ELTS) for TYPO3 v10 here: TYPO3 ELTS.

CONTENT

Note

  • CONTENT is an object type (= complex data type).

  • It is a specific cObject data type.

An object with the content type CONTENT is designed to generate content by allowing to finely select records and have them rendered.

What records are visible is controlled by start and end fields and more standard fields automatically. The internal value SYS_LASTCHANGED is raised to the maximum timestamp value of the respective records.

See also

The cObject RECORDS in contrast is for displaying lists of records from a variety of tables without fine graining.

Comprehensive example

See PHP class \TYPO3\CMS\Frontend\ContentObject\ContentContentObject for details on code level.

Preamble:

# Note: TypoScript (TS) is just another way to define an array of settings which
#       is later on INTERPRETED by TYPO3. TypoScript can be written in ANY order
#       as long as it leads to the same array. Actual execution order is TOTALLY
#       INDEPENDENT of TypoScript code order.
#
#       The order of TS in this example however tries to reflect execution order.
#       The denoted steps are taking place in that order at execution time.

Condensed form:

1 = CONTENT
1 {
   if {
   }
   table = tt_content
   select {
      pidInList = this
      where = colPos = 1
      orderBy = sorting
   }
   renderObj = < tt_content
   slide = 0
   slide {
      collect = 0
      collectReverse = 0
      collectFuzzy = 0
   }
   wrap =
   stdWrap =
}

Expanded form:

1 = CONTENT

// STEP 1: do nothing if 'if' evaluates to false

1.if {
   # ifclause =
}
// STEP 2: define parameters

1.table = tt_content           # default='' #stdWrap

1.select {
   pidInList = this
   where = colPos = 1
   orderBy = sorting
}

# renderObj = <TABLEVALUE      # default!
1.renderObj =

# slide = 0                    # default! #stdWrap
1.slide = -1

# slideCollect = 0             # default! #stdWrap
1.slide.collect =

# slideCollectReverse = false  # default! #stdWrap
1.slide.collectReverse =

# slideCollectFuzzy = false    # default! #stdWrap
1.slide.collectFuzzy =
// STEP 3: find all records

// STEP 4: apply the renderObj to each record and collect
//         the results as string 'totalResult'

// STEP 5: Apply wrap to the 'totalResult'
1.wrap = |                     # default!

// STEP 6: Apply stdWrap to the 'totalResult'
1.stdWrap =                    # default! #stdWrap

// STEP 6: Return 'totalResult'

See also: if, select, wrap, stdWrap, cObject

select

Property

select

Data type

select

Description

The SQL-statement, a SELECT query, is set here, including automatic visibility control.

table

Property

table

Data type

table name /stdWrap

Description

The table, the content should come from. Any table can be used; a check for a table prefix is not done.

In standard configuration this will be tt_content.

renderObj

Property

renderObj

Data type

cObject

Default

< [table name]

Description

The cObject used for rendering the records resulting from the query in .select.

If renderObj is not set explicitly, then < [table name] is used. So in this case the configuration of the according table is being copied. See the notes on the example below.

slide

Property

slide

Data type

integer /stdWrap

Description

If set and no content element is found by the select command, the rootLine will be traversed back until some content is found.

Possible values are -1 (slide back up to the siteroot), 1 (only the current level) and 2 (up from one level back).

Use -1 in combination with collect.

slide.collect

(integer /stdWrap) If set, all content elements found on the current and parent pages will be collected. Otherwise, the sliding would stop after the first hit. Set this value to the amount of levels to collect on, or use -1 to collect up to the siteroot.

slide.collectFuzzy

(boolean /stdWrap) Only useful in collect mode. If no content elements have been found for the specified depth in collect mode, traverse further until at least one match has occurred.

slide.collectReverse

(boolean /stdWrap) Reverse order of elements in collect mode. If set, elements of the current page will be at the bottom.

Note: The sliding will stop when reaching a folder. See $cObj->checkPid_badDoktypeList.

wrap

Property

wrap

Data type

wrap /stdWrap

Description

Wrap the whole content.

stdWrap

Property

stdWrap

Data type

stdWrap

Description

Apply stdWrap functionality.

cache

Property

cache

Data type

cache

Description

Stores the rendered content into the caching framework and reads it from there. This allows you to reuse this content on different pages without prior rendering. The presence of cache.key will trigger this feature. See cache function description for details.

CONTENT object example 1

Here is an example of the CONTENT object:

1 = CONTENT
1.table = tt_content
1.select {
   pidInList = this
   orderBy = sorting
}

Since in the above example .renderObj is not set explicitly, TYPO3 will automatically set 1.renderObj < tt_content, so that renderObj will reference the TypoScript configuration of tt_content. The according TypoScript configuration will be copied to renderObj.

CONTENT object example 2

Here is an example of record-rendering objects:

page = PAGE
page.typeNum = 0

# The CONTENT object executes a database query and loads the content.
page.10 = CONTENT
page.10.table = tt_content
page.10.select {

   # "sorting" is a column from the tt_content table and
   # keeps track of the sorting order, which was specified in
   # the backend.
   orderBy = sorting

   # Only select content from column "0" (the column called
   # "normal") and quote the database identifier (column name)
   # "colPos" (indicated by wrapping with {#})
   where = {#colPos}=0
}

# For every result line from the database query (that means for every content
# element) the renderObj is executed and the internal data array is filled
# with the content. This ensures that we can call the .field property and we
# get the according value.
page.10.renderObj = COA
page.10.renderObj {

   10 = TEXT

   # The field tt_content.header normally holds the headline.
   10.stdWrap.field = header

   10.stdWrap.wrap = <h1>|</h1>

   20 = TEXT

   # The field tt_content.bodytext holds the content text.
   20.stdWrap.field = bodytext

   20.stdWrap.wrap = <p>|</p>
}