3.4.2 TypoScript Variables
TypoScript is the common configuration language used within the TYPO3 core itself. It comes with a few conventions to be used by every extension author.
As using FluidTYPO3 for templating means you are essentially creating a new extension which relies on the extbase conventions, you have to stick to the pattern and can directly benefit from it.
Problem
I want to assign a variable in TypoScript and use it in my template.
Solution
In traditional TYPO3 projects, you would have accessed a value through TypoScript constants and would have used this in a wrap. With FluidTYPO3 templating, we've got you covered by using the extbase conventions for TypoScript cascading values. The list below shows how a value is processed:
- You set a TypoScript constant
plugin.tx_myproject.settings.baseclass = green
inConfiguration/TypoScript/constants.txt
. Doing this upfront gives you the power of the constants editor in the template module and allows for easy changing of the value. - You import this constant into TypoScript setup:
plugin.tx_myproject.settings.baseclass = {$plugin.tx_myproject.settings.baseclass}
inConfiguration/TypoScript/setup.txt
- You could override the value at any level in the page tree via constants editor
- You could override the value in any flexform you create by simply naming the field
settings.baseclass
- The value is available in your PageController actions for further reading (changes in the controller won't propagate to the view)
$this->settings
- The value finally pops into your template and can be accessed via
{settings.baseclass}
Example
TypoScript constants
plugin.tx_myproject.settings.baseclass = green
TypoScript setup
plugin.tx_myproject.settings.baseclass = {$plugin.tx_myproject.settings.baseclass}
fluidcontent / fluidpages / generally flux form
<flux:field.input name="settings.baseclass"/>
Controller Context (PageController, ContentController, AbstractFluxController)
function footemplateAction(){
// available here for *reading*
$this->settings
}
Template rendering
<div class="{settings.baseclass}">
<img src="coolcatpictures.com/image.png />
</div>
Easy huh?
Tips & Tricks
The {settings} variable is available in every subview of the rendered template. That means you don't have to pass something like arguments="{settings: settings}"
to your partial rendering.