diff --git a/Documentation/ApiOverview/SymfonyExpressionLanguage/Index.rst b/Documentation/ApiOverview/SymfonyExpressionLanguage/Index.rst index fdd6425cb3..82acb61fe8 100644 --- a/Documentation/ApiOverview/SymfonyExpressionLanguage/Index.rst +++ b/Documentation/ApiOverview/SymfonyExpressionLanguage/Index.rst @@ -7,7 +7,7 @@ Symfony expression language =========================== Symfony expression language (SEL) is used by TYPO3 in a couple of places. The most -well-known ones are :ref:`TypoScript conditions `. +well-known ones are :ref:`TypoScript conditions `. The :ref:`TypoScript ` and :ref:`TSconfig ` references list available variables and functions of these contexts. But the TYPO3 Core API allows enriching expressions with additional functionality, which is what this chapter is about. diff --git a/Documentation/Configuration/ConfigurationOverview.rst b/Documentation/Configuration/ConfigurationOverview.rst index 4d27e5e6dd..d6a927dc96 100644 --- a/Documentation/Configuration/ConfigurationOverview.rst +++ b/Documentation/Configuration/ConfigurationOverview.rst @@ -89,7 +89,7 @@ Configuration languages These are the main languages TYPO3 uses for configuration: -* :ref:`TypoScript syntax ` is used for TypoScript +* :ref:`TypoScript syntax ` is used for TypoScript and TSconfig. * :ref:`TypoScript constant syntax ` is used for Extension Configuration and for defining constants for TypoScript. @@ -129,7 +129,7 @@ line of PHP. `TSconfig` can be set on a page (page TSconfig), as well as a user basis. TSconfig uses the same syntax as Frontend TypoScript, the syntax is outlined in detail -in :ref:`typoscript-syntax-start`. Other than that, TSconfig and Frontend TypoScript +in :ref:`t3tsref:typoscript-syntax`. Other than that, TSconfig and Frontend TypoScript don't have much more in common - they consist of entirely different properties. A full reference of properties as well as an introduction to explain details configuration usage, API and @@ -144,7 +144,7 @@ easy as possible for backend users. TypoScript - or more precisely "TypoScript Templating" - is used in TYPO3 to steer the frontend rendering (the actual website) of a TYPO3 instance. It is based on the -TypoScript syntax which is outlined in detail in :ref:`typoscript-syntax-start`. +TypoScript syntax which is outlined in detail in :ref:`t3tsref:typoscript-syntax`. TypoScript Templating is very powerful and has been the backbone of frontend rendering ever since. However, with the rise of the Fluid templating engine, many parts of Frontend TypoScript are much less diff --git a/Documentation/Configuration/Glossary.rst b/Documentation/Configuration/Glossary.rst index 57643ed4d5..3dc6834ee1 100644 --- a/Documentation/Configuration/Glossary.rst +++ b/Documentation/Configuration/Glossary.rst @@ -111,7 +111,7 @@ check whether the syntax is correct. These are the main languages TYPO3 uses for configuration: -* :ref:`TypoScript syntax ` is used for TypoScript +* :ref:`TypoScript syntax ` is used for TypoScript and TSconfig. * :ref:`TypoScript constant syntax ` is used for Extension Configuration and for defining constants for TypoScript. diff --git a/Documentation/Configuration/TypoScript/Index.rst b/Documentation/Configuration/TypoScript/Index.rst index 4ab06a30be..0c582ec53f 100644 --- a/Documentation/Configuration/TypoScript/Index.rst +++ b/Documentation/Configuration/TypoScript/Index.rst @@ -1,9 +1,5 @@ .. include:: /Includes.rst.txt .. index:: TypoScript; Syntax -.. _typoscript-syntax-start: -.. _typoscript-syntax-next-steps: -.. _typoscript-syntax-about: -.. _typoscript-syntax-syntax: .. _typoscript: ========== diff --git a/Documentation/Configuration/TypoScript/Syntax/CodeBlocks/Index.rst b/Documentation/Configuration/TypoScript/Syntax/CodeBlocks/Index.rst deleted file mode 100644 index 4e46ac6bcc..0000000000 --- a/Documentation/Configuration/TypoScript/Syntax/CodeBlocks/Index.rst +++ /dev/null @@ -1,54 +0,0 @@ -.. include:: /Includes.rst.txt -.. index:: - TypoScript; Operator "{ }" - TypoScript; Code blocks -.. _typoscript-syntax-syntax-code-blocks: -.. _typoscript-syntax-syntax-curly-brackets: - -=========== -Code blocks -=========== - -Curly braces can be used to structure identifier paths in a more efficient way: -Without repeating upper parts of a path in each line. This allows nesting. - -Example without braces: - -.. include:: /CodeSnippets/TypoScriptSyntax/CodeBlock1.rst.txt - -This can be written as: - -.. include:: /CodeSnippets/TypoScriptSyntax/CodeBlock2.rst.txt - -Curly braces can be nested to further improve readability. This is also -the same as above: - -.. include:: /CodeSnippets/TypoScriptSyntax/CodeBlock3.rst.txt - -Some rules apply during parsing: - -- Everything on the same line after the opening :typoscript:`{` and closing - :typoscript:`}` brace is considered a comment, even if the comment markers - :typoscript:`#`, :typoscript:`//` and :typoscript:`/* ... */` are missing. - -- The closing brace :typoscript:`}` must be on a single line in order to close a block. - The following construct is invalid, the closing brace is interpreted as part of - the value, so the TypoScript and TSconfig backend modules will mumble with a - "missing closing brace" warning: - - .. include:: /CodeSnippets/TypoScriptSyntax/CodeBlockInvalidClosingBrace.rst.txt - -- Conditions can not be placed within blocks, they are always "global" level - and stop any brace nesting. The following construct is invalid, the TypoScript and - TSconfig backend modules will mumble with a "missing closing brace" warning: - - .. include:: /CodeSnippets/TypoScriptSyntax/CodeBlockInvalidCondition.rst.txt - -- Nesting is per-file / per-text-snippet: It does not "swap" into included files. This - was the case with the old TypoScript parser. It has been a nasty side-effect, leading - to hard to debug problems. File includes with :typoscript:`@import` and - :typoscript:`` and -the :ref:`backend TSconfig Reference `. These references -come with examples for single condition criteria as well. - -The TSconfig and TypoScript backend modules show lists of existing conditions -and allow simulating criteria verdicts to analyze their impact on the -resulting TypoScript tree. - -Condition criteria are based on -the `Symfony expression language `__. -The Core allows extending the Symfony expression language with own variables and -functions, see :ref:`symfony expression language API ` -for more details. - - -Basic example -============= - -.. include:: /CodeSnippets/TypoScriptSyntax/Conditions1.rst.txt - - -.. _typoscript-syntax-conditions-syntax: - -Syntax and rules -================ - -The general syntax is like this: - -.. include:: /CodeSnippets/TypoScriptSyntax/Conditions2.rst.txt - -These general rules apply: - -* Conditions are encapsulated in :typoscript:`[` and :typoscript:`]` - -* :typoscript:`[ELSE]` negates a previous condition criteria and can contain - a new body until :typoscript:`[END]` or :typoscript:`[GLOBAL]`. :typoscript:`[ELSE]` - is considered if the condition criteria did *not* evaluate to true. - -* :typoscript:`[END]` and :typoscript:`[GLOBAL]` stop a given condition scope. - This is similar to a closing curly brace :code:`}` in programming languages like PHP. - -* Multiple condition criteria can be combined using :typoscript:`or` or :typoscript:`||`, - as well as :typoscript:`and` or :typoscript:`&&` - -* Single criteria can be negated using :typoscript:`!` - - .. versionchanged:: 12.0 - - :typoscript:`[END]` and :typoscript:`[GLOBAL]` behave exactly the same. Both - are kept for historical reasons (for now). - -* Conditions can use constants. They are available in frontend TypoScript "setup" and - in TSconfig from "site settings". A simple example if this constant - :typoscript:`myPageUid = 42` is set: - - .. code-block:: typoscript - - [traverse(page, "uid") == {$myPageUid}] - page.10.value = Page uid is 42 - [end] - -* Conditions can *not* be nested within code blocks. - - .. versionchanged:: 12.0 - - Conditions *can* be nested into each other, if they are located in - different snippets (files or records), see example below. They can *not* be nested - within the same code snippet. - -* A second condition that is *not* :typoscript:`[ELSE]`, :typoscript:`[END]` - or :typoscript:`[GLOBAL]` *stops* a previous condition and starts a new one. - This is the main reason conditions can *not* be nested within one text snippet. - -* .. versionchanged:: 12.0 - - :typoscript:`@import` and :typoscript:`` -for more details. - -The following rules apply: - -* Multiple files are imported in alphabetical order. - If a special loading order is desired it is common to prefix the filenames with - numbers that increase for files that shall be loaded later. - -* Recursion is allowed: Imported files can have :typoscript:`@import` statements. - -* The :typoscript:`@import` statement does not take a condition clause as the old - :typoscript:`` statement did. That kind of condition - should be considered a conceptual mistake. It should not be used. - -* .. versionchanged:: 12.0 - - It is allowed to put :typoscript:`@import` within a condition. This example imports - the additional file only if a frontend user is logged in: - - .. code-block:: typoscript - - [frontend.user.isLoggedIn] - @import './userIsLoggedIn.typoscript' - [END] - -* Both the old syntax :typoscript:`` and the new one :typoscript:`@import` - can be used at the same time. - -* Directory imports are not recursive, meaning that a directory import does - not automatically travel down its subdirectories. - -* Quoting the filename is necessary with the new syntax. Either double quotes - (") or single quotes (') can be used. - -* Wildcards :typoscript:`*` are only allowed on file level, not on directory level. - Only a single wildcard character is allowed. - -* Includes relative to the current file location are allowed using :typoscript:`./` - as prefix. - -* Includes must start with :typoscript:`EXT:` if not relative. Loading files - outside of extensions is not possible. - -* Directory traversal using :typoscript:`../` is not allowed. - -Some examples: - -.. code-block:: typoscript - - # Import a single file - @import 'EXT:my_extension/Configuration/TypoScript/randomfile.typoscript' - - # Import multiple files in a single directory, sorted by file name - @import 'EXT:my_extension/Configuration/TypoScript/*.typoscript' - - # It's possible to omit the file ending. For frontend TypoScript, ".typoscript" is - # appended automatically, backend TSconfig allows both ".typoscript" and ".tsconfig" - @import 'EXT:my_extension/Configuration/TypoScript/' - - # Import files starting with "foo", ending with ".typoscript" (frontend) - @import 'EXT:my_extension/Configuration/TypoScript/foo*' - - # Import files ending with ".setup.typoscript" - @import 'EXT:my_extension/Configuration/TypoScript/*.setup.typoscript' - - # Import "bar.typoscript" relative to current file - @import './bar.typoscript' - - # Import all ".setup.typoscript" files in sub directory relative to current file - @import './subDirectory/*.setup.typoscript' - - -.. index:: TypoScript; Includes by conditions -.. _typoscript-syntax-includes-conditions: -.. _typoscript-syntax-includes-best-practices: - - - -More details: - -* Keyword "FILE": - - A reference to a single file relative to :php:`\TYPO3\CMS\Core\Core\Environment::getPublicPath()`. - - Paths relative to the including file can be used, if the inclusion is called - from inside a file. These paths start with :file:`FILE:./`. This allows simple, nested - TypoScript templates that can be moved or copied without the need to adapt all includes. - - Files within extensions can be used using :file:`FILE:EXT:my_extension/path/to/file.typoscript`. - This should be the preferred usage, importing files not located within extensions is - likely to be deprecated with TYPO3 v13, along with the file ending :file:`.txt`. - -* Keyword "DIR": - - Can be used instead of :typoscript:`FILE` to include multiple files at once. - It includes all files from a directory relative to :php:`\TYPO3\CMS\Core\Core\Environment::getPublicPath()`, - including subdirectories. - - Files are included in alphabetical. Also files are included first, then directories. - - .. attention:: - :typoscript:` - -* Keyword "condition": - - Conditions are the same as was presented in the :ref:`condition chapter `. - The files or directories will be included only if the condition is met. Note this is obsolete - with TYPO3 v12 since :typoscript:` - - # Identical to: - [frontend.user.isLoggedIn] - - [END] - - # And identical to: - [frontend.user.isLoggedIn] - @import 'EXT:my_extension/Configuration/TypoScript/user.typoscript' - [END] diff --git a/Documentation/Configuration/TypoScript/Syntax/Identifiers/Index.rst b/Documentation/Configuration/TypoScript/Syntax/Identifiers/Index.rst deleted file mode 100644 index 765bac7d38..0000000000 --- a/Documentation/Configuration/TypoScript/Syntax/Identifiers/Index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. include:: /Includes.rst.txt -.. index:: - TypoScript; Identifier -.. _typoscript-syntax-basics: -.. _typoscript-syntax-syntax-object-path: - -=========== -Identifiers -=========== - -TypoScript is line based. Each line normally contains three parts: - -.. code-block:: text - - [Identifier] [Operator] [Value] - - -In this example we have the identifier :typoscript:`myIdentifier` with the sub identifier -:typoscript:`mySubIdentifier`, the assignment operator :typoscript:`=` and the value :typoscript:`myValue`. - -.. include:: /CodeSnippets/TypoScriptSyntax/Identifiers1.rst.txt - -The identifier path (in above example :typoscript:`myIdentifier.mySubIdentifier`) is -a dotted path of single identifiers, and the first block of non-whitespace characters -on a line until an operator, a curly open brace, or a whitespace. The dot (:typoscript:`.`) -is used to separate single identifiers, creating a hierarchy. - -When a dot is part of a single identifier name (this may, for instance, sometimes happen when configuring -FlexForm details), it must be quoted with a backlash. The example below results in the -identifier :typoscript:`myIdentifier` with the sub identifier :typoscript:`my.identifier.with.dots` -having the assigned value :typoscript:`myValue`: - -.. include:: /CodeSnippets/TypoScriptSyntax/Identifiers2.rst.txt diff --git a/Documentation/Configuration/TypoScript/Syntax/Index.rst b/Documentation/Configuration/TypoScript/Syntax/Index.rst index dbe5ac366b..63649cc47a 100644 --- a/Documentation/Configuration/TypoScript/Syntax/Index.rst +++ b/Documentation/Configuration/TypoScript/Syntax/Index.rst @@ -6,16 +6,12 @@ Syntax ====== -This chapter is about the syntax of TypoScript: The rules you must obey in order to -store configuration in this structure. +The TypoScript syntax is describes in-depth in the chapter +:ref:`TypoScript syntax ` of the +:ref:`TypoScript Reference `. -.. toctree:: - :titlesonly: - :glob: +The TypoScript Syntax can be used for both Frontend TypoScript and TSconfig as +backend configuration langauge. - Identifiers/Index - CodeBlocks/Index - Operators/Index - Comments/Index - Conditions/Index - FileImports/Index +The syntax works different then other known configuration languages, therefore +it takes some time to get used to it. diff --git a/Documentation/Configuration/TypoScript/Syntax/Operators/Index.rst b/Documentation/Configuration/TypoScript/Syntax/Operators/Index.rst deleted file mode 100644 index ac9a2beba3..0000000000 --- a/Documentation/Configuration/TypoScript/Syntax/Operators/Index.rst +++ /dev/null @@ -1,317 +0,0 @@ -.. include:: /Includes.rst.txt -.. index:: TypoScript; Operator -.. _typoscript-syntax-syntax-operator: - -========= -Operators -========= - -TypoScript syntax comes with a couple of operators to assign -values, copy from other identifier paths, and to manipulate values. -Let's have a closer look at them. - -.. index:: - TypoScript; Operator "=" - TypoScript; Value assignment -.. _typoscript-syntax-syntax-equal-operator: -.. _typoscript-syntax-syntax-value-assignment: - -Value assignment with "=" -========================= - -This most common operator assigns a single line value to an identifier path. -Everything after the :typoscript:`=` character until the end of the line is -considered to be the value. The value is trimmed, leading and trailing whitespaces -are removed. - -Values are parsed for constant references. With a value assignment like -:typoscript:`foo = someText {$someConstant} furtherText`, the parser will -look up the constant reference :typoscript:`{$someConstant}` and tries to -substitute it with a defined constant value. If such a constant does not -exist, it falls back to the string literal including the :typoscript:`{$` and -:typoscript:`}` characters. - -A couple of examples: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorAssignment.rst.txt - -.. caution:: - The TypoScript parser looks for valid operators first, then parses things - behind it. Consider this example: - - .. code-block:: typoscript - - lib.nav.wrap = - - This is ambiguous: The above :typoscript:`=` - :typoscript:`=<` to the identifier :typoscript:`ul`. - - Before TYPO3 v12.0 the TypoScript parser interpreted this as an assignment, - since TYPO3 v12.0 it is treated as a reference. - - The above example aims for an assignment, though, which can be achieved by - adding a whitespace between :typoscript:`=` and :typoscript:`<`: - - .. code-block:: typoscript - - lib.nav.wrap = - -.. index:: - TypoScript; Operator "( )" - TypoScript; Multi-line values -.. _typoscript-syntax-syntax-round-brackets: -.. _typoscript-syntax-syntax-multiline-values: - -Multiline assignment with "(" and ")" -===================================== - -Opening and closing parenthesis are used to assign multi-line values. This allows -defining values that span several lines and thus include line breaks. - -The end parenthesis :typoscript:`)` is important: If it is not found, the parser -considers all following lines until the end of the TypoScript text snipped to be part -of the value. This includes comments, :typoscript:`[GLOBAL]` conditions and :typoscript:`@import` -file includes: They are not a syntax construct and are considered part of the value assignment. - -However, the value is parsed for constants (text looking like :typoscript:`{$myIdentifier.mySubIdentifier}`: -The parser will try to substitute them to their assigned constant value. The "TypoScript" and -"Page TSconfig" backend modules may show a warning if a reference to a constant can't be resolved. -If a constant reference can't be resolved, the value falls back to its string literal. -Since multi-line values are sometimes used to output JavaScript, and JavaScript also uses a -syntax construct like :typoscript:`{$...}`, this may lead to false positive warnings in those -backend modules. - -A couple of examples: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorMultiLine.rst.txt - - -.. index:: - TypoScript; Operator ">" - TypoScript; Object unsetting -.. _typoscript-syntax-syntax-bigger-than-operator: -.. _typoscript-syntax-syntax-unsetting-operator: - -Unset with ">" -============== - -This can be used to unset a previously defined identifier path value, and -all of its sub identifiers: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorUnset.rst.txt - - -.. index:: - TypoScript; Operator "<" - TypoScript; Object copying -.. _typoscript-syntax-syntax-smaller-than-operator: -.. _typoscript-syntax-syntax-object-copying: - -Copy with "<" -============= - -The :typoscript:`<` character is used to copy one identifier path to another. -The whole current identifier state is copied: both value and sub identifiers. -It overrides any old sub identifiers and values at that position. - -The copy operator is useful to follow the -`DRY - Don't repeat yourself `__ -principle. It allows maintaining a configuration set at a central place, and copies are -used at further places when needed again. - -The result of the below TypoScript is two independent sets which are duplicates. -They are not references to each other but actual copies: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorCopy1.rst.txt - -The copy operator is allowed within code blocks as well: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorCopy2.rst.txt - -In the above example, the copied identifier path is referred to with its full path -:typoscript:`myIdentifier.10`. When copying on the same level, it is allowed -to use a relative path, indicated by a prepended dot. The following produces -the same result as above: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorCopy3.rst.txt - -Using the copy operator creates a copy of the source path at exactly this point -in the parsing process. Changing the source afterwards does not change the -target, and changing the target afterwards does not change the source: - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorCopy4.rst.txt - - -.. index:: - TypoScript; Operator "=<" - TypoScript; References -.. _typoscript-syntax-syntax-equal-smaller-than-operator: -.. _typoscript-syntax-syntax-object-referencing: - -References with "=<" -==================== - -.. note:: - - The reference operator :typoscript:`=<` is not a general syntax construct. - Even though the TypoScript and TSconfig backend modules show usages of - the operator, they are only resolved in frontend TypoScript for the - special :typoscript:`tt_content` path: You can use :typoscript:`=<` - in frontend TypoScript for example with - :typoscript:`tt_content.text =< lib.contentElement`, and you are encouraged - to do so in this special case for performance reasons, but this operator - does not work anywhere else. - -In the context of frontend TypoScript, it is possible to create -references from one identifier path to another within the :typoscript:`tt_content` -path. References mean that multiple positions can copy the same source -identifier path without making an actual copy. This allows changes to the -source identifier afterwards, which changes the targets as well. References can -be convenient for this special case, but should be used with caution. - -.. include:: /CodeSnippets/TypoScriptSyntax/OperatorReference.rst.txt - -.. index:: - TypoScript; Operator ":=" - TypoScript; Value modifications -.. _typoscript-syntax-syntax-colon-equal-operator: -.. _typoscript-syntax-syntax-value-modification: - -Value modifications with ":=" -============================= - -This operator assigns a value to an identifier path by calling a -predefined function which modifies the existing value in different ways. -This is very useful when a value should be modified without completely -redefining it again. - -A modifier is referenced by its modifier name, plus arguments in -parenthesis. These predefined functions are available: - -`prependString()` - Add a string to the beginning of the existing value. - - .. code-block:: typoscript - - foo = cd - foo := prependString(ab) - # foo is "abcd" - -`appendString()` - Add a string to the end of the existing value. - - .. code-block:: typoscript - - foo = ab - foo := appendString(cd) - # foo is "abcd" - -`removeString()` - Remove a string from the existing value. - - .. code-block:: typoscript - - foo = foobarfoo - foo := removeString(foo) - # foo is "bar" - -`replaceString()` - Replace old with new value. Separate these using :code:`|`. - - .. code-block:: typoscript - - foo = abcd - foo := replaceString(bc|123) - # foo is "a123d" - -`addToList()` - Add values to the end of a list of existing values. There is no check for - duplicate values, and the list is not sorted in any way. - - .. code-block:: typoscript - - foo = 123,456 - foo := addToList(789) - # foo is "123,456,789" - - foo = - foo := addToList(123) - # foo is "123" (no leading comma added on empty existing value) - -`removeFromList()` - Remove a comma-separated list of values from an existing comma-separated - list of values. Empty values are removed as well. - - .. code-block:: typoscript - - foo = foo,123,bar,456,foo,,789 - foo:= removeFromList(foo,bar) - # foo is "123,456,789" - -`uniqueList()` - Remove duplicate entries from a comma-separated list of values. - - .. code-block:: typoscript - - foo = 123,456,abc,456,456 - foo := uniqueList() - # foo is "123,456,abc" - -`reverseList()` - Reverses the order of entries in a comma-separated list of values. - - .. code-block:: typoscript - - foo = 123,456,abc,456 - foo := reverseList() - # foo is "456,abc,456,123" - -`sortList()` - Sorts the entries in a comma-separated list of values. There are optional - sorting parameters, multiple can be separated using :typoscript:`,`: - - ascending (default) - Sort the items in ascending order: First numbers from small to big, then - letters in alphabetical order. - - descending - Sort the items in descending order: First letters in descending order, then - numbers from big to small. - - numeric - Apply numeric sorting: Numbers from small to big, letters sorted after "0". - - .. code-block:: typoscript - - foo = 10,100,0,20,abc - foo := sortList() - # foo is "0,10,20,100,abc" - - foo = 10,0,100,-20 - foo := sortList(numeric) - # foo is "-20,0,10,100" - - foo = 10,100,0,20,-20 - foo := sortList(numeric,descending) - # foo is "100,20,10,0,-20" - -`getEnv()` - Access a $_ENV value. Resolves to empty value if not set. - - .. code-block:: typoscript - - # $_ENV['foo'] = 'fooValue' - foo := getEnv(foo); - # foo is "fooValue" - -`myCustomFunction()` - .. versionchanged:: 12.0 - - The PSR-14 event :php:`\TYPO3\CMS\Core\TypoScript\AST\Event\EvaluateModifierFunctionEvent` - is available to define custom TypoScript functions. The event replaces the hook - :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsparser.php']['preParseFunc']`. - - The section :ref:`EvaluateModifierFunctionEvent ` - provides an example and the API. diff --git a/Documentation/ExtensionArchitecture/Tutorials/Tea/DirectoryStructure.rst b/Documentation/ExtensionArchitecture/Tutorials/Tea/DirectoryStructure.rst index b45690f796..a84e72f8da 100644 --- a/Documentation/ExtensionArchitecture/Tutorials/Tea/DirectoryStructure.rst +++ b/Documentation/ExtensionArchitecture/Tutorials/Tea/DirectoryStructure.rst @@ -116,7 +116,7 @@ The :file:`Configuration` folder contains several subfolders: backend on page or user level in TypoScript syntax. Our extension does not contain TSconfig, so the folder is only a placeholder here. :file:`Configuration/TypoScript/` - Contains :ref:`TypoScript ` configuration for + Contains :ref:`TypoScript ` configuration for the frontend. In some contexts the configuration contained here is also used in the backend. :file:`Configuration/Services.yaml`