Attention
TYPO3 v11 has reached end-of-life as of October 31th 2024 and is no longer being maintained. Use the version switcher on the top left of this page to select documentation for a supported version of TYPO3.
Need more time before upgrading? You can purchase Extended Long Term Support (ELTS) for TYPO3 v11 here: TYPO3 ELTS.
The LinkHandler API
The LinkHandler API currently consists of 7 LinkHandler classes and the
\TYPO3\
. The
LinkHandlerInterface can be implemented to create custom LinkHandlers.
Most LinkHandlers cannot receive additional configuration, they are marked as
@internal
and contain neither hooks nor events. They are therefore
of interest to Core developers only.
Current LinkHandlers:
- The PageLinkHandler: for linking pages and content
- The RecordLinkHandler: for linking any kind of record
- UrlLinkHandler: for linking external urls
- FileLinkHandler: for linking files in the File abstraction layer (FAL)
- FolderLinkHandler: for linking to directories
- MailLinkHandler: for linking mail
- TelephoneLinkHandler: for linking phone numbers
Note
In the system extension core
there are also classes ending on
"LinkHandler". However those implement the interface Link
and are part of the LinkHandling API, not the LinkHandler API.
The following LinkHandlers are of interest:
The links are now stored in the database with the syntax
<a href="t3://
.
-
TypoScript is used to generate the actual link in the frontend.
config.recordLinks.anIdentifier { // Do not force link generation when the record is hidden forceLink = 0 typolink { parameter = 123 additionalParams.data = field:uid additionalParams.wrap = &tx_example_pi1[item]=|&tx_example_pi1[controller]=Item&tx_example_pi1[action]=show } }
Copied!Important
Do not change the identifier after links have been created using the LinkHandler. The identifier will be stored as part of the link in the database.
LinkHandler page TSconfig options
The minimal page TSconfig configuration is:
TCEMAIN.linkHandler.anIdentifier {
handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler
label = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:link.customTab
configuration {
table = tx_example_domain_model_item
}
}
See Link handler configuration for all available options.
Example: news records from one storage pid
The following configuration hides the page tree and shows news records only from the defined storage page:
TCEMAIN.linkHandler.news {
handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler
label = News
configuration {
table = tx_news_domain_model_news
storagePid = 123
hidePageTree = 1
}
displayAfter = mail
}
It is possible to have another configuration using another storagePid which also contains news records.
This configuration shows a reduced page tree starting at page with uid 42:
TCEMAIN.linkHandler.bookreports {
handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler
label = Book Reports
configuration {
table = tx_news_domain_model_news
storagePid = 42
pageTreeMountPoints = 42
hidePageTree = 0
}
}
The PageTSconfig of the LinkHandler is being used in sysext recordlist
in class \TYPO3\
which does not contain Hooks or Slots.
LinkHandler TypoScript options
A configuration could look like this:
config.recordLinks.anIdentifier {
forceLink = 0
typolink {
parameter = 123
additionalParams.data = field:uid
additionalParams.wrap = &tx_example_pi1[item]=|
}
}
The TypoScript Configuration of the LinkHandler is being used in sysext frontend
in class \TYPO3\
.
Example: news records displayed on fixed detail page
The following displays the link to the news on a detail page:
config.recordLinks.news {
typolink {
parameter = 123
additionalParams.data = field:uid
additionalParams.wrap = &tx_news_pi1[controller]=News&tx_news_pi1[action]=detail&tx_news_pi1[news]=|
}
}
Once more if the book reports that are also saved as tx_
record should be displayed on their own
detail page you can do it like this:
config.recordLinks.bookreports {
typolink {
parameter = 987
additionalParams.data = field:uid
additionalParams.wrap = &tx_news_pi1[controller]=News&tx_news_pi1[action]=detail&tx_news_pi1[news]=|
}
}