TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:09 +02:00
commit af8cc155b5
6818 changed files with 642608 additions and 0 deletions
@@ -0,0 +1,71 @@
.. include:: /Includes.rst.txt
.. _breaking-39721:
=========================================================
Breaking: #39721 - Prototype.js and Scriptaculous removed
=========================================================
See :issue:`39721`
Description
===========
The JavaScript libraries prototype.js and scriptaculous have been removed from the TYPO3 Core.
Impact
======
Any TYPO3 Extension that uses prototype.js or scriptaculous for usage in the Backend or Frontend will not work anymore.
The TypoScript properties `page.javascriptLibs.Prototype` and `page.javascriptLibs.Scriptaculous.*` have been removed
and have no effect anymore, leading to not including prototype in websites where this TypoScript option is set.
This might lead to broken websites when updating.
The shipped Fluid ViewHelper for backend modules does no longer have the according properties anymore and will throw a fatal
error:
.. code-block:: html
<f:be.container loadPrototype="false" loadScriptaculous="false" scriptaculousModule="someModule,someOtherModule">
Using the PageRenderer directly in any module, and calling one of the related methods will result in a fatal error.
.. code-block:: php
PageRenderer->setPrototypePath()
PageRenderer->setScriptaculousPath()
PageRenderer->getPrototypePath()
PageRenderer->getScriptaculousPath()
PageRenderer->loadPrototype()
PageRenderer->loadScriptaculous()
Including the JavaScript files in a custom extension or custom frontend without using the API will lead to a 404 error
when referencing one of the files.
Affected Installations
======================
Instances that use prototype.js or scriptaculous in the Frontend.
Instances with third-party extensions that
require these libraries or set one of the options in the mentioned ViewHelper.
Instances that link to one of the JavaScript files directly.
Instances that use the PageRenderer API directly and use on of the methods above.
Migration
=========
The preferred substitution is jQuery and RequireJS that are loaded by default in any TYPO3 Backend module, if any
third-party code is needed based on prototype and/or scriptaculous. Alternatively, it is possible to ship a separate
prototype.js and scriptaculous library in a third-party extension if no migration is possible with jQuery.
.. index:: JavaScript, TypoScript, Frontend, Backend
@@ -0,0 +1,69 @@
.. include:: /Includes.rst.txt
.. _breaking-52705:
=======================================================
Breaking: #52705 - Default log configuration is changed
=======================================================
See :issue:`52705`
Description
===========
FileWriter behavior has changed
-------------------------------
The FileWriter of the logging Framework now appends a hash to its default log file which is used when no log file name
is provided in the configuration.
The new default log file might now look like this (the hash depends on the current encryption key):
::
typo3temp/logs/typo3_7ac500bce5.log
Default configuration has changed
---------------------------------
For security reasons we want the default log file of TYPO3 to contain a random hash to make guessing the file name harder.
Therefore the :code:`logFile` configuration is removed for the default :code:`FileWriter` configuration.
Additionally the "deprecated" :code:`FileWriter` configuration is removed because it is not used by the core.
Impact
======
If the log file configuration is **not** overwritten the TYPO3 default log file will change from
:code:`typo3temp/logs/typo3.log` to :code:`typo3temp/logs/typo3_<hash>.log`.
Installations with Extensions making use of the changed / removed log configurations might break.
Affected Installations
======================
All instances that expect the default log file to be :code:`typo3temp/logs/typo3.log` for some reason.
All instances that expect the :code:`logFile` configuration to be present in the :code:`writerConfiguration` for some reason.
All instances that use the "deprecated" log configuration in their Extensions.
All instances that use Extensions which extend the FileWriter and access the :code:`$defaultLogFile` class property
which is replaced by :code:`$defaultLogFileTemplate` and the :code:`getDefaultLogFileName()` method.
Migration
=========
Adjust the log configuration according to your needs in your :code:`LocalConfiguration.php`.
Adjust any Extension code affected by the changes if needed.
.. index:: PHP-API, LocalConfiguration
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _breaking-55759:
==========================================================
Breaking: #55759 - HTML in link titles not working anymore
==========================================================
See :issue:`55759`
Description
===========
By introducing proper handling of double quotes in link titles (TypoLink fields) the processing of the link title is adjusted.
Escaping will be done automatically now.
Impact
======
Existing link titles, which contain HTML escape sequences, will not be shown correctly anymore in Frontend.
Example: A link title `Some &quot;special&quot; title` will be output as `Some &amp;quot;special&amp;quot; title`
Affected Installations
======================
Any installation using links with titles containing HTML escape sequences like `&quot;` or `&gt;`
Migration
=========
Change the affected link titles to contain the plain characters, the correct encoding will be taken care of automatically.
Example: `Some "special" title`
If you need to encode a TypoLink manually in code, use the `TypoLinkCodecService` class, which provides a convenient way
to encode a TypoLink from its fragments.
.. index:: Frontend, Backend
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-56133:
==========================================================
Breaking: #56133 - New BE user permission "Files: replace"
==========================================================
See :issue:`56133`
Description
===========
A new feature was introduced to replace files in the file list. For this feature an new permission was introduce "Files: replace".
This permission is now also checked when a BE user uploads a file with the same name.
Impact
======
BE users need the permission "Files: replace" before they are allowed to replace a file by uploading a file with the same name.
Affected Installations
======================
All installations.
Migration
=========
An upgrade wizard was added to set this permission for all BE users that already are allowed to write files as this was the old permissions check.
.. index:: FAL, Backend
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _breaking-56951:
===========================================================
Breaking: #56951 - Remove unused methods in PagePositionMap
===========================================================
See :issue:`56951`
Description
===========
Remove unused methods in PagePositionMap
Impact
======
A fatal error will be thrown if one of the removed methods is used.
The removed methods are:
`insertQuadLines`
`JSimgFunc`
Affected Installations
======================
Installations that use one of the removed methods.
Migration
=========
Use proper styling for a tree list.
.. index:: PHP-API, Backend
@@ -0,0 +1,42 @@
.. include:: /Includes.rst.txt
.. _breaking-63838:
===================================================================
Breaking: #63838 - Changed OpcodeCacheUtility being a service class
===================================================================
See :issue:`63838`
Description
===========
The `OpcodeCacheUtility` has been migrated to a service class called `OpcodeCacheService`, all methods are not static anymore.
Impact
======
Calling `OpcodeCacheUtility` will throw a fatal error.
Affected Installations
======================
All third-party extensions using the utility class will be affected.
Migration
=========
Create an instance of `OpcodeCacheService` and call its method by the object operator `->`.
Example:
.. code-block:: php
GeneralUtility::makeInstance(OpcodeCacheService::class)->clearAllActive($cacheEntryPathAndFilename);
.. index:: PHP-API
@@ -0,0 +1,66 @@
.. include:: /Includes.rst.txt
.. _breaking-64200:
=================================================================
Breaking: #64200 - Custom [cObject].cache.* TypoScript evaluation
=================================================================
See :issue:`64200`
Description
===========
The `stdWrap.cache.` property is now available as first-class function to all
content objects. This skips the rendering even for content objects that evaluate
`stdWrap` after rendering (e.g. `COA`).
Additionally, stdWrap support is added to key, lifetime and tags.
Impact
======
If you've previously used the `cache.` property in your custom cObject,
this will now fail, because `cache.` is unset to avoid double caching.
`stdWrap.cache` continues to exist and can be used as before. However
the top level `stdWrap` of certain cObjects (e.g. `TEXT` cObject)
will not evaluate `cache.` as part of `stdWrap`, but before starting
the rendering of the cObject. In conjunction the storing will happen
after the `stdWrap` processing right before the content is returned.
Top level `cache.` will not evaluate the hook
`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['stdWrap_cacheStore']`
any more.
Affected Installations
======================
All installations with custom `cObject` implementations which make use of the `cache.` property.
Installations that purposely rely on the content object being evaluated before the cache is tried.
Installations that rely on the order of the `cache.` evaluation.
Installations that make use of the hook
`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['stdWrap_cacheStore']`
on top level `cache.`.
Migration
=========
Rename your property or rely on the Core implementation.
If you need `cache.` being evaluated as part of `stdWrap`, please move it down one level
by writing `stdWrap.cache` instead.
If you used the hook
`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['stdWrap_cacheStore']`,
please use `stdWrap` and the available hooks inside `stdWrap` to achieve your goal.
.. index:: PHP-API, TypoScript, Frontend
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _breaking-64714:
=============================================================
Breaking: #64714 - Catch exceptions for inaccessible storages
=============================================================
See :issue:`64714`
Description
===========
Changed `\TYPO3\CMS\Core\Resource\Exception\ResourcePermissionsUnavailableException` to extend
from `\TYPO3\CMS\Core\Resource\Exception` instead of `\RuntimeExtension`
Impact
======
If a call to `\TYPO3\CMS\Core\Resource\Driver\LocalDriver->getPermissions()` throws an exception and
your extension catches `\RuntimeExtension` it breaks on permission read errors.
Migration
=========
To write a compatible extension you can do following in your catch block:
.. code-block:: php
} catch(\RuntimeException $e) {
// Do exception handling
} catch(\TYPO3\CMS\Core\Resource\Exception\ResourcePermissionsUnavailableException $e) {
// Do same exception handling
}
.. index:: PHP-API, FAL, Backend
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-65305:
====================================================
Breaking: #65305 - DriverInterface has been extended
====================================================
See :issue:`65305`
Description
===========
The `getFolderInFolder()` and `getFileInFolder()` functions have been added to `DriverInterface`.
Impact
======
Any FAL driver extension will stop working due to the change in the interface.
Affected Installations
======================
Any installation with a custom FAL driver, like WebDAV or Dropbox.
Migration
=========
The functions `getFolderInFolder()` and `getFileInFolder()` must be added to the custom FAL driver.
A non-hierarchical driver needs to throw a "not implemented" exception when calling these functions.
.. index:: PHP-API, FAL, Backend
@@ -0,0 +1,35 @@
.. include:: /Includes.rst.txt
.. _breaking-66602:
=========================================================
Breaking: #66602 - Check jumpUrl referer has been removed
=========================================================
See :issue:`66602`
Description
===========
The following method has been removed:
.. code-block:: php
TypoScriptFrontendController::checkJumpUrlReferer()
Impact
======
Calls to this method will result in a fatal error.
Affected Installations
======================
Instances with third-party extensions calling this method.
.. index:: PHP-API, Frontend, ext:jumpurl
@@ -0,0 +1,33 @@
.. include:: /Includes.rst.txt
.. _breaking-67545:
======================================================
Breaking: #67545 - PreFileAdd signal behaviour changed
======================================================
See :issue:`67545`
Description
===========
In order to check whether an uploaded file exists already before uploading or to determine user preferences about present
files only when needed, the final name of the file is needed. As the final name can be altered by the `PreFileAdd` signal,
which originally always received the temporary uploaded file path as parameter, the signal will now receive an empty string
in `$sourceFilePath`.
Impact
======
All `PreFileAdd` slot methods that depend on the `$sourceFilePath` param must be adapted to handle the new empty string value.
Affected Installations
======================
All extensions that use the `PreFileAdd` signal and depend on the `$sourceFilePath` param.
.. index:: PHP-API, FAL, Backend
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _breaking-67546:
=======================================================================
Breaking: #67546 - Cleanup Flash message rendering in FlashMessageQueue
=======================================================================
See :issue:`67546`
Description
===========
The rendering of flash messages has changed when using the view helper.
Now the rendering output of `\TYPO3\CMS\Core\Messaging\FlashMessageQueue::renderFlashMessages()`
is adapted to being exactly the same.
Impact
======
Extensions using the rendered output of `\TYPO3\CMS\Core\Messaging\FlashMessageQueue::renderFlashMessages()`
and in addition using HTML tags in flash messages for styling purposes will get their HTML flash message output
properly HTML encoded. Thus the HTML tags will be visible in the rendered flash message output.
Since `\TYPO3\CMS\Backend\Template\DocumentTemplate` also uses this rendering type, modules using this class
will also be affected.
Affected Installations
======================
All extensions that use modules with `\TYPO3\CMS\Backend\Template\DocumentTemplate` or are using
`\TYPO3\CMS\Core\Messaging\FlashMessageQueue::renderFlashMessages()` directly.
Migration
=========
Remove all HTML from flash messages.
.. index:: PHP-API, Backend
@@ -0,0 +1,38 @@
.. include:: /Includes.rst.txt
.. _breaking-67557:
======================================================
Breaking: #67557 - Language file of Opendocs was moved
======================================================
See :issue:`67557`
Description
===========
The language file :file:`locallang_opendocs.xlf` of EXT:opendocs has been moved to
:file:`Resources/Private/locallang.xlf`.
Impact
======
Inclusion of the file via `$this->getLanguageService()->includeLLFile()` or usage in
`<f:translate key="LLL:EXT:opendocs/locallang_opendocs.xlf:foobar" />.` will fail.
Affected Installations
======================
Every extension relying on the existence of :file:`locallang_opendocs.xlf` will be affected.
Migration
=========
Use :file:`Resources/Private/Language/locallang.xlf`, if required.
.. index:: PHP-API, Backend, ext:opendocs
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-67565:
=============================================================
Breaking: #67565 - Deprecated backend related methods removed
=============================================================
See :issue:`67565`
Description
===========
The following deprecated methods have been removed:
.. code-block:: php
DocumentTemplate::formWidthText()
PageLayoutView::getBackendLayoutConfiguration()
PageLayoutView::wordWrapper()
Impact
======
Calls to these methods will result in a fatal error.
Affected Installations
======================
Instances with third-party extensions calling one of these methods.
.. index:: PHP-API, Backend
@@ -0,0 +1,63 @@
.. include:: /Includes.rst.txt
.. _breaking-67577:
================================================
Breaking: #67577 - rte_enabled and flag handling
================================================
See :issue:`67577`
Description
===========
Content elements of type `text` and `text with image` contained a field "RTE enabled" that
could be unchecked to disable the rich text editor. This field has been removed together with the
`TCA` richtext `flag` handling.
Impact
======
The field is removed from database and the flag information is lost.
Affected Installations
======================
All instances will no longer show the "RTE enabled" field below `text` and `text with image`
content elements below the text field, the `TCA` `flag` is obsolete, see example below.
Migration
=========
A typical rich text configuration in `TCA` looked like:
.. code-block:: php
'content' => array(
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.text',
'config' => array(
'type' => 'text',
'cols' => '48',
'rows' => '5',
'wizards' => array(
'RTE' => array(
...
)
)
),
'defaultExtras' => 'richtext:rte_transform[flag=otherField|mode=ts_css]',
),
With this configuration RTE was only rendered if `otherField` had the value 1. This flag is obsolete now:
.. code-block:: php
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]',
.. index:: TCA, RTE, Backend
@@ -0,0 +1,41 @@
.. include:: /Includes.rst.txt
.. _breaking-67646:
============================================================
Breaking: #67646 - PHP library inclusion in frontend removed
============================================================
See :issue:`67646`
Description
===========
The PHP library inclusion into the TYPO3 Frontend has been removed without substitution.
Previously it was used to include plain PHP scripts during the Frontend request.
The method `PageGenerator::getIncFiles()` has been removed.
Impact
======
The TypoScript options `config.includeLibrary` and `config.includeLibs` have no effect anymore.
Any calls to `PageGenerator::getIncFiles()` will result in a fatal error.
Affected Installations
======================
Any installation using the TypoScript options named above.
Any third party code using the method named above.
Migration
=========
Use hooks during the Frontend set up to execute custom PHP code.
.. index:: PHP-API, Frontend, TypoScript
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _breaking-67654:
===========================================================
Breaking: #67654 - Remove $GLOBALS[FILEICONS] functionality
===========================================================
See :issue:`67654`
Description
===========
The global variable `$GLOBALS['FILEICONS']` was in use for displaying icons before the sprite icons for files were introduced in TYPO3 v4.4.
The `$FILEICONS` has been removed completely as well as the function call `BackendUtility::getFileIcon()`.
Impact
======
Any usage on `$GLOBALS['FILEICONS']` will have no effect anymore.
Any calls on `BackendUtility::getFileIcon()` will result in a fatal error.
Affected Installations
======================
Instances that populate or make use of `$GLOBALS['FILEICONS']` or installations with extensions calling `BackendUtility::getFileIcon()` directly.
Migration
=========
Use sprite icons via `IconUtility::getSpriteIconForFile()`.
.. index:: PHP-API, Backend
@@ -0,0 +1,47 @@
.. include:: /Includes.rst.txt
.. _breaking-67749:
=============================================================
Breaking: #67749 - Force class auto loading for various hooks
=============================================================
See :issue:`67749`
Description
===========
Some hook registrations now rely on class auto loading.
Impact
======
Hooks may not be called any longer if class auto loader can not find the class.
Affected Installations
======================
Instances using
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals']
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['setup']['accessLevelCheck']
Migration
=========
Make sure the hook classes are found with the casual auto loading mechanism
that is also used for all other PHP classes. The hook registration can be
simplified to an empty value, example:
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][\TYPO3\CMS\Saltedpasswords\Evaluation\FrontendEvaluator::class] = '';
.. index:: PHP-API, Backend
@@ -0,0 +1,72 @@
.. include:: /Includes.rst.txt
.. _breaking-67753:
================================================
Breaking: #67753 - Drop "Show secondary options"
================================================
See :issue:`67753`
Description
===========
When editing records, the checkbox at the bottom "Show secondary options (palettes)" has been dropped, palettes are now
always shown and the collapse buttons are no longer rendered.
Impact
======
PageTSconfig
------------
Setting `options.enableShowPalettes` has no effect anymore and can be removed from `PageTSconfig`.
TCA
---
Setting `canNotCollapse` in `ctrl` and `palettes` section are obsolete and can be dropped:
.. code-block:: php
$GLOBALS['TCA']['aTable']['ctrl']['canNotCollapse'] = 1; // Obsolete
$GLOBALS['TCA']['aTable']['palettes']['aPaletteName']['canNotCollapse'] = 1; // Obsolete
PHP
---
The following method has been dropped. If an extension calls it, a PHP fatal error will be thrown.
This was an internal method and external usage is unlikely:
.. code-block:: php
\TYPO3\CMS\Backend\Controller\EditDocumentController->functionMenus()
The following properties have been dropped, calling those may trigger a PHP warning level error, external usage is unlikely:
.. code-block:: php
\TYPO3\CMS\Backend\Controller\EditDocumentController->MOD_MENU
\TYPO3\CMS\Backend\Controller\EditDocumentController->MOD_SETTINGS
\TYPO3\CMS\Backend\Form\FormEngine->palettesCollapsed
Affected Installations
======================
In the rare case that an extension uses one of the above methods or properties, a fatal PHP error may be triggered.
Migration
=========
The above properties can be dropped, the `PageTS` and `TCA` settings have no effect anymore.
.. index:: TCA, TSConfig, PHP-API, Backend
@@ -0,0 +1,42 @@
.. include:: /Includes.rst.txt
.. _breaking-67792:
==========================================================
Breaking: #67792 - Class aliases of Indexed Search removed
==========================================================
See :issue:`67792`
Description
===========
The class aliases of the Indexed Search extension are removed.
Impact
======
These class aliases are not available anymore:
- `tx_indexedsearch`
- `Tx_IndexedSearch_Controller_SearchController`
Affected Installations
======================
Any third party code using the old class aliases.
Migration
=========
Use the new class names:
- `\TYPO3\CMS\IndexedSearch\Controller\SearchFormController`
- `\TYPO3\CMS\IndexedSearch\Controller\SearchController`
.. index:: PHP-API, ext:indexed_search
@@ -0,0 +1,90 @@
.. include:: /Includes.rst.txt
.. _breaking-67811:
==========================
Breaking: #67811 - Rte API
==========================
See :issue:`67811`
Description
===========
The RTE implementation was based on the main classes `\TYPO3\CMS\Backend\Rte\AbstractRte`,
`\TYPO3\CMS\Rtehtmlarea\RteHtmlAreaBase` and `\TYPO3\CMS\Rtehtmlarea\RteHtmlAreaApi`. These
three main API were removed or changed method signatures and internal method calls.
The functionality to render RTE standalone and out of a context of `FormEngine` was dropped.
Impact
======
Main API changes
----------------
* Method `TYPO3\CMS\Backend\Utility\BackendUtility::RTEgetObj()` is deprecated and no longer used.
`FormEngine` now creates a `RichTextElement` with `NodeFactory` and `makeInstance()`, the
created object is not a singleton but a prototype.
* With the deprecation of `RTEgetObj` method `transformContent` from `AbstractRte` has been inlined to
`DataHandler`.
* Method `isAvailable` from `AbstractRte` has been dropped. Every valid browser and browser version
for TYPO3 CMS 7 can render the default richtext editor. Custom checks may be implement via
`NodeResolverInterface` in `FormEngine`.
* Property `RTE_errors` in `TYPO3\CMS\Core\Authentication\BackendUserAuthentication` has been dropped along
with the `RTEgetObj()` deprecation.
RTE registration
----------------
* Different richtext implementations can no longer register in `$GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg']`.
Instead, registration must be done in `FormEngine` via `NodeFactory` API, the method `drawRTE` has been dropped.
* Transformations are not available via `AbstractRte` anymore, hooks within `RteHtmlParser` can
be used for custom transformations.
PHP classes
-----------
* `\TYPO3\CMS\Backend\Rte\AbstractRte` has been dropped.
* `\TYPO3\CMS\Rtehtmlarea\RteHtmlAreaBase` has been dropped and its functionality was moved to
`\TYPO3\CMS\Rtehtmlarea\Form\Element\RichtextElement`. All methods and properties except
the main entry method `render()` used by `FormEngine` are protected.
* `\TYPO3\CMS\Rtehtmlarea\RteHtmlAreaApi` has been refactored. Method `main()` receives
a configuration array instead of an instance of the parent object. Some methods were dropped
and are no longer called.
RTE Plugin Configuration
------------------------
* Parameter `$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['anExtensionKey']['plugins']['aPluginName']['addIconsToSkin']`
was dropped, plugin property `relativePathToSkin` is no longer evaluated.
* A couple of helper methods were added to `RteHtmlAreaApi`
* This API may get further changes in the future.
Affected Installations
======================
Extensions that extend one of the above mentioned extensions or API.
Migration
=========
Adapt the code using these methods.
.. index:: PHP-API, RTE, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _breaking-67815:
======================================================================
Breaking: #67815 - Remove tceforms.js because we don't need it anymore
======================================================================
See :issue:`67815`
Description
===========
Since the value slider is based on bootstrap, the last code from `tceforms.js` is not needed anymore.
Impact
======
All instances which include `sysext/backend/Resources/Public/JavaScript/tceforms.js` will produce a 404 Not Found error.
Affected Installations
======================
All instances which include `sysext/backend/Resources/Public/JavaScript/tceforms.js`.
Migration
=========
Remove all references to the file.
.. index:: JavaScript, Backend
@@ -0,0 +1,38 @@
.. include:: /Includes.rst.txt
.. _breaking-67824:
===========================================
Breaking: #67824 - typo3/ext folder removed
===========================================
See :issue:`67824`
Description
===========
The folder `typo3/ext` does not exist in the default core package anymore.
The functionality to have global extensions in this directory is not touched.
Impact
======
In case global extensions are moved to this directory during
deployment or rollout, the directory must be created before, now.
Affected Installations
======================
Instances that use global extensions within `typo3/ext`.
Migration
=========
Create directory `typo3/ext` before moving extensions into this folder.
.. index:: PHP-API
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-67825:
====================================================================
Breaking: #67825 - Remove colorpicker options "dim" and "tableStyle"
====================================================================
See :issue:`67825`
Description
===========
`TCA` colorpicker options "dim" and "tableStyle" have been removed.
Impact
======
The TCA options won't have any effect anymore.
Affected Installations
======================
Any extension that has a colorpicker wizard configured in `TCA` and uses `dim`
or `tableStyle` options is effected.
Migration
=========
Both options can de safely removed.
.. index:: TCA, Backend
@@ -0,0 +1,63 @@
.. include:: /Includes.rst.txt
.. _breaking-67890:
=========================================================================================
Breaking: #67890 - Redesign FluidTemplateDataProcessorInterface to DataProcessorInterface
=========================================================================================
See :issue:`67890`
Description
===========
The `FluidTemplateDataProcessorInterface` introduced with #66907 has been refactored to `DataProcessorInterface`.
This decouples it from the Fluid StandaloneView and makes the ContentObjectRenderer available in the process method
so the different DataProcessor classes do no have to initiate it on their own.
Instead of manipulating the `$data` property of the `ContentObjectRenderer` a new key/value store can be filled/manipulated
by the different dataProcessor classes.
The new interface expects the following `process()` method:
.. code-block:: php
/**
* Process content object data
*
* @param ContentObjectRenderer $cObj The data of the content element or page
* @param array $processorConfiguration The configuration of this processor
* @param array $contentObjectConfiguration The configuration of Content Object
* @param array $processedData Key/value store of processed data (e.g. to be passed to a Fluid View)
* @return array the processed data as key/value store
*/
public function process(
ContentObjectRenderer $cObj,
array $contentObjectConfiguration,
array $processorConfiguration,
array $processedData
);
Impact
======
This will break all frontend rendering for TYPO3 7.3 installations that use `FLUIDTEMPLATE` `.dataProcessing`.
Affected Installations
======================
All TYPO3 7.3 installations that already use the new `FLUIDTEMPLATE` `.dataProcessing` option.
Migration
=========
Change the interface of all DataProcessor classes from `FluidTemplateDataProcessorInterface` to the new
`DataProcessorInterface` and adjust the `process()` method to match the new parameters and make sure it returns the
processed data as the processed data.
.. index:: PHP-API, Fluid, Frontend
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _breaking-67932:
=======================================================================
Breaking: #67932 - felogin template has been changed for RSA encryption
=======================================================================
See :issue:`67932`
Description
===========
Due to the introduction of the new rsaauth API the felogin template has been changed.
A new HTML data-attribute had to be added to the password field in order to enable the RSA encryption Javascript code.
Impact
======
If rsaauth is enabled and the template is not updated, no login is possible.
Affected Installations
======================
Any installation using a custom felogin template and having rsaauth enabled for frontend.
Migration
=========
The template has to be adjusted and a `data-rsa-encryption` attribute has to be added to the password field in `<!--###TEMPLATE_LOGIN###-->`
The field definition in your template has to be updated to like this:
.. code-block:: html
<input type="password" id="pass" name="pass" value="" data-rsa-encryption="" />
.. index:: Frontend, ext:felogin, ext:rsaauth
@@ -0,0 +1,39 @@
.. include:: /Includes.rst.txt
.. _breaking-67946:
===================================================
Breaking: #67946 - LowLevel Cleaner Scripts Removed
===================================================
See :issue:`67946`
Description
===========
The shell scripts for checking and cleaning a TYPO3 installation for its integrity have been removed from the Core.
They were previously located under :file:`typo3/cleaner_check.sh` and :file:`typo3/cleaner_fix.sh`. The contents have
been moved to the documentation for EXT:lowlevel in the respective :file:`README.rst`.
Impact
======
Any regular system jobs that execute these scripts will exit with the script not found anymore.
Affected Installations
======================
Any installation that uses the shell scripts above from the command line directly.
Migration
=========
If such a list is needed, create the files manually again in your system (outside your document root). The code can be
found inside :file:`EXT:lowlevel/README.rst`.
.. index:: ext:lowlevel, Backend
@@ -0,0 +1,45 @@
.. include:: /Includes.rst.txt
.. _breaking-67987:
================================================
Breaking: #67987 - Removed entry script handling
================================================
See :issue:`67987`
Description
===========
Definition and handling of constants `TYPO3_MOD_PATH` and `PATH_typo3_mod` have been dropped.
These constants were important for modules that were still not called through the `mod.php`
`_DISPATCH` system that was introduced in TYPO3 CMS version 4.2.
It is required to route modules through `typo3/mod.php` from now on in case the module relies
on the definition of those constants.
The following old entry scripts were removed:
* typo3/sysext/cms/layout/db_layout.php, use `\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('web_layout')` to link to the module
* typo3/sysext/cms/layout/db_new_content_el.php, use `\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('new_content_element')` to link to the module
Impact
======
Path resolving may fail for scripts that rely on entry points different from `typo3/mod.php`
Constants `TYPO3_MOD_PATH` and `PATH_typo3_mod` are not defined anymore and scripts may
throw a PHP warning if they try to access these constants.
Affected Installations
======================
Installations may fail if linking to modules that use an entry script with a `conf.php` file that do not
use `$MCONF['script'] = '_DISPATCH';`. Those modules must be adapted to the `mod.php` entry point and may
need adaption of further references that are defined relative to the entry script.
Searching for extensions with backend modules that define `TYPO3_MOD_PATH` is a good start to find unwanted usages.
.. index:: PHP-API, Backend
@@ -0,0 +1,51 @@
.. include:: /Includes.rst.txt
.. _breaking-68001:
========================================================
Breaking: #68001 - Removed ExtJS Core and ExtJS Adapters
========================================================
See :issue:`68001`
Description
===========
The functionality of "ExtCore", which acts as a slim ExtJS base functionality similar to what libraries like underscore.js or jQuery do,
but is just dated, has been completely removed from the TYPO3 Core.
The custom adapters which have previously been shipped with ExtJS to allow jQuery functionality to be used
with ExtJS underneath have been removed without substitution. The adapters are not compatible with supported
jQuery, prototype.js or YUI versions anymore and their usages have been slower than ExtJS's base library natively.
Impact
======
Using TypoScript options `page.javascriptLibs.ExtCore = 1`, `page.javascriptLibs.ExtCore.debug = 1` and `page.javascriptLibs.ExtJs.adapter` have no effect anymore.
Using `<f:be.container>` ViewHelpers in a custom Backend module, setting the extJsAdapter, property will result in a fatal error.
Calling `$pageRenderer->loadExtJS()` with a custom third parameter will have no effect anymore.
Calling the methods `loadExtCore()`, `enableExtCoreDebug()`, `getExtCorePath()` and `setExtCorePath()` of `PageRenderer` will result in fatal errors.
Affected Installations
======================
Instances that use ExtCore in the TYPO3 Frontend
Extensions that use `<f:be.container>` with an ExtJS Adapter
Extensions that use the `PageRenderer` object directly to load custom ExtJS or ExtCore.
Migration
=========
Use alternatives for ExtCore or adapters in custom extensions.
.. index:: PHP-API, Fluid, TypoScript, JavaScript, Backend, Frontend
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _breaking-68010-1668719172:
=============================================================================
Breaking: #68010 - T3Editor - Event callbacks for codecompletion have changed
=============================================================================
See :issue:`68010`
Description
===========
Due to the rewrite of T3Editor to jQuery, the event callbacks for codecompletion have changed.
Impact
======
Plugins for codecompletion written in Prototype will not work anymore.
Affected Installations
======================
Every third-party extension providing a T3Editor plugin extending the codecompletion.
Migration
=========
Port the plugin to an AMD module. The event callbacks are now part of the module object and not a standalone function anymore.
Example code:
.. code-block:: javascript
CoolPlugin.afterKeyDown = function(currWordObj, compResult) {
CoolPlugin.somethingFunky(currWordObj, compResult);
};
.. index:: JavaScript, Backend, ext:t3editor
@@ -0,0 +1,60 @@
.. include:: /Includes.rst.txt
.. _breaking-68010:
================================================================================
Breaking: #68010 - T3Editor - Plugin registration for codecompletion has changed
================================================================================
See :issue:`68010`
Description
===========
Due to the rewrite of T3Editor to jQuery, the plugin registration for codecompletion has changed.
Impact
======
Plugins for codecompletion written in Prototype will not work anymore.
Affected Installations
======================
Every third-party extension providing a T3Editor plugin extending the codecompletion.
Migration
=========
Port the plugin to an AMD module. The plugin must have an `init` method with a configuration object as only parameter. Every parameter that was passed to the old Prototype function must be in that configuration object. Please see the example code below or consult :file:`EXT:t3editor/Resources/Public/JavaScript/Plugins/CodeCompletion/DescriptionPlugin.js`.
Example code:
.. code-block:: javascript
define('Awesome/Extension/Plugins/CodeCompletion/CoolPlugin', [
'jquery',
'TYPO3/CMS/T3editor/Plugins/CodeCompletion/TsRef',
'TYPO3/CMS/T3editor/Plugins/CodeCompletion/TsParser'
], function ($, TsRef, TsParser) {
var CoolPlugin = {
codeCompleteBox: null,
codemirror: null
};
CoolPlugin.init = function(configuration) {
DescriptionPlugin.codeCompleteBox = configuration.codeCompleteBox;
DescriptionPlugin.codemirror = configuration.codemirror;
DescriptionPlugin.codeCompleteBox.parent().append($('<div />', {class: 'foomatic'}));
};
return CoolPlugin;
});
.. index:: JavaScript, Backend, ext:t3editor
@@ -0,0 +1,39 @@
.. include:: /Includes.rst.txt
.. _breaking-68020:
============================================
Breaking: #68020 - Dropped DisableBigButtons
============================================
See :issue:`68020`
Description
===========
The TSconfig option `mod.web_layout.disableBigButtons` has been dropped, setting it
to 0 has no effect anymore.
Impact
======
The option is ignored and instances using this will not get the buttons rendered in
page module anymore.
These methods have been removed, but it is very unlikely an extension is affected:
* `TYPO3\CMS\Backend\View\PageLayoutView->linkRTEbutton()`
* `TYPO3\CMS\Backend\View\PageLayoutView->isRTEforField()`
* `TYPO3\CMS\Backend\View\PageLayoutView->getSpecConfForField()`
Affected Installations
======================
Instances that had User / Page TSconfig with this option may have a slightly
different Web -> Page view.
.. index:: PHP-API, Backend, TSConfig
@@ -0,0 +1,59 @@
.. include:: /Includes.rst.txt
.. _breaking-68092:
=================================================================
Breaking: #68092 - TCA: Remove wizard hideParent and _HIDDENFIELD
=================================================================
See :issue:`68092`
Description
===========
Wizards defined in `TCA` for display in `FormEngine` allowed to hide the "parent"
field with the configuration options `_HIDDENFIELD` on main wizard level, and with
the `hideParent` option for single wizards.
Both options have been dropped.
Impact
======
The configuration options have no effect anymore, the main field will show up.
Affected Installations
======================
A search through the TER code showed not a single extension that used the above options.
A 3rd party extension is affected if a `TCA` column configuration is used like:
.. code-block:: php
'aField' => array(
'config' => array(
...
'wizards' => array(
'_HIDDENFIELD' => TRUE,
'aWizard' => array(
'hideParent' => array(
...
),
),
),
),
),
Migration
=========
Wizards can not trigger that a main field is not rendered anymore. If this kind of functionality
is needed, it is recommended to register an own `renderType` in the `NodeFactory` for this
type of field instead to route the element rendering to an own class.
.. index:: TCA, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _breaking-68116:
===================================================
Breaking: #68116 - Drop RTE.userLinks functionality
===================================================
See :issue:`68116`
Description
===========
Drop RTE.userLinks functionality from the ElementBrowser. The option was broken since 6.0 and has been removed now.
Impact
======
The special option won't show up in the ElementBrowser anymore.
Affected Installations
======================
All installations which use the option `RTE.userLinks`
Migration
=========
Use the newly added Tabbing API to add your custom link selection tab.
.. index:: Backend, RTE
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-68131:
==========================================================
Breaking: #68131 - Streamline error and exception handling
==========================================================
See :issue:`68131`
Description
===========
It is not possible any more to change error and exception handling configuration in an ext_localconf.php of an extension.
Impact
======
Error or exception handling configuration overridden in ext_localonf.php files will not work any more.
Affected Installations
======================
All installations with extension that set error or exception handling configuration in ext_localconf.php files.
Migration
=========
Configure error and exception handling in LocalConfiguration.php or AdditionalConfiguration.php
.. index:: PHP-API, LocalConfiguration
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _breaking-68150:
=====================================
Breaking: #68150 - $GLOBALS['CLIENT']
=====================================
See :issue:`68150`
Description
===========
The initialization of the `$GLOBALS['CLIENT']` variable has been dropped.
Impact
======
Extensions that use `$GLOBALS['CLIENT']` will cause a PHP notice or may not function properly any more.
Affected Installations
======================
Installations with extensions that use `$GLOBALS['CLIENT']` are affected.
Migration
=========
Extensions can still use `GeneralUtility::clientInfo()` API to retrieve the same information.
.. index:: PHP-API
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-68178:
==========================================================================
Breaking: #68178 - Drop $GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype']
==========================================================================
See :issue:`68178`
Description
===========
Setting `$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype']` has been dropped without replacement.
Impact
======
Extensions that used this setting in forms may end up with an empty `enctype` attribute
in `HTML` `form` fields.
Affected Installations
======================
Extensions that rely on this variable being set.
Migration
=========
Substitute the variable access with `multipart/form-data`.
.. index:: LocalConfiguration, Backend
@@ -0,0 +1,48 @@
.. include:: /Includes.rst.txt
.. _breaking-68186:
===========================================================
Breaking: #68186 - Adjusted and removed methods in eID area
===========================================================
See :issue:`68186`
Description
===========
eID scripts now use Request and Response objects to retrieve and output data.
Due to adjustments of the Core eID scripts a few methods have been adjusted.
`ExtDirectEidController::routeAction` is now protected and has a changed signature.
The following methods have been removed:
* `ExtDirectEidController::actionIsAllowed()`
* `ExtDirectEidController::render()`
* `EidUtility::isEidRequest()`
* `EidUtility::getEidScriptPath()`
Additionally calling an non-existent eID key will result in a fatal error.
Impact
======
All third party code using those methods will cause a fatal PHP error.
Affected Installations
======================
All installations using third party code accessing one of the adjusted (or removed) methods.
Migration
=========
No replacement for the mentioned methods is provided. Consider migrating your eID scripts to the new PSR-7 compliant model.
.. index:: PHP-API, Frontend, Backend
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _breaking-68193:
===========================================================================================
Breaking: #68193 - ext:indexed_search Drop removeLoginpagesWithContentHash from Indexer.php
===========================================================================================
See :issue:`68193`
Description
===========
The method `\TYPO3\CMS\IndexedSearch\Indexer::removeLoginpagesWithContentHash()` was not used within the core since 6.0
and has been removed.
Impact
======
Calling `\TYPO3\CMS\IndexedSearch\Indexer::removeLoginpagesWithContentHash()` will throw a fatal error.
Affected Installations
======================
All installations with third party code using the mentioned method.
Migration
=========
No migration is available.
.. index:: PHP-API, ext:indexed_search
@@ -0,0 +1,39 @@
.. include:: /Includes.rst.txt
.. _breaking-68206:
===============================================================
Breaking: #68206 - Remove usage of typolist and typohead in RTE
===============================================================
See :issue:`68206`
Description
===========
The transformation for the tags `typolist` and `typohead` have been removed from the RTE.
The option and method `internalizeFontTags()` from RteHtmlParser have been removed.
Impact
======
The tags are not processed anymore by the RteHtmlParser.
Fonts are not internalized anymore.
Affected Installations
======================
All installations using the custom tags `typolist` and `typohead`.
All installations that use the method `internalizeFontTags()` will throw an fatal error.
Migration
=========
Substitute the tags by a tag `ul``or `header`.
Remove any usage of `internalizeFontTags()`
.. index:: PHP-API, RTE
@@ -0,0 +1,38 @@
.. include:: /Includes.rst.txt
.. _breaking-68243:
=========================================================
Breaking: #68243 - Move not used FrontendDocumentTemplate
=========================================================
See :issue:`68243`
Description
===========
Move unused FrontendDocumentTemplate to ext:compatibility6.
Impact
======
Installations still using FrontendDocumentTemplate require ext:compatibility6 to be installed.
Affected Installations
======================
Installations still using FrontendDocumentTemplate.
Migration
=========
Install ext:compatibility6 or adapt the code to not use the FrontendDocumentTemplate functionality.
Adapting the code is highly recommended.
.. index:: PHP-API, Frontend
@@ -0,0 +1,45 @@
.. include:: /Includes.rst.txt
.. _breaking-68276:
=====================================================
Breaking: #68276 - Remove ExtJS Quicktips if possible
=====================================================
See :issue:`68276`
Description
===========
The method `PageRenderer::enableExtJSQuickTips()`, which was used to enable ExtJS quicktips, has been removed.
In some places like RTE or workspaces the Quicktips are still in use, but will be removed as soon as possible.
Impact
======
All calls to the PHP method `PageRenderer::enableExtJSQuickTips()` will throw a fatal error.
Affected Installations
======================
Instances which make use of `PageRenderer::enableExtJSQuickTips()`.
Migration
=========
No migration, use bootstrap tooltips, which work out of the box as alternative.
Simple add `data-toggle="tooltip"` and `data-title="your tooltip"` to any element you want.
Example
-------
.. code-block:: html
<a href="#" data-toggle="tooltip" data-title="My very nice title">My Link</a>
.. index:: JavaScript, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _breaking-68321:
==========================================================
Breaking: #68321 - Move language and images in rtehtmlarea
==========================================================
See :issue:`68321`
Description
===========
All language files and images have been moved.
Impact
======
Labels and images may be not displayed if TypoScript from the sample files is used.
Affected Installations
======================
All installations that use the TypoScript settings from the provided sample files.
Migration
=========
Adjust the path to language and image files according the sample TypoScript files provided by the extension.
.. index:: PHP-API, TypoScript, RTE
@@ -0,0 +1,38 @@
.. include:: /Includes.rst.txt
.. _deprecation-50349:
===================================================================
Deprecation: #50349 - Reduce SQL queries of page tree in workspaces
===================================================================
See :issue:`50349`
Description
===========
The performance of the calculation of versions of a record has been improved. Therefore the method
`\TYPO3\CMS\Backend\Utility::countVersionsOfRecordsOnPage()` has been marked as deprecated and is being replaced with
`\TYPO3\CMS\Workspaces\Service\WorkspaceService::hasPageRecordVersions()`.
Impact
======
All calls to the PHP method will throw a deprecation warning.
Affected Installations
======================
Instances which make use of `\TYPO3\CMS\Backend\Utility::countVersionsOfRecordsOnPage()`
Migration
=========
Use `\TYPO3\CMS\Workspaces\Service\WorkspaceService::hasPageRecordVersions()` instead.
.. index:: PHP-API, Backend, ext:workspaces
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _deprecation-63603-1668719172:
============================================================================
Deprecation: #63603 - ExtendedFileUtility::$dontCheckForUnique is deprecated
============================================================================
See :issue:`63603`
Description
===========
The ExtendedFileUtility `$dontCheckForUnique` flag has been marked as deprecated and replaced by
`$fileUtility->setExistingFileConflictMode()` with the possible options of the `\TYPO3\CMS\Core\Resource\DuplicationBehavior` enumeration.
Impact
======
Extensions still using `ExtendedFileUtility::$dontCheckForUnique` will throw a deprecation warning.
Affected Installations
======================
All installations with extensions that use `ExtendedFileUtility::$dontCheckForUnique`.
Migration
=========
Change the `$fileUtility->dontCheckForUnique = TRUE` to `$fileUtility->setExistingFileConflictMode(DuplicationBehavior::REPLACE)`.
.. index:: PHP-API, FAL
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _deprecation-63603:
==========================================================================================================
Deprecation: #63603 - FileController and FileListController overwriteExistingFiles changed to string value
==========================================================================================================
See :issue:`63603`
Description
===========
The GET/POST param to tell the FileController and FileListController whether to override a file or not switched from a bool
value to a string with the possibilities of the `\TYPO3\CMS\Core\Resource\DuplicationBehavior` enumeration.
Impact
======
Extensions still using `overwriteExistingFiles = 1` will throw a deprecation warning.
Affected Installations
======================
All installations with extensions that use the BE upload functionality and supply the file override option.
Migration
=========
Change the `<input name="overwriteExistingFiles" value="1">` to `<input name="overwriteExistingFiles" value="replace">`.
.. index:: PHP-API, FAL, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _deprecation-63974:
==============================================================
Deprecation: #63974 - Deprecate CSS compressor callback method
==============================================================
See :issue:`63974`
Description
===========
The callback method `compressCssPregCallback()` as defined in
EXT:core/Classes/Resource/ResourceCompressor.php has been marked as deprecated due to the overhauled regular expressions.
Impact
======
Usage of the mentioned method is discouraged and will break as of CMS 8.
Affected installations
======================
All installations or extensions using the `compressCssPregCallback()` callback method.
Migration
=========
No migration possible for the callback method.
.. index:: PHP-API
@@ -0,0 +1,40 @@
.. include:: /Includes.rst.txt
.. _deprecation-65790:
========================================================
Deprecation: #65790 - Remove pages.storage_pid and logic
========================================================
See :issue:`65790`
Description
===========
The DB field "pages.storage_pid" and its TCA definition have been moved to the compatibility6 extension as the field
and its functionality is discouraged.
Additionally the method `getStorageSiterootPids()` within the PHP class `TypoScriptFrontendController` has been marked
as deprecated. The method is currently only used if the Frontend Login plugin is used without setting
a specific folder where the fe_users records are stored in.
Impact
======
Any usage of this field in any TypoScript, page or the usage of the method mentioned above in any third-party
extension will only work if the compatibility6 extension is installed.
The Frontend Login functionality will throw a deprecation warning if the TypoScript option
`plugin.tx_felogin.storagePid` (via TypoScript directly or the flexform configuration within the plugin) is not set.
Affected installations
======================
All installations making use of `storage_pid` within the pages database table as well as installations using
the Frontend Login plugin without having the storagePid option set.
.. index:: PHP-API, Database, TypoScript, Frontend
@@ -0,0 +1,31 @@
.. include:: /Includes.rst.txt
.. _deprecation-66904:
====================================================================
Deprecation: #66904 - $disable Option in PageRepository->getExtURL()
====================================================================
See :issue:`66904`
Description
===========
The second parameter `$disable` within `PageRepository->getExtURL()` has been marked as deprecated.
Affected Installations
======================
Any installation using the method in a third-party extension above with using the second parameter set to
`true` will throw a deprecation warning.
Migration
=========
Check if redirects are enabled before the actual call to `PageRepository->getExtURL()` in a third-party extension.
.. index:: PHP-API, Frontend
@@ -0,0 +1,33 @@
.. include:: /Includes.rst.txt
.. _deprecation-67288:
==========================================================================
Deprecation: #67288 - Deprecate Dbal\DatabaseConnection::MetaType() method
==========================================================================
See :issue:`67288`
Description
===========
The following public function has been marked as deprecated as the bugfix requires a signature change:
* `Dbal\DatabaseConnection->MetaType()`
Impact
======
Using this function will throw a deprecation warning. Due to missing information the field type cache will
be bypassed and the DBMS will be queried for the necessary information on each call.
Migration
=========
Switch to `getMetadata()` and the field name for which you need the ADOdb MetaType information.
.. index:: PHP-API, Database, ext:dbal
@@ -0,0 +1,47 @@
.. include:: /Includes.rst.txt
.. _deprecation-67471:
========================================
Deprecation: #67471 - Deprecate init.php
========================================
See :issue:`67471`
Description
===========
In order to move all unneeded files from typo3/, the often used init.php has been deprecated in favor of using the
bootstrap initialization code directly in the TYPO3 Backend.
Impact
======
All entry points from third-party extensions using init.php will now throw a deprecation warning.
Affected Installations
======================
All instances having extensions that include init.php when not using the mod.php for modules or ajax calls.
Migration
=========
Use the following code instead of the init.php inclusion if you still need custom entry points:
.. code-block:: php
define('TYPO3_MODE', 'BE');
require __DIR__ . '/sysext/core/Classes/Core/Bootstrap.php';
\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->run('typo3/');
If using a module, use the mod.php to register your own module.
.. index:: PHP-API, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _deprecation-67506:
====================================================
Deprecation: #67506 - Deprecate IconUtility::getIcon
====================================================
See :issue:`67506`
Description
===========
The method `IconUtility::getIcon()` which was used for generating overlaid icons for records has been marked as deprecated.
Impact
======
All calls to the PHP method will throw a deprecation warning.
Affected Installations
======================
Instances with third-party extensions modifying the TYPO3 Backend with a custom module or hook and calling `IconUtility::getIcon()`.
Migration
=========
Use `IconUtility::getSpriteIconForRecord()` instead.
.. index:: PHP-API, Backend
@@ -0,0 +1,64 @@
.. include:: /Includes.rst.txt
.. _deprecation-67670:
====================================================================================
Deprecation: #67670 - Deprecate custom singleton logic in GeneralUtility::getUserObj
====================================================================================
See :issue:`67670`
Description
===========
The functionality of instantiating classes only once by calling `GeneralUtility::getUserObj($className)` multiple times
while having a `$className` that is prepended with an ampersand ("&") has been marked as deprecated.
An example of the deprecated behaviour in the ext_localconf.php of an extension:
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['indexed_search']['pi1_hooks']['getResultRows_SQLpointer'] = '&Acme\\MyExtension\\Hooks\\MysqlFulltextIndexHook';
Impact
======
Any calls to `GeneralUtility::getUserObj()` with a prefixed ampersand will throw a deprecation message.
Affected Installations
======================
TYPO3 Instances with extensions that use `getUserObj()` themselves and/or use hooks built with `getUserObj()` and use references.
Migration
=========
Check if the classes that hook into certain parts of your custom extensions really need to be referenced / instantiated once.
If so, implement the `SingletonInterface` of the TYPO3 Core, so the underlying function `GeneralUtility::makeInstance()`
will register the SingletonInterface only once.
The modified example from above now looks like this:
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['indexed_search']['pi1_hooks']['getResultRows_SQLpointer'] = \Acme\MyExtension\Hooks\MysqlFulltextIndexHook::class;
While the class itself implements the SingletonInterface of the TYPO3 Core to only be instantiated once during a single request:
.. code-block:: php
<?php
namespace \Acme\MyExtension\Hooks;
class MysqlFulltextIndexHook implements \TYPO3\CMS\Core\Core\SingletonInterface {
...
}
.. index:: PHP-API
@@ -0,0 +1,77 @@
.. include:: /Includes.rst.txt
.. _deprecation-67737:
==================================================
Deprecation: #67737 - TCA: Drop additional palette
==================================================
See :issue:`67737`
Description
===========
The `showitem` string of `TCA` `types` allowed to define an "additional palette" as third
semicolon separated name of a field. Such a palette was then rendered after the main field.
This handling has been dropped and existing "additional palettes" were migrated to a "normal" palette definition
directly after the field.
Before:
.. code-block:: php
'types' => array(
'aType' => array(
'showitem' => 'aField;aLabel;anAdditionalPaletteName',
),
),
The behavior before was: If the field `aField` is rendered, then the
palette `anAdditionalPaletteName` is rendered, too. This functionality has been dropped, the migrated field now looks
like this:
.. code-block:: php
'types' => array(
'aType' => array(
'showitem' => 'aField;aLabel, --palette--;;anAdditionalPaletteName',
),
),
A casual field name in `showitem` now only has a label override as additional
information, like `aField;aLabel`, while a palette is referenced as
`--palette--;aLabel;paletteName`.
Impact
======
All extensions that use "additional palette" syntax are migrated to the new syntax, but will
throw a deprecation message.
The "additional palette" handling was sometimes misused as "poor-mans-access-control":
If access to the main field was not allowed, the palette fields were not rendered either. This
changed, the main field and the palette are decoupled, it may happen that additional fields
are now rendered for users that should not have access to it. Adapting the `exclude` config
definition of the palette fields and user or group access records is necessary in those cases.
Affected Installations
======================
Extensions that use the "additional palette" handling.
Migration
=========
An automatic migration is in place and logged to `typo3conf/deprecation_*`. The migration code
will be dropped with TYPO3 CMS 8, a manual fix of the according `showitem` field is required,
the deprecation log gives detailed information on how the definition should look like.
.. index:: TCA, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _deprecation-67769:
=========================================================
Deprecation: #67769 - Deprecate QueryGenerator::formatQ()
=========================================================
See :issue:`67769`
Description
===========
The method `QueryGenerator::formatQ()` which was used to format a query string, has been marked as deprecated.
Impact
======
All calls to the PHP method will throw a deprecation warning.
Affected Installations
======================
Instances which make use of `QueryGenerator::formatQ()`.
Migration
=========
No migration, use `htmlspecialchars` as alternative.
.. index:: PHP-API, Backend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _deprecation-67790:
==========================================================
Deprecation: #67790 - Deprecate QueryGenerator::JSbottom()
==========================================================
See :issue:`67790`
Description
===========
The method `QueryGenerator::JSbottom()` which was used to append JavaScript code has been marked as deprecated.
Impact
======
All calls to the PHP method will throw a deprecation warning.
Affected Installations
======================
Instances which make use of `QueryGenerator::JSbottom()`.
Migration
=========
No migration, use requireJS modules and register the module through `pageRenderer`.
.. index:: PHP-API, Backend, JavaScript
@@ -0,0 +1,33 @@
.. include:: /Includes.rst.txt
.. _deprecation-67932:
===========================================================
Deprecation: #67932 - Deprecated old rsaauth encryption API
===========================================================
See :issue:`67932`
Description
===========
The rsaauth API has been rebuilt to be more generic. Therefore the Ajax Handler `BackendLogin::getRsaPublicKey()` has
been marked as deprecated and the eID script `FrontendLoginRsaPublicKey` has been removed.
Affected Installations
======================
Any installation using one of the entry points above in a third-party extension.
Migration
=========
There is no reason to use the entry points on your own anymore. Please update your scripts to use the new rsaauth API.
For backend requests you should use the provided ajax handler `RsaEncryption::getRsaPublicKey()`.
For frontend request you should use the provided eID script `RsaPublicKeyGenerationController`.
.. index:: PHP-API, Backend, ext:rsaauth
@@ -0,0 +1,54 @@
.. include:: /Includes.rst.txt
.. _deprecation-67991:
=====================================
Deprecation: #67991 - Removed ext:cms
=====================================
See :issue:`67991`
Description
===========
Extension `cms` has been removed. Most functionality has been moved to extension `frontend` with version 6.0 already.
The rest of the files have now been moved to other extensions, extension `cms` does not exist anymore.
Impact
======
Language files from EXT:cms are moved to different places into the core. `LLL:EXT:cms/...` references are
rewritten dynamically to the new file locations, but this fallback layer is subject to be removed with CMS 8.
Third party extensions that define a dependency to extension `cms` will get their dependency rewritten to `core`
on the fly during extension installation as a compatibility layer.
Affected Installations
======================
All 3rd party extensions using language labels from extension `cms` or defining a dependency to extension `cms`
in `ext_emconf.php`.
Migration
=========
Update the dependency constraint in `ext_emconf.php` of the affected extension. A typical substitution is
a dependency to extension `frontend`.
Move the following references to the new location of the language file:
* typo3/sysext/cms/web_info/locallang.xlf -> typo3/sysext/frontend/Resources/Private/Language/locallang_webinfo.xlf
* typo3/sysext/cms/locallang_ttc.xlf -> typo3/sysext/frontend/Resources/Private/Language/locallang_ttc.xlf
* typo3/sysext/cms/locallang_tca.xlf -> typo3/sysext/frontend/Resources/Private/Language/locallang_tca.xlf
* typo3/sysext/cms/layout/locallang_db_new_content_el.xlf -> typo3/sysext/backend/Resources/Private/Language/locallang_db_new_content_el.xlf
* typo3/sysext/cms/layout/locallang.xlf -> typo3/sysext/backend/Resources/Private/Language/locallang_layout.xlf
* typo3/sysext/cms/layout/locallang_mod.xlf -> typo3/sysext/backend/Resources/Private/Language/locallang_mod.xlf
* typo3/sysext/cms/locallang_csh_webinfo.xlf -> typo3/sysext/frontend/Resources/Private/Language/locallang_csh_webinfo.xlf
* typo3/sysext/cms/locallang_csh_weblayout.xlf -> typo3/sysext/frontend/Resources/Private/Language/locallang_csh_weblayout.xlf
.. index:: PHP-API, Frontend
@@ -0,0 +1,36 @@
.. include:: /Includes.rst.txt
.. _deprecation-68074:
=========================================================
Deprecation: #68074 - Deprecate getPageRenderer() methods
=========================================================
See :issue:`68074`
Description
===========
The following public functions have been marked as deprecated as the instance they return is a singleton:
* `TYPO3\CMS\Backend\Controller\BackendController::getPageRenderer()`
* `TYPO3\CMS\Backend\Template\DocumentTemplate::getPageRenderer()`
* `TYPO3\CMS\Backend\Template\FrontendDocumentTemplate::getPageRenderer()`
* `TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::getPageRenderer()`
Impact
======
Using one of these functions will throw a deprecation message.
Migration
=========
As the PageRenderer implements a SingletonInterface you can get your own (shared) instance with
`\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Page\PageRenderer::class)` and work with that one.
.. index:: PHP-API
@@ -0,0 +1,51 @@
.. include:: /Includes.rst.txt
.. _deprecation-68098:
======================================================
Deprecation: #68098 - Deprecate GeneralUtility methods
======================================================
See :issue:`68098`
Description
===========
The following methods within `GeneralUtility` have been marked as deprecated and will be removed in TYPO3 CMS v8.
.. code-block:: php
GeneralUtility::modifyHTMLColor()
GeneralUtility::modifyHTMLColorAll()
GeneralUtility::isBrokenEmailEnvironment()
GeneralUtility::normalizeMailAddress()
GeneralUtility::formatForTextarea()
GeneralUtility::getThisUrl()
GeneralUtility::cleanOutputBuffers()
The functionality `formatForTextarea()` was used in the older days to actually support IE4 and Netscape 3 properly
and can now safely be exchanged by `htmlspecialchars()`.
Impact
======
All extensions using these methods directly will throw a deprecation message.
Affected Installations
======================
Installations with extensions that use the methods above handling.
Migration
=========
Use corresponding functionality from `getIndpEnv()` instead of `getThisUrl()`.
For the other methods, you can re-implement the functionality yourself in your extension where needed.
.. index:: PHP-API
@@ -0,0 +1,44 @@
.. include:: /Includes.rst.txt
.. _deprecation-68122:
==========================================================
Deprecation: #68122 - Deprecate GeneralUtility::readLLfile
==========================================================
See :issue:`68122`
Description
===========
Method `GeneralUtility::realLLfile()` was just a wrapper around LocalizationFactory
and has been marked as deprecated.
Impact
======
Extensions using `realLLfile()` to parse localization files should switch to
an instance of `LocalizationFactory`.
Affected Installations
======================
Extensions using `GeneralUtility::readLLfile()`
Migration
=========
A typical call now should look like:
.. code-block:: php
/** @var $languageFactory \TYPO3\CMS\Core\Localization\LocalizationFactory */
$languageFactory = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Localization\LocalizationFactory::class);
$languageFactory->getParsedData($fileToParse, $language, $renderCharset, $errorMode);
.. index:: PHP-API
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _deprecation-68141:
====================================
Deprecation: #68141 - typo3/ajax.php
====================================
See :issue:`68141`
Description
===========
The ajax.php entry-point has been marked as deprecated. All AJAX requests in the Backend using the Ajax API are
not affected as they automatically use index.php.
Impact
======
All extensions directly linking to typo3/ajax.php will throw a deprecation warning.
Affected Installations
======================
Installations with custom extensions that call typo3/ajax.php without using proper API calls from `BackendUtility`.
Migration
=========
Use `BackendUtility::getAjaxUrl()`.
.. index:: PHP-API, Backend
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _deprecation-68183:
===================================
Deprecation: #68183 - typo3/mod.php
===================================
See :issue:`68183`
Description
===========
The mod.php entry-point has been marked as deprecated. All Backend Module requests in the Backend using the Module Url API are
not affected as they automatically use index.php.
Impact
======
All extensions directly linking to typo3/mod.php will throw a deprecation warning.
Affected Installations
======================
Installations with custom extensions that call typo3/mod.php without using proper API calls from `BackendUtility`.
Migration
=========
Use `BackendUtility::getModuleUrl()`.
.. index:: PHP-API, Backend
@@ -0,0 +1,26 @@
.. include:: /Includes.rst.txt
.. _feature-20194:
=======================================================================
Feature: #20194 - Configuration for displaying the "Save & View" button
=======================================================================
See :issue:`20194`
Description
===========
The "Save & View" button is configurable by TSConfig "TCEMAIN.preview.disableButtonForDokType" (CSV of "doktype" IDs) to
disable the button for custom page "doktypes". The default value is set in the PHP implementation: "254, 255, 199"
(Storage Folder, Recycler and Menu Seperator)
Impact
======
The "Save & View" button is no longer displayed in folders and recycler pages.
.. index:: TSConfig, Backend
@@ -0,0 +1,49 @@
.. include:: /Includes.rst.txt
.. _feature-22175:
==============================================================
Feature: #22175 - Support IEC/SI units in file size formatting
==============================================================
See :issue:`22175`
Description
===========
Size formatting supports two keywords additionally to the list of labels:
- iec: uses the Ki, Mi, etc prefixes and binary base (power of two, 1024)
- si: uses the k, M, etc prefixes and decimal base (power of ten, 1000)
The default formatting is set to "iec" base size calculations on the same base as before.
The fractional part, when present, is changed to two numbers instead of only one.
The list of labels is still supported and defaults to using binary base. It is also
possible to explicitly choose between binary or decimal base when it is used.
Impact
======
Default formatted output of file sizes changes, see example below.
TypoScript `stdWrap` property `bytes` defaults to a different label set.
`bytes.labels = iec`, a specifically defined label string with pipe separated
label keywords is obsolete, but can still be used if required. The keyword
`iec` resolves to ` | Ki| Mi| Gi| Ti| Pi| Ei| Zi| Yi` (binary base) and `si` resolves
to ` | k| M| G| T| P| E| Z| Y` (based on ten).
Example
=======
.. code-block:: php
echo GeneralUtility::formatSize(85123);
// => Before "83.1 K"
// => Now "83.13 Ki"
.. index:: PHP-API, Backend
@@ -0,0 +1,29 @@
.. include:: /Includes.rst.txt
.. _feature-33071:
==============================================================================
Feature: #33071 - Add the http header "Content-Language" when rendering a page
==============================================================================
See :issue:`33071`
Description
===========
By default a header "Content-language: XX" is sent where "XX" is the iso code of the
sys_language_content (in the sys_language record, it is represented by the sys_language_isocode field),
if that is properly defined by the sys_language record representing the sys_language_uid.
Setting "config.disableLanguageHeader" disables that.
Impact
======
By default in new and existing installations a header "Content-language: XX" is sent where "XX" is the iso code of the
sys_language_content if that is properly defined by the sys_language record representing the sys_language_uid.
You must set "config.disableLanguageHeader" to disable that and get previous behavior (no header).
.. index:: TypoScript, Frontend
@@ -0,0 +1,31 @@
.. include:: /Includes.rst.txt
.. _feature-34922:
==========================================================================
Feature: #34922 - Allow .ts file extension for static TypoScript templates
==========================================================================
See :issue:`34922`
Description
===========
Only these TypoScript file names were allowed:
- constants.txt
- setup.txt
- include_static_files.txt
The ts file extension has been allowed for constants and setup and is prioritised over txt.
Impact
======
There is a little performance impact when loading the TypoScript from scratch like in the backend and frontend without
cache as the new file extension is always tested.
.. index:: Frontend, TypoScript
@@ -0,0 +1,19 @@
.. include:: /Includes.rst.txt
.. _feature-43984:
============================================================================
Feature: #43984 - Add stdWrap functionality to TreatIdAsReference TypoScript
============================================================================
See :issue:`43984`
Description
===========
The new TypoScript property "treatIdAsReference" for the getImgResource object
can now be used with stdWrap properties.
.. index:: Frontend, TypoScript
@@ -0,0 +1,34 @@
.. include:: /Includes.rst.txt
.. _feature-45725:
=========================================================================
Feature: #45725 - Added recursive option to folder based file collections
=========================================================================
See :issue:`45725`
Description
===========
Folder based file collections have now an option to fetch all files recursively for
the given folder. The option is also available in the TypoScript Object `FILES`.
Usage:
.. code-block:: typoscript
filecollection = FILES
filecollection {
folders = 1:images/
folders.recursive = 1
renderObj = IMAGE
renderObj {
file.import.data = file:current:uid
}
}
.. index:: TypoScript, Frontend, FAL
@@ -0,0 +1,25 @@
.. include:: /Includes.rst.txt
.. _feature-48947:
===========================================
Feature: #48947 - Avatars for backend users
===========================================
See :issue:`48947`
Description
===========
To improve the user experience in collaborative content editing, avatars for backend users have been introduced.
Avatars will be either user defined by uploading a custom image or generated by the system.
Impact
======
The avatars will be shown in the topbar, users list and other places.
.. index:: Backend
@@ -0,0 +1,28 @@
.. include:: /Includes.rst.txt
.. _feature-56133:
========================================================
Feature: #56133 - Replace file feature for fal file list
========================================================
See :issue:`56133`
Description
===========
Now its possible to replace files for a specific record at the extended view in the FAL record list.
Impact
======
Provides a new button "replace" at the extended view in FAL equal to DAM. It's possible to replace a file
* with a new one -> old file will be overwritten; identifier of the file object will be kept
* with a new one -> old file will be deleted; identifier of the file object will be changed to the new filename
The file replacing also respects unique file names.
.. index:: FAL, Backend
@@ -0,0 +1,27 @@
.. include:: /Includes.rst.txt
.. _feature-56644:
===============================================================
Feature: #56644 - Hook for InlineRecordContainer::checkAccess()
===============================================================
See :issue:`56644`
Description
===========
Hook to post-process `InlineRecordContainer::checkAccess` result.
`InlineRecordContainer::checkAccess` is used to check the access to related inline records. It's implemented in the
same way as the hook $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/alt_doc.php']['makeEditForm_accessCheck']
in the EditDocumentController.
Register it like this:
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms_inline.php']['checkAccess'][] = 'My\\Package\\HookClass->hookMethod';
.. index:: PHP-API, Backend
@@ -0,0 +1,26 @@
.. include:: /Includes.rst.txt
.. _feature-59231:
============================================================================
Feature: #59231 - Hook for AbstractUserAuthentication::checkAuthentication()
============================================================================
See :issue:`59231`
Description
===========
Hook to post-process login failures in `AbstractUserAuthentication::checkAuthentication`.
By default the process sleeps for five seconds in case of failing. By using this hook, different solutions for
brute force protection can be implemented.
Register like this:
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['postLoginFailureProcessing'][] = 'My\\Package\\HookClass->hookMethod';
.. index:: PHP-API, Backend
@@ -0,0 +1,29 @@
.. include:: /Includes.rst.txt
.. _feature-59384:
===================================================
Feature: #59384 - XML parser options for xml2tree()
===================================================
See :issue:`59384`
Description
===========
`GeneralUtility::xml2tree()` gets an optional parameter: an array that can hold options for the parser.
Those will simply be passed through to the PHP-function xml_parser_set_option().
.. code-block:: php
GeneralUtility::xml2tree($xmlData, 999, array(XML_OPTION_SKIP_WHITE => 1));
Impact
======
It's just an optional parameter. If you don't specify it, simply no additional initialisation of the XML-parser will be done.
.. index:: PHP-API, Backend
@@ -0,0 +1,26 @@
.. include:: /Includes.rst.txt
.. _feature-59570:
=======================================================
Feature: #59570 - Add description-field for file mounts
=======================================================
See :issue:`59570`
Description
===========
A new field "description" has been added to the table sys_filemounts.
With the new field it is possible to give a short description what a
certain file mount should be used for or which documents it contains, etc.
Impact
======
The new field is optional and can be used in all projects.
.. index:: TCA, Database, Backend
@@ -0,0 +1,20 @@
.. include:: /Includes.rst.txt
.. _feature-61308:
=======================================================
Feature: #61308 - ext:form allows placeholder attribute
=======================================================
See :issue:`61308`
Description
===========
System extension `form` allows a placeholder attribute in textfields
by adding it in a form configuration. However, there is no option to add
placeholder using the form wizard, yet.
.. index:: ext:form
@@ -0,0 +1,71 @@
.. include:: /Includes.rst.txt
.. _feature-61903:
=========================================================
Feature: #61903 - PageTS dataprovider for backend layouts
=========================================================
See :issue:`61903`
Description
===========
Over the last year, several extensions appeared on TER that implemented the very same basic feature:
Deploying backend layouts without database records by providing them via PageTS.
Implement a generic PageTS provider for backend layouts to unify those approaches and to make backend layouts reusable
across installations.
Impact
======
It is now possible to define backend layouts via PageTSConfig on every page.
Example
-------
.. code-block:: typoscript
mod {
web_layout {
BackendLayouts {
exampleKey {
title = Example
config {
backend_layout {
colCount = 1
rowCount = 2
rows {
1 {
columns {
1 {
name = LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos.I.3
colPos = 3
colspan = 1
}
}
}
2 {
columns {
1 {
name = Main
colPos = 0
colspan = 1
}
}
}
}
}
}
icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
}
}
}
}
.. index:: TSConfig, Backend
@@ -0,0 +1,71 @@
.. include:: /Includes.rst.txt
.. _feature-64200:
==================================================
Feature: #64200 - Allow individual content caching
==================================================
See :issue:`64200`
Description
===========
The `stdWrap.cache.` property is now available as first-class function to all
content objects. This skips the rendering even for content objects that evaluate
`stdWrap` after rendering (e.g. `COA`).
Usage:
.. code-block:: typoscript
page = PAGE
page.10 = COA
page.10 {
cache.key = coaout
cache.lifetime = 60
#stdWrap.cache.key = coastdWrap
#stdWrap.cache.lifetime = 60
10 = TEXT
10 {
cache.key = mycurrenttimestamp
cache.lifetime = 60
data = date : U
strftime = %H:%M:%S
noTrimWrap = |10: | |
}
20 = TEXT
20 {
data = date : U
strftime = %H:%M:%S
noTrimWrap = |20: | |
}
}
The commented part is `stdWrap.cache.` property available since 4.7,
that does not stop the rendering of `COA` including all sub-cObjects.
Additionally, stdWrap support is added to key, lifetime and tags.
Impact
======
If you've previously used the `cache.` property in your custom cObject,
this will now fail, because `cache.` is unset to avoid double caching.
You are encouraged to rely on the core methods for caching cObjects or
rename your property.
`stdWrap.cache` continues to exists and can be used as before. However
the top level `stdWrap` of certain cObjects (e.g. `TEXT` cObject)
will not evaluate `cache.` as part of `stdWrap`, but before starting
the rendering of the cObject. In conjunction the storing will happen
after the `stdWrap` processing right before the content is returned.
Top level `cache.` will not evaluate the hook
`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['stdWrap_cacheStore']`
any more.
.. index:: PHP-API, TypoScript, Frontend
@@ -0,0 +1,29 @@
.. include:: /Includes.rst.txt
.. _feature-65550:
======================================================================
Feature: #65550 - Make table display order configurable in List module
======================================================================
See :issue:`65550`
Description
===========
The new `PageTSconfig` configuration option `mod.web_list.tableDisplayOrder` has been added
for the List module to allow flexible configuration of the order in which tables are displayed.
The keywords `before` and `after` can be used to specify an order relative to other table names.
Example:
.. code-block:: typoscript
mod.web_list.tableDisplayOrder.<tableName> {
before = <tableA>, <tableB>, ...
after = <tableA>, <tableB>, ...
}
.. index:: TSConfig, Backend
@@ -0,0 +1,27 @@
.. include:: /Includes.rst.txt
.. _feature-65698:
===========================================================================
Feature: #65698 - Additional localization files in backend workspace module
===========================================================================
See :issue:`65698`
Description
===========
The AdditionalResourceService of the workspace module in the backend is extended
by the functionality to register custom localization files that are forwarded to
the PageRenderer in the end. This way, labels can be accessed in JavaScript using
the TYPO3.l10n.localize() function for instance.
.. code-block:: php
\TYPO3\CMS\Workspaces\Service\AdditionalResourceService::getInstance()->addLocalizationResource(
'EXT:my_extension/Resources/Private/Language/locallang.xlf'
);
.. index:: PHP-API, Backend, ext:workspaces
@@ -0,0 +1,37 @@
.. include:: /Includes.rst.txt
.. _feature-66070:
========================================================
Feature: #66070 - Configure anchor for pagination widget
========================================================
See :issue:`66070`
Description
===========
This feature allows to add a key "section" to the configuration of a fluid pagination widget. The anchor gets appended
to every link of the pagination widget. The "widget.link" viewHelper used by the pagination widget already supports this.
Examples
--------
The following example will render the page browser having a section parameter "#archive" appended to every link
.. code-block:: html
<f:widget.paginate objects="{plantpestWarnings}" as="paginatedWarnings" configuration="{section: 'archive', itemsPerPage: 10, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 10}">
[...]
</f:widget.paginate>
Impact
======
If the "section" attribute does not get specified or no configuration is supplied at all then no section parameter
(#section) will get appended to the links and the pagination widget behaves as usual.
.. index:: Fluid
@@ -0,0 +1,27 @@
.. include:: /Includes.rst.txt
.. _feature-67228:
======================================================================
Feature: #67228 - Emit Signal when an IndexRecord is marked as missing
======================================================================
See :issue:`67228`
Description
===========
The new signal `recordMarkedAsMissing` is emitted when the FAL indexer encounters a sys_file record
which does not have a corresponding filesystem entry and marks it as missing.
It passes the sys_file record uid.
Impact
======
This can be used by extensions that provide or extend file management capabilities
(versioning, synchronizations, recovery etc).
.. index:: PHP-API, FAL, Backend
@@ -0,0 +1,27 @@
.. include:: /Includes.rst.txt
.. _feature-67290:
===============================================================================
Feature: #67290 - DBAL: DBMS specific conversion between Meta/MySQL field types
===============================================================================
See :issue:`67290`
Description
===========
DBAL did a generic translation between MySQL native and DBMS specific field types.
The translation of field types has been enhanced to allow more specific conversions per DBMS driver.
Overrides for PostgreSQL have been added with optimized mappings for BLOB, SERIAL, DOUBLE and INTEGER columns.
Impact
======
Running PostgreSQL, the Upgrade Wizard in the Install Tool will show a lot of field alterations as the optimized mappings will be used.
.. index:: Database, ext:dbal
@@ -0,0 +1,56 @@
.. include:: /Includes.rst.txt
.. _feature-67293:
=============================================
Feature: #67293 - Dependency ordering service
=============================================
See :issue:`67293`
Description
===========
In many cases it is necessary to establish a sorted list of items from a set of "dependencies".
The ordered list is then used to execute actions in the given order.
Some examples from the Core are:
- Hook execution order
- Extension loading order
- Listing of menu items
The dependencies are therefore specified in a relative manner, outlining that an item has to be executed/loaded/listed
"before" or "after" some other item.
Typical use case:
.. code-block:: php
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['someExt']['someHook'][<some id>] = [
'handler' => someClass::class,
'runBefore' => [ <some other ID> ],
'runAfter' => [ ... ],
...
];
In order to evaluate such relative dependencies to finally have a sorted list for `['someHook']`, we introduced a new
helper class `\TYPO3\CMS\Core\Service\DependencyOrderingService`, which does the evaluation work for you.
Example usage:
.. code-block:: php
$hooks = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['someExt']['someHook'];
$sortedHooks = GeneralUtility:makeInstance(DependencyOrderingService::class)->orderByDependencies($hooks , 'runBefore', 'runAfter');
`$sortedHooks` will then contain the content of `$hooks`, but sorted according to the dependencies.
The `DependencyOrderingService` class also detects cycles in the dependencies and will throw an Exception in case
conflicting dependencies have been defined.
In case the initial list does not specify a dependency for an item, those items will be put last in the final sorted list.
.. index:: PHP-API
@@ -0,0 +1,63 @@
.. include:: /Includes.rst.txt
.. _feature-67360:
=========================================================================
Feature: #67360 - Custom attribute name and multiple values for meta tags
=========================================================================
See :issue:`67360`
Description
===========
`page.meta` is extended to support different attribute names like `property` used for OG tags. You may also supply
multiple values for one name, which results in multiple meta tags with the same name to be rendered.
See http://ogp.me/ for more information about the Open Graph protocol and its properties.
.. code-block:: typoscript
page {
meta {
X-UA-Compatible = IE=edge,chrome=1
X-UA-Compatible.attribute = http-equiv
keywords = TYPO3
og:site_name = TYPO3
og:site_name.attribute = property
description = Inspiring people to share Normal
dc\.description = Inspiring people to share [DC tags]
og:description = Inspiring people to share [OpenGraph]
og:description.attribute = property
og:locale = en_GB
og:locale.attribute = property
og:locale:alternate {
attribute = property
value {
1 = fr_FR
2 = de_DE
}
}
refresh = 5; url=http://example.com/
refresh.attribute = http-equiv
}
}
Impact
======
Meta tags with a different attribute name are supported now like the Open Graph meta tags.
.. index:: TypoScript, Frontend
@@ -0,0 +1,28 @@
.. include:: /Includes.rst.txt
.. _feature-67545:
========================================================
Feature: #67545 - AJAX call to check whether file exists
========================================================
See :issue:`67545`
Description
===========
A Backend AJAX call to check whether a file exists has been added. The call needs two parameters to work properly.
Impact
======
The method can be called with `TYPO3.settings.ajaxUrls['file_exists']`.
The parameters `fileName` and `fileTarget` are required:
* fileName: Name of the file
* fileTarget: Combined identifier of target directory for the file
.. index:: JavaScript, Backend
@@ -0,0 +1,24 @@
.. include:: /Includes.rst.txt
.. _feature-67574:
============================================================
Feature: #67574 - Display online status in backend user list
============================================================
See :issue:`67574`
Description
===========
A badge that shows the online status of a backend user has been integrated.
Impact
======
The badge will be shown next to the username in the backend user list.
.. index:: Backend, ext:beuser
@@ -0,0 +1,26 @@
.. include:: /Includes.rst.txt
.. _feature-67578:
=========================================================
Feature: #67578 - Add description-field for backend-users
=========================================================
See :issue:`67578`
Description
===========
A new field "description" has been added to the table be_users.
With the new field it is possible to give a short description
about a user, like there is already for be_groups.
Impact
======
The new field is optional and can be used in all projects.
.. index:: Database, TCA, Backend
@@ -0,0 +1,28 @@
.. include:: /Includes.rst.txt
.. _feature-67603:
==========================================================
Feature: #67603 - Introduce TCA > ctrl > descriptionColumn
==========================================================
See :issue:`67603`
Description
===========
To annotate database table column fields as internal description for editors and admins a new setting
for TCA is introduced. Setting is called `['TCA'][$tableName]['ctrl']['descriptionColumn']` and holds column name.
This description should only displayed in the backend to guide editors and admins.
Usage of descriptionColumn is added under different issues.
Impact
======
None, since annotation itself is added only. Does not impact.
.. index:: TCA, Backend
@@ -0,0 +1,83 @@
.. include:: /Includes.rst.txt
.. _feature-67658:
===============================================================
Feature: #67658 - Introduce DataProcessors for splitting values
===============================================================
See :issue:`67658`
Description
===========
Two new DataProcessors are added to allow flexible processing for comma-separated
values. To use e.g. with the FLUIDTEMPLATE content object.
The SplitProcessor allows to split values separated with a delimiter inside a single database field
into an array to loop over it.
The CommaSeparatedValueProcessor allows to split values into a two-dimensional array used for
CSV files or tt_content records of CType "table".
Using the SplitProcessor the following scenario is possible:
.. code-block:: typoscript
page.10 = FLUIDTEMPLATE
page.10.file = EXT:site_default/Resources/Private/Template/Default.html
page.10.dataProcessing.2 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
page.10.dataProcessing.2 {
if.isTrue.field = bodytext
delimiter = ,
fieldName = bodytext
removeEmptyEntries = 1
filterIntegers = 1
filterUnique = 1
as = keywords
}
In the Fluid template then iterate over the split data:
.. code-block:: html
<f:for each="{keywords}" as="keyword">
<li>Keyword: {keyword}</li>
</f:for>
Using the CommaSeparatedValueProcessor the following scenario is possible:
.. code-block:: typoscript
page.10 = FLUIDTEMPLATE
page.10.file = EXT:site_default/Resources/Private/Template/Default.html
page.10.dataProcessing.4 = TYPO3\CMS\Frontend\DataProcessing\CommaSeparatedValueProcessor
page.10.dataProcessing.4 {
if.isTrue.field = bodytext
fieldName = bodytext
fieldDelimiter = |
fieldEnclosure =
maximumColumns = 2
as = table
}
In the Fluid template then iterate over the processed data:
.. code-block:: html
<table>
<f:for each="{table}" as="columns">
<tr>
<f:for each="{columns}" as="column">
<td>{column}</td>
</f:for>
<tr>
</f:for>
</table>
.. index:: TypoScript, Frontend
@@ -0,0 +1,77 @@
.. include:: /Includes.rst.txt
.. _feature-67662:
=========================================
Feature: #67662 - DataProcessor for files
=========================================
See :issue:`67662`
Description
===========
A new Files DataProcessor has been introduced, which can be used to prepare data to be handled by a ContentObject
implementing the processors, e.g. the FLUIDTEMPLATE ContentObject. The FilesProcessor resolves File References, Files,
or Files inside a folder or collection to be used for output in the Frontend. A FLUIDTEMPLATE can then simply iterate
over processed data automatically.
.. code-block:: typoscript
tt_content.image.20 = FLUIDTEMPLATE
tt_content.image.20 {
file = EXT:myextension/Resources/Private/Templates/ContentObjects/Image.html
dataProcessing.10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
dataProcessing.10 {
# the field name where relations are set
# + stdWrap
references.fieldName = image
# the table name where relations are put, defaults to the currently selected record from $cObj->getTable()
# + stdWrap
references.table = tt_content
# A list of sys_file UID records
# + stdWrap
files = 21,42
# A list of File Collection UID records
# + stdWrap
collections = 13,14
# A list of FAL Folder identifiers and files fetched recursive from all folders
# + stdWrap
folders = 1:introduction/images/,1:introduction/posters/
folders.recursive = 1
# Property of which the files should be sorted after they have been accumulated
# can be any property of sys_file, sys_file_metadata
# + stdWrap
sorting = description
# Can be "ascending", "descending" or "random", defaults to "ascending" if none given
# + stdWrap
sorting.direction = descending
# The target variable to be handed to the ContentObject again, can be used
# in Fluid e.g. to iterate over the objects. defaults to "files" when not defined
# + stdWrap
as = myfiles
}
}
In the Fluid template then iterate over the files:
.. code-block:: html
<ul>
<f:for each="{myfiles}" as="file">
<li><a href="{file.publicUrl}">{file.name}</a></li>
</f:for>
</ul>
.. index:: TypoScript, Frontend
@@ -0,0 +1,74 @@
.. include:: /Includes.rst.txt
.. _feature-67663:
=============================================================
Feature: #67663 - Introduce DataProcessor for media galleries
=============================================================
See :issue:`67663`
Description
===========
The logic for working with galleries and calculating the maximum asset size is done in a separate GalleryProcessor.
The GalleryProcessor uses the files already present in the processedData array for his calculations. The FilesProcessor
can be used to fetch the files.
.. code-block:: typoscript
tt_content.textmedia.20 = FLUIDTEMPLATE
tt_content.textmedia.20 {
file = EXT:myextension/Resources/Private/Templates/ContentObjects/Image.html
dataProcessing {
# Process files
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
# Calculate gallery info
20 = TYPO3\CMS\Frontend\DataProcessing\GalleryProcessor
20 {
# filesProcessedDataKey :: Key in processedData array that holds the files (default: files) + stdWrap
filesProcessedDataKey = files
# mediaOrientation :: Media orientation, see: TCA[tt_content][column][imageorient] (default: data.imageorient) + stdWrap
mediaOrientation.field = imageorient
# numberOfColumns :: Number of columns (default: data.imagecols) + stdWrap
numberOfColumns.field = imagecols
# equalMediaHeight :: Equal media height in pixels (default: data.imageheight) + stdWrap
equalMediaHeight.field = imageheight
# equalMediaWidth :: Equal media width in pixels (default: data.imagewidth) + stdWrap
equalMediaWidth.field = imagewidth
# maxGalleryWidth :: Max gallery width in pixels (default: 600) + stdWrap
maxGalleryWidth = 1000
# maxGalleryWidthInText :: Max gallery width in pixels when orientation intext (default: 300) + stdWrap
maxGalleryWidthInText = 1000
# columnSpacing :: Column spacing width in pixels (default: 0) + stdWrap
columnSpacing = 0
# borderEnabled :: Border enabled (default: data.imageborder) + stdWrap
borderEnabled.field = imageborder
# borderWidth :: Border width in pixels (default: 0) + stdWrap
borderWidth = 0
# borderPadding :: Border padding in pixels (default: 0) + stdWrap
borderPadding = 10
# as :: Name of key in processedData array where result is placed (default: gallery) + stdWrap
as = gallery
}
}
}
.. index:: TypoScript, Frontend
@@ -0,0 +1,23 @@
.. include:: /Includes.rst.txt
.. _feature-67765:
================================================
Feature: #67765 - Introduce TypoLinkCodecService
================================================
See :issue:`67765`
Description
===========
The new `TypoLinkCodecService` class helps to simplify encoding and decoding of TypoLink strings.
A given TypoLink string can be passed to the `decode` method, which will return an associative array with the decoded parts.
The `encode` method takes care of assembling a valid TypoLink string for an array of TypoLink parts.
The encoding uses proper quoting and escaping, which allows safe usage of characters like `"\<space>`.
.. index:: PHP-API, Frontend, Backend
@@ -0,0 +1,49 @@
.. include:: /Includes.rst.txt
.. _feature-67808:
===============================================================================================
Feature: #67808 - Introduce Application classes for entry points and equivalent RequestHandlers
===============================================================================================
See :issue:`67808`
Description
===========
All entry points are encapsulating all previous initialization code in an Application class depending on the TYPO3_MODE
and several context-dependant constraints. Each Application class registers Request Handlers to the TYPO3 Bootstrap to
run a certain request type (e.g. eID or TSFE-logic, or AJAX requests in the Backend). Each Application is handed
over the Class Loader provided by Composer.
There are four types of Applications provided by the TYPO3 Core:
\\TYPO3\\CMS\\Frontend\\Http\\Application
-----------------------------------------
All incoming web requests coming to index.php in the main directory, handling all TSFE and eID requests.
The Application sets TYPO3_MODE=FE very early.
The Application checks if all configuration is given, otherwise redirects to the TYPO3 Install Tool.
\\TYPO3\\CMS\\Backend\\Http\\Application
----------------------------------------
All incoming web requests for any regular Backend call inside typo3/\*. This handles three types of Request Handlers:
- The AJAX Request Handler, which is triggered on requests with an "ajaxID" GET Parameter given.
- The Backend Module Request Handler, which handles all types of modules triggered on requests with an "M" GET Parameter
- The regular Request handler for typical other backend calls on index.php.
The Application checks if all configuration is given, otherwise redirects to the TYPO3 Install Tool.
\\TYPO3\\CMS\\Backend\\Console\\Application
-------------------------------------------
All CLI Requests handled by cli_dispatch.php. Only executes the parts that are necessary for Backend CLI Scripts used
with the cliKey syntax. The typical CliRequestHandler is used for handling requests set up by this Application.
\\TYPO3\\CMS\\Install\\Http\\Application
----------------------------------------
The install tool Application only runs with a very limited bootstrap set up with a Failsafe Package Manager not taking
the ext_localconf.php scripts of installed extensions into account.
.. index:: PHP-API
@@ -0,0 +1,33 @@
.. include:: /Includes.rst.txt
.. _feature-67880-1668719172:
========================================
Feature: #67880 - Added count to listNum
========================================
See :issue:`67880`
Description
===========
A new property `returnCount` is added to the stdWrap property `split`.
When dealing with comma separated values like the content of field:records or similar,
in some cases we need to know, how many items are present inside the csv.
Example:
.. code-block:: typoscript
# should return 9
1 = TEXT
1 {
value = x,y,z,1,2,3,a,b,c
split.token = ,
split.returnCount = 1
}
.. index:: TypoScript, Frontend
@@ -0,0 +1,82 @@
.. include:: /Includes.rst.txt
.. _feature-67932-1668719172:
=================================
Feature: #67932 - New rsaauth API
=================================
See :issue:`67932`
Description
===========
The rsaauth API has been rewritten to be more generic and can now be used easily in more parts of the core as well as
in third party extensions.
Impact
======
Form fields (e.g. password fields) can be encrypted before transmission. This helps to improve the security of your and
your user's data.
Examples
========
Encode
------
Encoding is done automatically via a JavaScript function which gets a public key and encrypts the data.
1) Include JavaScript to parse form fields for encryption. You can either choose to include a RequireJS module or a
plain Javascript file.
.. code-block:: php
$rsaEncryptionEncoder = GeneralUtility::makeInstance(\TYPO3\CMS\Rsaauth\RsaEncryptionEncoder::class);
$rsaEncryptionEncoder->enableRsaEncryption(); // Adds plain JavaScript
$rsaEncryptionEncoder->enableRsaEncryption(TRUE); // Adds RequireJS module
2) Activate encryption for your from fields with the data attribute `data-rsa-encryption`.
.. code-block:: html
<input type="password" id="pass" name="pass" value="" data-rsa-encryption="" />
If you want the encrypted value to be stored in another field, you have to use the RequiredJS module and you can
pass the id of that form field as value to the data attribute.
.. code-block:: html
<input type="password" id="t3-password" name="p_field" value="" data-rsa-encryption="t3-field-userident" />
<input type="hidden" name="userident" id="t3-field-userident" />
Decode
------
To decode your data you can use the method `TYPO3\CMS\Rsaauth\RsaEncryptionDecoder::decrypt` which can
either handle a string or an array as parameter. Data that is handled by \TYPO3\CMS\Core\DataHandling\DataHandler will
be decoded automatically before processing.
Notice: A RSA public key can only be used once to decrypt data. If you encrypt multiple fields in your form
you have to pass an array to the decrypt function with all data you want to decrypt. The function parses the
values for a `rsa:` prefix so you can be sure that non-matching data will not be changed.
.. code-block:: php
$rsaEncryptionDecoder = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Rsaauth\RsaEncryptionDecoder::class);
// Decrypt a single string
$password = $loginData['uident'];
$decryptedPassword = $rsaEncryptionDecoder->decrypt($password);
// Decrypt an array
if ($this->isRsaAvailable()) {
$parameters['be_user_data'] = $this->getRsaEncryptionDecoder()->decrypt($parameters['be_user_data']);
}
.. index:: PHP-API, Backend, ext:rsaauth
@@ -0,0 +1,33 @@
.. include:: /Includes.rst.txt
.. _feature-67950:
===================================================================
Feature: #67950 - Move CE table options from flexform to tt_content
===================================================================
See :issue:`67950`
Description
===========
The CE table (processing) configuration
* `Table caption`
* `Field delimiter`
* `Text enclosure`
* `Table header position`
* `Use table footer`
were in EXT:css_styled_content configured/saved in a flexform. This has now been moved to regular database fields.
Impact
======
When EXT:css_styled_content isn't installed a Migration wizard is shown in the install tool to move the flexform values
to regular database fields in the tt_content table.
.. index:: FlexForm, Backend, ext:css_styled_content
@@ -0,0 +1,29 @@
.. include:: /Includes.rst.txt
.. _feature-68022:
=============================================================
Feature: #68022 - Added base date attribute to DateViewHelper
=============================================================
See :issue:`68022`
Description
===========
The DateViewHelper has been improved with an optional attribute named `base`.
The attribute can be used to define a base-date when using a relative time specification for `date`.
If `date` is a `DateTime` object, `base` is ignored.
The possible relative date format specification can be found in:
http://www.php.net/manual/en/datetime.formats.relative.php
.. code-block:: html
<f:format.date format="Y" base="{dateObject}">-1 year</f:format.date>
This will result in the output `2016` assuming the `dateObject` is some date in 2017.
.. index:: Fluid
@@ -0,0 +1,18 @@
.. include:: /Includes.rst.txt
.. _feature-68047:
======================================================
Feature: #68047 - Emit a signal for each mapped object
======================================================
See :issue:`68047`
Description
===========
The signal `afterMappingSingleRow` is emitted whenever the DataMapper creates an object.
.. index:: PHP-API, Backend
@@ -0,0 +1,71 @@
.. include:: /Includes.rst.txt
.. _feature-68094:
==============================================
Feature: #68094 - Database Query DataProcessor
==============================================
See :issue:`68094`
Description
===========
A new Database Query DataProcessor has been introduced, which can be used to fetch data from the Database
to be handled by a ContentObject implementing the processors, e.g. the FLUIDTEMPLATE ContentObject.
The Database Query Processor works like the code from the Content Object CONTENT, except for just handing
over the result as array. A FLUIDTEMPLATE can then simply iterate over processed data automatically.
.. code-block:: typoscript
tt_content.mycontent.20 = FLUIDTEMPLATE
tt_content.mycontent.20 {
file = EXT:myextension/Resources/Private/Templates/ContentObjects/MyContent.html
dataProcessing.10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
dataProcessing.10 {
# regular if syntax
if.isTrue.field = records
# the table name from which the data is fetched from
# + stdWrap
table = tt_address
# All properties from .select can be used directly
# + stdWrap
colPos = 1
pidInList = 13,14
# The target variable to be handed to the ContentObject again, can be used
# in Fluid e.g. to iterate over the objects. defaults to "records" when not defined
# + stdWrap
as = myrecords
# The fetched records can also be processed by DataProcessors.
# All configured processors are applied to every row of the result.
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = image
}
}
}
}
In the Fluid template then iterate over the files:
.. code-block:: html
<ul>
<f:for each="{myrecords}" as="record">
<li>
<f:image image="{record.files.0}" />
<a href="{record.data.www}">{record.data.first_name} {record.data.last_name}</a>
</li>
</f:for>
</ul>
.. index:: Frontend, Fluid

Some files were not shown because too many files have changed in this diff Show More