Extensions können auf diverse Wege konfiguriert werden. Neben Flexforms sollte TypoScript einer der beliebtesten Wege sein. Dabei gibt es zwei Wege Plugins einer Extension zu konfigurieren.
plugin.tx_extname
¶Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | plugin {
tx_exampleextension {
persistence {
storagePid = 2
}
settings {
cdx {
pageUids {
editPage = 1
}
}
}
}
}
|
Damit wird die gesamte Extension konfiguriert, inklusive aller Plugins.
Zur Konfiguration stehen durch Extbase bereits einige Standards des Frameworks.
Darüber hinaus wird der Bereich settings
1:1 als PHP Array in den Controller und
die Templates weitergegeben.
Extbase selbst gibt die Bereiche
persistence
view
features
skipDefaultArguments
verwendet.mvc
_LOCAL_LANG
Kann genutzt werden um einzelne Labels der Lokalisierung anzupassen:
1 2 3 4 5 6 7 8 9 10 | plugin.tx_exampleextension {
_LOCAL_LANG {
default {
read_more = Read more »
}
de {
read_more = Weiterlesen »
}
}
}
|
vor.
Weitere Informationen sind unter TypoScript Configuration der Anleitung „Developing TYPO3 Extensions with Extbase and Fluid“ dokumentiert.
plugin.tx_extname_plugin
¶Soll nur ein bestimmtes Plugin konfiguriert werden, so kann dieses durch die gesamte Plugin Signatur angesprochen werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | plugin {
tx_exampleextension_address {
persistence {
storagePid = 2
}
settings {
cdx {
pageUids {
editPage = 1
}
}
}
}
}
|
Inhaltselemente sind das Kernstück von TYPO3. Diese können beliebig angepasst, und erstellt werden. Dabei greifen diverse Einstellungen.
Die Konfiguration der Darstellung erfolgt in aller Regel via TypoScript. Die Konfiguration für das Backend erfolgt im TCA, innerhalb von Flexforms und via TSconfig.
TCA ist die Abkürzung für Table Configuration Array und beinhaltet die Konfiguration aller Datenbanktabellen die im TYPO3 bearbeitet werden sollen. Damit ist das TCA ein essentieller Bestandteil von TYPO3. Es wird zum einen für die Listenansicht, die Formulare im Backend und teilweise von Extbase verwendet.
Hinzu kommen einige Extensions die eigene Eigenschaften im TCA unterbringen und als Konfiguration auswerten.
Das TCA befindet sich innerhalb von Extensions an folgendem Ort:
example_extension
└── Configuration
└── TCA
├── Overrides
│ └── tt_content.php
└── tx_exampleextension_domain_model_address.php
Dokumentiert ist das TCA in der TCA Reference.
Flexforms erlauben das erweitern von TCA mittels XML. Die Flexforms werden in aller
Regel in der Spalte pi_flexform
der Tabelle tt_content
gespeichert. Es können
aber auch weitere Spalten und Tabellen verwendet werden. Grundsätzlich kommen
Flexforms zum Einsatz wenn keine Datenbankabfragen auf die Daten erfolgen. Der Aufbau
innerhalb des XML entspricht 1:1 dem TCA, lediglich in XML statt PHP Array Syntax.
Somit greift auch hier die Dokumentation der TCA Reference.
Damit eine Flexform angezeigt wird, muss die Spalte vom Typ flex
sein. Die
konkrete Konfiguration kann auch hier der TCA Dokumentation
type = 'flex' nachgeschlagen werden.
TSconfig ist eine weitere Möglichkeit Formulare im Backend zu konfigurieren. Dabei stehen nicht alle Funktionen des TCA zur Verfügung. Dafür kann TSconfig aber auf Seiten- und Nutzerebene hinterlegt werden und bietet so eine flexible Anpassung an einzelne Situationen.
Ein weiterer Vorteil von TSconfig ist das bearbeiten von Optionen bei Dropdowns (Selects). Diese können im TCA meist nicht identifiziert werden, da diese oft ein numerisches Array sind. Innerhalb von TSconfig findet die Identifikation über die zu speichernden Werte statt und ist somit um ein vielfaches einfacher.
Zudem gibt es diverse Aspekte die nur per TSconfig anpassbar sind. So z.B. der Wizard zum erstellen eines neuen Inhaltselements.
TSconfig ist von der Syntax her an TypoScript angelegt und dient der Konfiguration des Backend auf Seiten- und Nutzerbasis.
Eine vollständige Referenz ist unter https://docs.typo3.org/typo3cms/TSconfigReference/Index.html zu finden.
Wie bei TypoScript auch, gibt es hier Conditions. Grundsätzlich ist TSconfig in User- und Page-TSconfig unterteilt.
PageTSconfig
Durch die Vererbung können hier einzelne Seitenbereiche im Backend angepasst werden. So z.B. die erlaubten Datensätze, Labels etc. Außerdem ist dies wichtig für ein sauberes Caching. Hier kann eingestellt werden welche Caches mit geleert werden sollen. So kann z.B. die Startseite bei neuen News geleert werden.
Wird in den Seiteneigenschaften hinterlegt. Kann zudem bei Benutzern hinterlegt werden.
Ein Beispiel von PageTSconfig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | mod {
wizards {
newContentElement {
wizardItems {
common {
show := removeFromList(table)
}
}
}
}
}
TCEFORM {
tt_content {
CType {
removeItems = table
}
}
}
|
PageTSconfig kann auch via PHP geladen werden:
1 | \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('');
|
Sowohl innerhalb der AdditionalConfiguration.php
der Installation, als auch
innerhalb von ext_localconf.php
einer Extension. Dabei greift dann die
Ladereihenfolge der Extensions.
UserTSconfig
Kann nicht vom Nutzer selbst gesetzt werden, aber per Modul Backend users oder List.
Kann alle Werte aus PageTS gezielt überschreiben, siehe https://docs.typo3.org/typo3cms/TSconfigReference/UserTsconfig/Field/Index.html#relationship-to-values-set-in-page-tsconfig.
Kann einem Nutzer oder einer Nutzergruppe hinterlegt werden.
1 2 3 4 5 6 7 8 | options {
pageTree {
showPageIdWithTitle = 1
showDomainNameWithTitle = 1
showPathAboveMounts = 1
searchInAlias = 1
}
}
|
UserTSconfig kann auch via PHP geladen werden:
1 | \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig('');
|
Sowohl innerhalb der AdditionalConfiguration.php
der Installation, als auch
innerhalb von ext_localconf.php
einer Extension. Dabei greift dann die
Ladereihenfolge der Extensions.
CONTENT
und RECORD
(optional)¶tt_content
(optional)¶Fluid ist eine Template Engine, geschrieben in PHP. Die Engine selbst ist unabhängig von TYPO3 und kann somit auch in anderen PHP Projekten genutzt werden. Neben TYPO3 nutzt auch das Neos CMS und Flow Framework die Engine.
Innerhalb von TYPO3 wird Fluid meist in Kombination mit Extbase Plugins verwendet,
oder als cObject FLUIDTEMPLATE
innerhalb von TypoScript um Inhaltselemente oder
eine Seite zu rendern.
Durch die hohe Flexibilität, und vergleichsweise einfache Anwendung, hat Fluid TypoScript in weiten Teilen überflüssig gemacht und verdrängt. Im Zusammenspiel beider Komponenten liegt ein Bestandteil der Flexibiltät von TYPO3.
FLUIDTEMPLATE
¶FLUIDTEMPLATE ist eines der verfügbaren TypoScript Content Objects. Per PHP können auch weitere Content Objects bereitgestellt werden, dies nutzt z.B. die TYPO3 Extension solr.
Grundsätzlich muss angegeben werden wo das Template für das Rendering liegt. Dies kann entweder inline per Option template übergeben werden, oder als vollständiger Pfad per Option file. Meisten kommt jedoch nur der Name zum Einsatz, dieser als Option templateName wird dann in Kombination mit der Option templateRootPaths verwendet.
So liegen z.B. bei der TYPO3 Systemextension fluid_styled_content alle Templates der
Inhaltselemente im Ordner Resources/Private/Templates
. Die Konfiguration
sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # Default configuration for content elements which are using FLUIDTEMPLATE directly
lib.contentElement >
lib.contentElement = FLUIDTEMPLATE
lib.contentElement {
templateName = Default
templateRootPaths {
0 = EXT:fluid_styled_content/Resources/Private/Templates/
10 = {$styles.templates.templateRootPath}
}
partialRootPaths {
0 = EXT:fluid_styled_content/Resources/Private/Partials/
10 = {$styles.templates.partialRootPath}
}
layoutRootPaths {
0 = EXT:fluid_styled_content/Resources/Private/Layouts/
10 = {$styles.templates.layoutRootPath}
}
}
|
Die Konfiguration eines einzelnen Inhaltselements sieht danach wie folgt aus:
1 2 3 4 | tt_content.html =< lib.contentElement
tt_content.html {
templateName = Html
}
|
Ein Template alleine reicht nicht, das Template braucht auch Daten die gerendert werden sollen. Diese werden mittels Option variables übergeben:
1 2 3 4 5 6 7 | page.10 {
variables {
mainMenu =< lib.mainMenu
companyName = TEXT
companyName.value = {$companyName}
}
}
|
settings
und variables
(optional)¶dataProcessing
¶Erst durch dataProcessing wird
FLUIDTEMPLATE
wirklich flexibel. Diese Option ermöglicht das aufbereiten von
Daten, welche an das Template gesendet werden.
Ein Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | tt_content.image = FLUIDTEMPLATE
tt_content.image {
templateName = Image
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = image
references.table = tt_content
sorting = description
sorting.direction = descending
as = myfiles
}
}
}
|
Dataprocessoren werden in der konfigurierten Reihenfolge ausgeführt. Dabei werden jeweils alle Variablen an die Prozessoren übergeben und im Anschluss alle zurück gegeben. Das Interface sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | namespace TYPO3\CMS\Frontend\ContentObject;
interface DataProcessorInterface
{
/**
* @return array
*/
public function process(
ContentObjectRenderer $cObj,
array $contentObjectConfiguration,
array $processorConfiguration,
array $processedData
);
}
|
Dadurch können viele kleine Klassen implementiert werden, welche jeweils eine kleine Aufgabe übernehmen. Diese können im Anschluss durch den Integrator kombiniert werden. Ein Beispiel dafür:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | tt_content.menu_pages =< lib.contentElement
tt_content.menu_pages {
templateName = MenuPages
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
10 {
special = list
special.value.field = pages
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = media
}
}
}
}
}
|