Base variants

In site handling, "base variants" represent different bases for a website depending on a specified condition. For example, a "live" base URL might be https://example.org/, but on a local machine it is https://example.localhost/ as a domain - that is when variants are used.

Base variants exist for languages, too. Currently, these can only be defined through the respective *.yaml file, there is no backend user interface available yet.

Variants consist of two parts:

  • a base to use for this variant

  • a condition that decides when this variant shall be active

Conditions are based on Symfony expression language and allow flexible conditions, for example:

applicationContext == "Development"

would define a base variant to use in "Development" context.

Note

Environment variables can be used in the base via %env(...)%. condition needs getenv(...) instead.

../../_images/SiteHandlingBaseVariants-1.png

A configured base variant for development context.

Hint

For those coming from earlier TYPO3 versions: With site handling, there is no need for sys_domain records anymore!

See also

  • Read Application context for more information on how to set the application context.

  • Read YAML API for more information on YAML parsing.

The following variables and functions are available in addition to the default Symfony functionality:

Example

config/sites/<some_site>/config.yaml | typo3conf/sites/<some_site>/config.yaml
rootPageId: 1
base: 'https://example.org/'
baseVariants:
  - base: 'https://example.localhost/'
    condition: 'applicationContext == "Development"'
  - base: 'https://staging.example.org/'
    condition: 'applicationContext == "Production/Sydney"'
  - base: 'https://testing.example.org/'
    condition: 'applicationContext == "Testing/Paris"'
  - base: '%env("TYPO3_BASE")%'
    condition: 'getenv("TYPO3_BASE")'
languages:
  - title: English
    enabled: true
    locale: en_US.UTF-8
    base: /
    websiteTitle: ''
    navigationTitle: English
    flag: gb
    languageId: 0
  - title: Deutsch
    enabled: true
    locale: de_DE.UTF-8
    base: 'https://example.net/'
    baseVariants:
      - base: 'https://de.example.localhost/'
        condition: 'applicationContext == "Development"'
      - base: 'https://staging.example.net/'
        condition: 'applicationContext == "Production/Sydney"'
      - base: 'https://testing.example.net/'
        condition: 'applicationContext == "Testing/Paris"'
    websiteTitle: ''
    navigationTitle: Deutsch
    fallbackType: strict
    flag: de
    languageId: 1

Properties

typo3.version
Type

string

Example

12.4.0

The current TYPO3 version.

typo3.branch
Type

string

Example

12.4

The current TYPO3 branch.

typo3.devIpMask
Type

string

Example

203.0.113.*

The configured devIpMask taken from $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'].

applicationContext
Type

string

Example

Development

The current application context.

Functions

All functions from EXT:core/Classes/ExpressionLanguage/FunctionsProvider/DefaultFunctionsProvider.php are available:

ip
Type

string

Example

ip("203.0.113.*")

Match an IP address, value or regex, wildcards possible. Special value: devIp for matching devIpMask.

compatVersion
Type

string

Example

compatVersion("12.4.0"), compatVersion("11.5")

Match a TYPO3 version.

like
Type

string

Example

like("foobarbaz", "*bar*")

A comparison function to compare two strings. The first parameter is the "haystack", the second the "needle". Wildcards are allowed.

getenv
Type

string

Example

getenv("TYPO3_BASE_URL")

A wrapper for PHPs getenv() function. It allows accessing environment variables.

date
Type

string

Example

checking the current month: date("j") == 7

Get the current date in given format.

feature
Type

string

Example

feature("redirects.hitCount")

Check whether a feature ("feature toggle") is enabled in TYPO3.

traverse
Type

array|string

Example

traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0

This function has two parameters:

  • first parameter is the array to traverse

  • second parameter is the path to traverse