Attention
TYPO3 v9 has reached its end-of-life September 30th, 2021 and is not maintained by the community anymore. Looking for a stable version? Use the version switch on the top left.
You can order Extended Long Term Support (ELTS) here: TYPO3 ELTS.
stdWrap¶
When a data type is set to "type /stdWrap" it means that the value is parsed through the stdWrap function with the properties of the value as parameters.
Example¶
Example with the property "value" of the content object "TEXT":
10 = TEXT
10.value = some text
10.stdWrap.case = upper
Here the content of the object "10" is uppercased before it is returned.
Content-supplying properties of stdWrap¶
stdWrap contains properties which determine what is applied. The properties are listed below.
The properties are parsed in the listed order. The
properties data
, field
, current
, cObject
(in that order!) are special as they are used to import content
from variables or arrays.
If you want to study this further please refer to
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
,
where you will find the function stdWrap()
and the array $stdWrapOrder
,
which represents the exact order of execution.
Note that the stdWrap
property "orderedStdWrap" allows you to execute
multiple stdWrap
functions in a freely selectable order.
The above example could be rewritten to this:
10 = TEXT
10.value = some text
10.stdWrap.case = upper
10.stdWrap.field = header
Now the line 10.value = some text
is obsolete, because the whole
value is "imported" from the field called "header" from the
$cObj->data-array
.
Getting data¶
setContentToCurrent¶
addPageCacheTags¶
- Property
addPageCacheTags
- Data type
- Description
Comma-separated list of cache tags, which should be added to the page cache.
- Example
addPageCacheTags = pagetag1,pagetag2,pagetag3
This will add the tags "pagetag1", "pagetag2" and "pagetag3" to the according cached pages in cache_pages.
Pages, which have been cached with a tag, can be deleted from cache again with the TSconfig option TCEMAIN.clearCacheCmd.
Note
If you instead want to store rendered content into the caching framework, see the stdWrap feature cache.
setCurrent¶
lang¶
- Property
lang
- Data type
Array of language keys / stdWrap
- Description
This is used to define optional language specific values.
If the global language key set by the ->config property .language is found in this array, then this value is used instead of the default input value to stdWrap.
- Example
config.language = de page.10 = TEXT page.10.value = I am a Berliner! page.10.stdWrap.lang.de = Ich bin ein Berliner!
Output will be "Ich bin..." instead of "I am..."
field¶
- Property
field
- Data type
Field name / stdWrap
- Description
Sets the content to the value of the according field (which comes from
$cObj->data[*field*]
).Note:
$cObj->data
changes depending on the context. See the description for the data type "getText"/field!- Example
.field = title
This sets the content to the value of the field "title".
You can also check multiple field names, if you divide them by "//".
- Example
.field = nav_title // title
Here the content from the field nav_title will be returned unless it is a blank string. If a blank string, the value of the title field is returned.
current¶
numRows¶
preUserFunc¶
- Property
preUserFunc
- Data type
- Description
Calls the provided PHP function. If you specify the name with a '->' in it, then it is interpreted as a call to a method in a class.
Two parameters are sent to the PHP function: As first parameter a content variable, which contains the current content. This is the value to be processed. As second parameter any sub-properties of preUserFunc are provided to the function.
See postUserFunc.
Override and conditions¶
override¶
preIfEmptyListNum¶
ifNull¶
- Property
ifNull
- Data type
- Description
If the content is null (
NULL
type in PHP), the content is overridden with the value defined here.- Example
page.10 = COA_INT page.10 { 10 = TEXT 10 { stdWrap.field = description stdWrap.ifNull = No description defined. } }
This example shows the content of the field description or, if that field contains the value
NULL
, the text "No description defined.".
ifEmpty¶
ifBlank¶
listNum¶
- Property
listNum
- Data type
- Description
Explodes the content with "," (comma) and the content is set to the item[value].
- Special keyword:
last
Is set to the last element of the array!
- Special keyword:
rand
Returns a random item out of a list.
- .splitChar (string):
Defines the string used to explode the value. If splitChar is an integer, the character with that number is used (e.g. "10" to split lines...).
Default: "," (comma)
- .stdWrap (stdWrap properties):
stdWrap properties of the listNum...
- Special keyword:
- Examples
We have a value of "item 1, item 2, item 3, item 4":
This would return "item 3":
.listNum = last – 1
That way the subtitle field to be displayed is chosen randomly upon every reload:
page.5 = COA_INT page.5 { 10 = TEXT 10 { stdWrap.field = subtitle stdWrap.listNum = rand } }
trim¶
strPad¶
- Property
strPad
- Data type
- Description
Pads the current content to a certain length. You can define the padding characters and the side(s), on which the padding should be added.
required¶
- Property
required
- Data type
- Description
This flag requires the content to be set to some value after any content-import and treatment that might have happened until now (data, field, current, listNum, trim). Zero is not regarded as empty! Use "if" instead!
If the content is empty, "" is returned immediately.
if¶
- Property
if
- Data type
- Description
If the if-object returns false, stdWrap returns "" immediately.
Parsing data¶
csConv¶
parseFunc¶
- Property
parseFunc
- Data type
- Description
Processing instructions for the content.
Note: If you enter a string as value, this will be taken as a reference to an object path globally in the TypoScript object tree. This will be the basis configuration for parseFunc merged with any properties you add here. It works exactly like references does for content elements.
- Example
parseFunc = < lib.parseFunc_RTE parseFunc.tags.myTag = TEXT parseFunc.tags.myTag.value = This will be inserted when <myTag> is found!
HTMLparser¶
- Property
HTMLparser
- Data type
boolean / HTMLparser / stdWrap
- Description
This object allows you to parse the HTML-content and perform all kinds of advanced filtering on the content.
Value must be set and properties are those of HTMLparser.
(See Rich Text Editors (RTE) for more information about RTE transformations)
replacement¶
- Property
replacement
- Data type
- Description
Performs an ordered search/replace on the current content with the possibility of using PCRE regular expressions. An array with numeric indices defines the order of actions and thus allows multiple replacements at once.
prioriCalc¶
- Property
prioriCalc
- Data type
- Description
Calculation of the value using operators -+*/%^ plus respects priority to + and - operators and parenthesis levels ().
. (period) is decimal delimiter.
Returns a doublevalue.
If
prioriCalc
is set to "intval" an integer is returned.There is no error checking and division by zero or other invalid values may generate strange results. Also you should use a proper syntax because future modifications to the function used may allow for more operators and features.
- Examples
100%7 = 2 -5*-4 = 20 +6^2 = 36 6 ^(1+1) = 36 -5*-4+6^2-100%7 = 54 -5 * (-4+6) ^ 2 - 100%7 = 98 -5 * ((-4+6) ^ 2) - 100%7 = -22
char¶
- Property
char
- Data type
- Description
Content is set to
chr(*value*)
. This returns a one-character string containing the character specified by ascii code. Reliable results will be obtained only for character codes in the integer range 0 - 127. See the PHP manual:$content = chr((int)$conf['char']);
intval¶
hash¶
- Property
hash
- Data type
- Description
Returns a hashed value of the current content. Set to one of the algorithms which are available in PHP. For a list of supported algorithms see https://www.php.net/manual/en/function.hash-algos.php.
- Example
page.10 = TEXT page.10 { value = test@example.org stdWrap.hash = md5 stdWrap.wrap = <img src="https://www.gravatar.com/avatar/|" /> }
round¶
numberFormat¶
- Property
numberFormat
- Data type
- Description
Format a float value to any number format you need (e.g. useful for prices).
date¶
- Property
date
- Data type
- Description
The content should be data-type "UNIX-time". Returns the content formatted as a date. See the PHP manual (datetime.format) for the format codes.
$content = date($conf['date'], $content);
Properties:
.GMT: If set, the PHP function gmdate() will be used instead of date().
- Example
Render in human readable form:
page.10 = TEXT page.10.value { # format like 2017-05-31 09:08 field = tstamp date = Y-m-d H:i }
strftime¶
- Property
strftime
- Data type
- Description
Very similar to "date", but using a different format. See the PHP manual (strftime) for the format codes.
This formatting is useful if the locale is set in advance in the CONFIG object. See there.
Properties:
- .charset
Can be set to the charset of the output string if you need to convert it to UTF-8. Default is to take the intelligently guessed charset from
TYPO3\CMS\Core\Charset\CharsetConverter
.- .GMT
If set, the PHP function gmstrftime() will be used instead of strftime().
strtotime¶
- Property
strtotime
- Data type
- Description
Allows conversion of formatted dates to timestamp, e.g. to perform date calculations.
Possible values are
1
or any time string valid as first argument of the PHPstrtotime()
function.- Example
date_as_timestamp = TEXT date_as_timestamp { value = 2015-04-15 strtotime = 1 }
- Example
next_weekday = TEXT next_weekday { data = GP:selected_date strtotime = + 2 weekdays strftime = %Y-%m-%d }
age¶
- Property
age
- Data type
- Description
If enabled with a "1" (number, integer) the content is seen as a date (UNIX-time) and the difference from present time and the content-time is returned as one of these eight variations:
"xx min" or "xx hrs" or "xx days" or "xx yrs" or "xx min" or "xx hour" or "xx day" or "year"
The limits between which layout is used are 60 minutes, 24 hours and 365 days.
If you set this property with a non-integer, it is used to format the eight units. The first four values are the plural values and the last four are singular. This is the default string:
" min| hrs| days| yrs| min| hour| day| year"
Set another string if you want to change the units. You may include the "-signs. They are removed anyway, but they make sure that a space which you might want between the number and the unit stays.
- Example
lib.ageFormat = TEXT lib.ageFormat.stdWrap.data = page:tstamp lib.ageFormat.stdWrap.age = " Minuten | Stunden | Tage | Jahre | Minute | Stunde | Tag | Jahr"
bytes¶
- Property
bytes
- Data type
- Default
iec, 1024
- Description
This is for number values. When the 'bytes' property is added and set to 'true' then a number will be formatted in 'bytes' style with two decimals like '1.53 KiB' or '1.00 MiB'. Learn about common notations at Wikipedia "Kibibyte". IEC naming with base 1024 is the default. Use sub-properties for customisation.
- .labels = iec
This is the default. IEC labels and base 1024 are used. Built in IEC labels are
" | Ki| Mi| Gi| Ti| Pi| Ei| Zi| Yi"
. You need to append a final string like 'B' or '-Bytes' yourself.- .labels = si
In this case SI labels and base 1000 are used. Built in IEC labels are
" | k| M| G| T| P| E| Z| Y"
. You need to append a final string like 'B' yourself.- .labels = "..."
Custom values can be defined as well like with
.labels = " Byte| Kilobyte| Megabyte| Gigabyte"
. Use a vertical bar to separate the labels. Enclose the whole string in double quotes.- .base = 1000
Only with custom labels you can choose to set a base of1000. All other values, including the default, mean base 1024.
Attention
If the value isn't a number the internal PHP function may issue a warning which - depending on you error handling settings - can interrupt execution. Example:
value = abc bytes = 1
will show
0
but may raise a warning or an exception.
Examples
Output value 1000 without special formatting. Shows 1000
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
}
Format value 1000 in IEC style with base=1024. Shows 0.98 Ki
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
}
Format value 1000 in IEC style with base=1024 and 'B' supplied by us.
Shows 0.98 KiB
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
noTrimWrap = ||B|
}
Format value 1000 in SI style with base=1000. Shows 1.00 k
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
bytes.labels = si
}
Format value 1000 in SI style with base=1000 and 'b' supplied by us.
Shows 1.00 kb
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
bytes.labels = si
noTrimWrap = ||b|
}
Format value 1000 with custom label and base=1000. Shows
1.00 x 1000 Bytes
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
bytes.labels = " x 1 Byte| x 1000 Bytes"
bytes.base = 1000
}
Format value 1000 with custom label and base=1000. Shows
1.00 kilobyte (kB)
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
bytes.labels = " byte (B)| kilobyte (kB)| megabyte (MB)| gigabyte (GB)| terabyte (TB)| petabyte (PB)| exabyte (EB)| zettabyte (ZB)| yottabyte YB"
bytes.base = 1000
}
Format value 1000 with custom label and base=1024. Shows
0.98 kibibyte (KiB)
:
page = PAGE
page.10 = TEXT
page.10 {
value = 1000
bytes = 1
bytes.labels = " byte (B)| kibibyte (KiB)| mebibyte (MiB)| gibibyte (GiB)| tebibyte (TiB)| pepibyte (PiB)| exbibyte (EiB)| zebibyte (ZiB)| yobibyte YiB"
bytes.base = 1024
}
substring¶
cropHTML¶
- Property
cropHTML
- Data type
- Description
Crops the content to a certain length. In contrast to
stdWrap.crop
it respects HTML tags. It does not crop inside tags and closes open tags. Entities (like ">") are counted as one char. SeestdWrap.crop
below for a syntax description and examples.Note that
stdWrap.crop
should not be used ifstdWrap.cropHTML
is already used.
crop¶
- Property
crop
- Data type
- Description
Crops the content to a certain length.
You can define up to three parameters, of which the third one is optional. The syntax is: [numbers of characters to keep] | [ellipsis] | [keep whole words]
numbers of characters to keep (integer): Define the number of characters you want to keep. For positive numbers, the first characters from the beginning of the string will be kept, for negative numbers the last characters from the end will be kept.
ellipsis (string): The signs to be added instead of the part, which was cropped of. If the number of characters was positive, the string will be prepended with the ellipsis, if it was negative, the string will be appended with the ellipsis.
keep whole words (boolean): If set to 0 (default), the string is always cropped directly after the defined number of characters. If set to 1, only complete words are kept. Then a word, which would normally be cut in the middle, is removed completely.
- Examples
20 | ...
=> max 20 characters. If more, the value will be truncated to the first 20 characters and prepended with "..."-20 | ...
=> max 20 characters. If more, the value will be truncated to the last 20 characters and appended with "..."20 | ... | 1
=> max 20 characters. If more, the value will be truncated to the first 20 characters and prepended with "...". If the division is in the middle of a word, the remains of that word is removed.Uses "UTF-8" for the operation.
rawUrlEncode¶
- Property
rawUrlEncode
- Data type
- Description
Passes the content through the PHP function rawurlencode().
htmlSpecialChars¶
- Property
htmlSpecialChars
- Data type
- Description
Passes the content through the PHP function htmlspecialchars().
Additional property
preserveEntities
will preserve entities so only non-entity characters are affected.
encodeForJavaScriptValue¶
- Property
encodeForJavaScriptValue
- Data type
- Description
Encodes content to be used safely inside strings in JavaScript. Characters, which can cause problems inside JavaScript strings, are replaced with their encoded equivalents. The resulting string is already quoted with single quotes.
Passes the content through the core function
\TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue
.- Example
10 = TEXT 10.stdWrap { data = GP:sWord encodeForJavaScriptValue = 1 wrap = setSearchWord(|); }
doubleBrTag¶
br¶
brTag¶
encapsLines¶
- Property
encapsLines
- Data type
- Description
Lets you split the content by
chr(10)
and process each line independently. Used to format content made with the RTE.
keywords¶
innerWrap2¶
addParams¶
- Property
addParams
- Data type
- Description
Lets you add tag parameters to the content if the content is a tag!
Deprecated since version 9.5: Use Fluid styled content, or dataProcessing instead.
filelink¶
Deprecated since version 9.5: Use Fluid styled content, or dataProcessing instead.
wrapAlign¶
typolink¶
wrap¶
noTrimWrap¶
- Property
noTrimWrap
- Data type
"special" wrap /+.splitChar / stdWrap
- Description
This wraps the content without trimming the values. That means that surrounding whitespaces stay included! Note that this kind of wrap does not only need a special character in the middle, but that it also needs the same special character to begin and end the wrap (default for all three is "|").
Additional property:
splitChar
Can be set to define an alternative special character.
stdWrap
is available. Default is "|" - the vertical line. This sub-property is useful in cases when the default special character would be recognized by optionSplit (which takes precedence overnoTrimWrap
).- Example
noTrimWrap = | val1 | val2 |
In this example the content with the values val1 and val2 will be wrapped; including the whitespaces.
- Example
noTrimWrap = ^ val1 ^ val2 ^ || ^ val3 ^ val4 ^ noTrimWrap.splitChar = ^
optionSplit will use the "||" to have two subparts in the first part. In each subpart
noTrimWrap
will then use the "^" as special character.
wrap2¶
dataWrap¶
- Property
dataWrap
- Data type
mixed / stdWrap
- Description
The content is parsed for pairs of curly braces. The content of the curly braces is of the type getText and is substituted with the result of getText.
- Example
<div id="{tsfe : id}"> | </div>
This will produce a
<div>
tag around the content with an id attribute that contains the number of the current page.
wrap3¶
orderedStdWrap¶
- Property
orderedStdWrap
- Data type
Array of numeric keys with / stdWrap each
- Description
Execute multiple
stdWrap
statements in a freely selectable order. The order is determined by the numeric order of the keys. This allows to use multiple stdWrap statements without having to remember the rather complex sorting order in which thestdWrap
functions are executed.- Example
10 = TEXT 10.value = a 10.stdWrap.orderedStdWrap { 30.wrap = |. 10.wrap = is | working 10.innerWrap = | 20.wrap = This|solution 20.stdWrap.wrap = | }
In this example orderedStdWrap is executed on the value "a".
10.innerWrap
is executed first, followed by10.wrap
. Then the next key is processed which is 20. Afterwards30.wrap
is executed on what already was created.This results in "This is a working solution."
insertData¶
postUserFunc¶
- Property
postUserFunc
- Data type
- Description
Calls the provided PHP function. If you specify the name with a '->' in it, then it is interpreted as a call to a method in a class.
Two parameters are sent to the PHP function: As first parameter a content variable, which contains the current content. This is the value to be processed. As second parameter any sub-properties of
postUserFunc
are provided to the function.The description of the
cObject
USER contains some more in-depth information.- Example
You can paste this example directly into a new template record:
page = PAGE page.typeNum = 0 page.10 = TEXT page.10 { value = Hello World! stdWrap.postUserFunc = Your\NameSpace\YourClass->reverseString stdWrap.postUserFunc.uppercase = 1 } page.20 = TEXT page.20 { value = Hello World! stdWrap.postUserFunc = Your\NameSpace\YourClass->reverseString stdWrap.postUserFunc.uppercase = 1 stdWrap.postUserFunc.typolink = 11 }
Your methods will get the parameters
$content
and$conf
(in that order) and need to return a string.namespace Your\NameSpace; /** * Example of a method in a PHP class to be called from TypoScript * */ class YourClass { /** * Reference to the parent (calling) cObject set from TypoScript */ public $cObj; /** * Custom method for data processing. Also demonstrates how this gives us the ability to use methods in the parent object. * * @param string When custom methods are used for data processing (like in stdWrap functions), the $content variable will hold the value to be processed. When methods are meant to just return some generated content (like in USER and USER_INT objects), this variable is empty. * @param array TypoScript properties passed to this method. * @return string The input string reversed. If the TypoScript property "uppercase" was set, it will also be in uppercase. May also be linked. */ public function reverseString($content, $conf) { $content = strrev($content); if (isset($conf['uppercase']) && $conf['uppercase'] === '1') { // Use the method caseshift() from ContentObjectRenderer.php. $content = $this->cObj->caseshift($content, 'upper'); } if (isset($conf['typolink'])) { // Use the method getTypoLink() from ContentObjectRenderer.php. $content = $this->cObj->getTypoLink($content, $conf['typolink']); } return $content; } }
For
page.10
the content, which is present whenpostUserFunc
is executed, will be given to the PHP functionreverseString()
. The result will be "!DLROW OLLEH".The content of
page.20
will be processed by the functionreverseString()
from the classYourClass
. This also returns the text "!DLROW OLLEH", but wrapped into a link to the page with the ID 11. The result will be<a href="index.php?id=11">!DLROW OLLEH</a>
.Note how in the second example
$cObj
, the reference to the callingcObject
, is utilised to use functions fromContentObjectRenderer.php
!
postUserFuncInt¶
- Property
postUserFuncInt
- Data type
- Description
Calls the provided PHP function. If you specify the name with a '->' in it, then it is interpreted as a call to a method in a class.
Two parameters are sent to the PHP function: As first parameter a content variable, which contains the current content. This is the value to be processed. As second parameter any sub-properties of postUserFuncInt are provided to the function.
The result will be rendered non-cached, outside the main page-rendering. Please see the description of the
cObject
USER_INT.Supplied by Jens Ellerbrock
prefixComment¶
- Property
prefixComment
- Data type
- Description
Prefixes content with an HTML comment with the second part of input string (divided by "|") where first part is an integer telling how many trailing tabs to put before the comment on a new line.
The content is parsed through insertData.
- Example
prefixComment = 2 | CONTENT ELEMENT, uid:{field:uid}/{field:CType}
Will indent the comment with 1 tab (and the next line with 2+1 tabs)
editIcons¶
- Property
editIcons
- Data type
- Description
If not empty, then insert an icon linking to
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
with some parameters to build and backend user edit form for certain fields.The value of this property is a list of fields from a table to edit. It's assumed that the current record of the cObject is the record to be edited.
Syntax: optional table name : comma list of field names [list of pallette-field names separated by | ]
.beforeLastTag:
Possible values are 1, 0 and -1. If set (1), the icon will be inserted before the last HTML tag in the content. If -1, the icon will be prepended to the content. If zero (0), the icon is appended in the end of the content.
.styleAttribute:
String.Adds a style-attribute to the icon image with this value. For instance you can set "position:absolute" if you want a non-destructive insertion of the icon. Notice: For general styling all edit icons has the class "frontEndEditIcons" which can be addressed from the stylesheet of the site.
.iconTitle:
String.The title attribute of the image tag.
.iconImg:
HTML.Alternative HTML code instead of the default icon shown. Can be used to set another icon for editing (for instance a red dot or otherwise... :-)
- Example
This will insert an edit icon which links to a form where the header and bodytext fields are displayed and made available for editing (provided the user has access!).
editIcons = tt_content : header, bodytext
Or this line that puts the header_align and date field into a "palette" which means they are displayed on a single line below the header field. This saves some space.
editIcons = header[header_align|date], bodytext