
Site Sets (TYPO3 13.4+)
| Set | Zweck |
|---|---|
mpc/mp-core (Aggregator) | Ruft alle unten aufgeführten Funktionssätze in einem Include ab |
mpc/mp-core-base (erforderlich) | Kernfunktionalität, Vorlagen, Basis-Styling, gemeinsame Einstellungen |
mpc/mp-core-container | Container-Elemente (Akkordeon, Registerkarten, Schieberegler, Raster) |
mpc/mp-core-news | Integration der News-Erweiterung |
mpc/mp-core-form | Konfiguration des Formular-Frameworks |
mpc/mp-core-seo | SEO (Open Graph, Twitter Cards, Schema.org, Sitemap) |
mpc/mp-core ist ein Aggregator, der auf mpc/mp-core-base sowie allen Funktionsumfängen. Es reicht aus, mpc/mp-core in Ihre Website einzubinden. Wenn Sie eine feinere Steuerung benötigen, fügen Sie mpc/mp-core-base und wählen Sie einzelne Funktionssätze aus.
Rollen festlegen
| Rolle festlegen | Rolle |
|---|---|
mpc/mp-core | Aggregator + gemeinsame Website-Einstellungen (settings.yaml, settings.definitions.yaml in diesem Ordner) |
mpc/mp-core-base | Lädt TYPO3-Systemerweiterungen; registriert die oben genannten Pfade für gemeinsame Einstellungen; optionale Integrationen, sofern vorhanden |
mpc/mp-core-* (Feature) | Feature-spezifisches TypoScript und Einstellungen; jedes hängt von mpc/mp-core-base nur |
Wichtig: Wenn Sie ein benutzerdefiniertes Site-Set erstellen, setzen Sie
dependencies: [mpc/mp-core-base, …]— niemalsmpc/mp-core. Das Abhängigmachen vom Aggregator eines untergeordneten Sets führt zu einem SetRegistry-Rekursions-Deadlock.
mpc/mp-core-base Abhängigkeiten
Erforderlich: typo3/form, typo3/redirects, typo3/indexed-search
Optional (wird bei Installation verwendet): georgringer/news-recordlinks, georgringer/news-sitemap, mpc/mpc-vidply, mpc/mpc-rss
Sets aktivieren
Backend: Site-Verwaltung -> Sites -> Registerkarte „Sets“ -> Sets aktivieren und anordnen.
YAML (config/sites/[site]/config.yaml):
base: 'https://example.com'
rootPageId: 1
dependencies:
- mpc/mp-core
Oder einzelne Sets auswählen:
dependencies:
- mpc/mp-core-base
- mpc/mp-core-container
- mpc/mp-core-seo
Website-Einstellungen
Bearbeitbar über Site-Verwaltung → Sites → Einstellungen oder config/sites/[site]/settings.yaml.
Nach Änderung neu generieren settings.definitions.yaml / settings.yaml:
node Documentation/scripts/sync-site-settings.mjs
Kern (gemeinsam genutzt — mpc/mp-core / registriert über mpc/mp-core-base)
Definitionen und Standardeinstellungen der Website-Einstellungen befinden sich in Configuration/Sets/mp-core/settings.definitions.yaml und settings.yaml. Das Basisset verweist lediglich auf diese Dateien.
Quelle: Configuration/Sets/mp-core/
Schema-Standard —
defaultinsettings.definitions.yaml(Benutzeroberfläche „Websiteeinstellungen“). Ausgelieferter Standardwert – Wert aussettings.yaml, wenn es das Schema überschreibt (Spalte—= wie im Schema).
PIDs
| Schlüssel | Typ | Standard |
|---|---|---|
PIDs.pidSearch | int | 0 |
PIDs.pidHome | int | 1 |
PIDs.pidMetaNavTop | int | 66 |
PIDs.pidMetaNavFooter | int | 25 |
PIDs.pidMainNavMeta | int | 25 |
PIDs.pidCategories | int | 251 |
PIDs.pidLogosBannerTop | int | 391 |
PIDs.pidSupplement | int | 24 |
Flüssige Wurzelpfade
| Schlüssel | Typ | Standard |
|---|---|---|
templates.layoutRootPath | Zeichenkette | EXT:mp_core/Resources/Private/Layouts/ |
templates.partialRootPath | Zeichenkette | EXT:mp_core/Resources/Private/Partials/ |
templates.templateRootPath | Zeichenkette | EXT:mp_core/Resources/Private/Templates/ |
Inhalt
| Schlüssel | Typ | Schema-Standard | Auslieferungsstandard |
|---|---|---|---|
content.textmedia.maxWidth | int | 1200 | 1920 |
content.textmedia.maxWidthInText | int | 600 | 1920 |
content.lightbox.enabled | bool | true | — |
content.lightbox.cssClass | Zeichenkette | lightbox | — |
content.defaultHeaderType | int | 2 | — |
content.links.extTarget | Zeichenkette | _blank | — |
Konfiguration
| Schlüssel | Typ | Standard |
|---|---|---|
config.admPanel | bool | false |
config.debug | bool | false |
config.noCache | bool | false |
config.removeDefaultJS | Zeichenkette | external |
config.spamProtectEmailAddresses | bool | true |
config.spamProtectEmailAddresses_atSubst | Zeichenkette | [at] |
config.absRefPrefix | Zeichenkette | auto |
config.headerComment | Zeichenkette | (leer) |
Leistung
| Schlüssel | Typ | Standard |
|---|---|---|
performance.compressJs | bool | false |
performance.compressCss | bool | false |
performance.concatenateJs | bool | false |
performance.concatenateCss | bool | false |
performance.enableLazyLoading | bool | true |
Design
| Schlüssel | Typ | Standard |
|---|---|---|
design.colors.primary | Zeichenkette | #0066cc |
design.colors.secondary | Zeichenkette | #ff6600 |
design.fonts.primary | Zeichenkette | Open Sans, sans-serif |
design.fonts.heading | Zeichenkette | Turret Road, sans-serif |
design.breakpoints.mobile | int | 768 |
design.breakpoints.tablet | int | 1024 |
design.breakpoints.desktop | int | 1440 |
design.container.maxWidth | Zeichenkette | 1200px |
Navigation
| Schlüssel | Typ | Standard |
|---|---|---|
navigation.maxDepth | int | 3 |
navigation.showHiddenPages | bool | false |
navigation.enableBreadcrumb | bool | true |
navigation.breadcrumb.includeHome | bool | true |
Meta
| Schlüssel | Typ | Standard |
|---|---|---|
meta.viewport | Zeichenkette | width=device-width, initial-scale=1 |
meta.robots | Zeichenkette | index,follow |
meta.appleMobileWebAppCapable | Zeichenkette | no |
meta.compatible | Zeichenkette | IE=edge |
meta.google | Zeichenkette | notranslate |
meta.googleSiteVerification | Zeichenkette | (leer) |
Vorlagen & Pfade
| Schlüssel | Typ | Standard |
|---|---|---|
basePath | Zeichenkette | EXT:mp_core |
pageTemplates | Zeichenkette | EXT:mp_core/Resources/Private/Templates/Page/ |
pagePartials | Zeichenkette | EXT:mp_core/Resources/Private/Partials/Page/ |
pageLayouts | Zeichenkette | EXT:mp_core/Resources/Private/Layouts/Page/ |
pageFaviconsFile | Zeichenkette | EXT:mp_core/Resources/Private/Partials/Page/Favicons.html |
contentElementTemplates | Zeichenkette | EXT:mp_core/Resources/Extensions/fluid_styled_content/Private/Templates/ |
contentElementPartials | Zeichenkette | EXT:mp_core/Resources/Extensions/fluid_styled_content/Private/Partials/ |
contentElementLayouts | Zeichenkette | EXT:mp_core/Resources/Extensions/fluid_styled_content/Private/Layouts/ |
containerElementTemplates | Zeichenkette | EXT:mp_core/Resources/Private/Templates/Container/ |
containerElementPartials | Zeichenkette | EXT:mp_core/Resources/Private/Partials/Container/ |
containerElementLayouts | Zeichenkette | EXT:mp_core/Resources/Private/Layouts/Container/ |
pluginsNewsTemplates | Zeichenkette | EXT:mp_core/Resources/Extensions/news/Templates/ |
pluginsNewsPartials | Zeichenkette | EXT:mp_core/Resources/Extensions/news/Partials/ |
pluginsNewsLayouts | Zeichenkette | EXT:mp_core/Resources/Extensions/news/Layouts/ |
pluginsIndexedSearchTemplates | Zeichenkette | EXT:mp_core/Resources/Extensions/indexed_search/Templates/ |
pluginsIndexedSearchPartials | Zeichenkette | EXT:mp_core/Resources/Extensions/indexed_search/Partials/ |
pluginsIndexedSearchLayouts | Zeichenkette | EXT:mp_core/Resources/Extensions/indexed_search/Layouts/ |
contentTypesTemplates | Zeichenkette | EXT:mp_core/Resources/Private/Templates/Content/ |
contentTypesGalleryTemplates | Zeichenkette | EXT:mp_core/Resources/Private/Templates/Content/ |
resourcesPrivate | Zeichenkette | EXT:mp_core/Resources/Private |
resourcesExtensions | Zeichenkette | EXT:mp_core/Resources/Extensions |
structuredDataEnabled | bool | true |
musicGroupEnabled | bool | false |
musicGroupName | Zeichenkette | Pellerhead |
musicGroupGenre | Zeichenkette | Rock, Punk, Electronic |
musicGroupDescription | Zeichenkette | (leer) |
musicGroupImage | Zeichenkette | (leer) |
Container (mpc/mp-core-container)
Quelle: Configuration/Sets/mp-core-container/
| Schlüssel | Typ | Standard |
|---|---|---|
container.grid.enabled | bool | true |
container.grid.defaultColumns | int | 2 |
container.grid.maxColumns | int | 4 |
container.grid.gutterSize | Zeichenkette | 20px |
container.accordion.enabled | bool | true |
container.accordion.allowMultiple | bool | false |
container.accordion.firstOpen | bool | true |
container.tabs.enabled | bool | true |
container.tabs.position | Zeichenkette | top |
container.wrapper.maxWidth | Zeichenkette | 1200px |
container.wrapper.padding | Zeichenkette | 15px |
Nachrichten (mpc/mp-core-news)
Quelle: Configuration/Sets/mp-core-news/
| Schlüssel | Typ | Standard |
|---|---|---|
news.list.paginate.itemsPerPage | int | 10 |
news.list.orderBy | Zeichenkette | datetime |
news.list.orderDirection | Zeichenkette | desc |
news.list.dateFormat | Zeichenkette | d.m.Y |
news.list.showCategories | bool | true |
news.list.showTags | bool | true |
news.detail.showBackLink | bool | true |
news.detail.showRelated | bool | true |
news.detail.relatedLimit | int | 3 |
news.detail.enableComments | bool | false |
news.media.maxWidth | int | 1200 |
news.media.maxHeight | int | 800 |
Formular (mpc/mp-core-form)
Quelle: Configuration/Sets/mp-core-form/
| Schlüssel | Typ | Standard |
|---|---|---|
form.honeypot.enabled | bool | true |
form.confirmationPage.enabled | bool | true |
form.requiredFieldMarker | Zeichenkette | * |
form.email.senderName | Zeichenkette | Website Contact Form |
form.email.senderEmail | Zeichenkette | noreply@example.com |
form.email.replyToEmail | Zeichenkette | info@example.com |
form.validation.clientSide | bool | true |
form.validation.showInlineErrors | bool | true |
form.storage.saveToDatabase | bool | false |
form.storage.uploadFolder | Zeichenkette | 1:/forms/ |
SEO (mpc/mp-core-seo)
Quelle: Configuration/Sets/mp-core-seo/
| Schlüssel | Typ | Standard |
|---|---|---|
seo.meta.defaultDescription | Zeichenkette | (leer) |
seo.meta.generateDescriptions | bool | true |
seo.meta.maxDescriptionLength | int | 160 |
seo.meta.maxTitleLength | int | 60 |
seo.meta.titleSeparator | Zeichenkette | | |
seo.openGraph.enabled | bool | true |
seo.openGraph.defaultImage | Zeichenkette | (leer) |
seo.openGraph.imageWidth | int | 1200 |
seo.openGraph.imageHeight | int | 630 |
seo.twitter.enabled | bool | true |
seo.twitter.cardType | Zeichenkette | summary_large_image |
seo.twitter.site | Zeichenkette | (leer) |
seo.sitemap.enabled | bool | true |
seo.sitemap.excludeHiddenPages | bool | true |
seo.sitemap.priority | Zeichenkette | 0.5 |
seo.canonical.enabled | bool | true |
seo.schema.enabled | bool | true |
seo.schema.organizationType | Zeichenkette | Organization |
Verwendung von Einstellungen in TypoScript
# Constants
mpCore.design.primaryColor = {$settings.design.colors.primary}
# Setup
page.10.templateRootPaths.10 = {$settings.pageTemplates}
Site-Konfiguration (config.yaml)
Über die Site-Einstellungen hinaus erweitert mp-core den Site-Datensatz und die Site-Sprache über Configuration/SiteConfiguration/Overrides/sites.php. Konfigurieren Sie diese unter Site-Verwaltung → Sites → [site] → Konfiguration (oder in config/sites/[site]/config.yaml).
| Bereich | (Beispiele) | Hinweise |
|---|---|---|
| Anpassung | navType, subnav, subnavOrder, search, copyrightText | navType: 1 primär, 2 sekundär, 3 tertiär |
| Favicons | favicon-96x96-png, faviconIco, faviconSvg, apple-touch-icon, webmanifest, … | Dateiverknüpfungen → Resources/Private/Partials/Page/Favicons.html (Favicons.md) |
| Farben & Stile | color-toggle, color-1…color-8, color-primary, styles | styles fügt benutzerdefiniertes :root CSS ein; lässt sich mit ColorPickerValueItems in TCA |
| Social Media | socialMediaSwitch, Plattform-URL-Felder | Eingebunden in SocialMediaProcessor / strukturierte Daten |
| Logos | logoBig, logoSmall, logoSvg, logoText, logoTextHidden | Sprachbezogene Überschreibungen für die Sprachen der Website; aufgelöst durch HeaderLogoProcessor |
Sprachspezifische Paletten: copyrightText, Logo-Felder und logoText / logoTextHidden können je nach Website-Sprache variieren.
TypoScript-Struktur
Configuration/
├── RequestMiddlewares.php # HtmlWhitespaceCompressorMiddleware
├── Services.yaml
├── Sets/
│ ├── mp-core/
│ │ ├── config.yaml # Aggregator (depends on all feature sets)
│ │ ├── settings.yaml # Shared Site Settings defaults
│ │ ├── settings.definitions.yaml # Shared Site Settings schema
│ │ ├── constants.typoscript, setup.typoscript, page.tsconfig
│ ├── mp-core-base/
│ │ └── config.yaml # System deps + pointers to mp-core settings
│ ├── mp-core-container/
│ │ ├── config.yaml, settings.yaml, settings.definitions.yaml
│ │ ├── constants.typoscript, setup.typoscript
│ ├── mp-core-news/
│ │ ├── config.yaml, settings.yaml, settings.definitions.yaml
│ │ ├── constants.typoscript, setup.typoscript
│ ├── mp-core-form/
│ │ ├── config.yaml, settings.yaml, settings.definitions.yaml
│ │ ├── constants.typoscript, setup.typoscript
│ └── mp-core-seo/
│ ├── config.yaml, settings.yaml, settings.definitions.yaml
│ ├── constants.typoscript, setup.typoscript
├── TypoScript/
│ ├── constants.typoscript, setup.typoscript
│ ├── VueComponents.typoscript
│ ├── Helper/PageClass.typoscript
│ ├── Constants/*.typoscript
│ └── Setup/
│ ├── 10.Config, 20.Page, 30.Page.Styles, 40.Page.Scripts
│ ├── 50.Page.Navigation, 60.Lib, 90.CleanupRTE
│ ├── Page/*.typoscript
│ └── ContentElements/tt_content/*.typoscript
└── Extensions/
├── constants.typoscript, setup.typoscript
| Datei | Zweck |
|---|---|
10.Config | Grundlegende TYPO3-Konfiguration (Zeichensatz, Sprache, Cache) |
20.Page | Seitenobjekt, Vorlagenpfade, Datenprozessoren |
30.Page.Styles | CSS-Includes |
40.Page.Scripts | JavaScript-Einbindungen |
50.Page.Navigation | Bündel für bedingte Navigation |
60.Lib | Gemeinsam genutzte lib.* Objekte |
95.SitePresentationOverrides | SocialMediaProcessor, StructuredDataProcessor |
ContentElements/tt_content/* | Rendering von Inhaltselementen, HeaderLogoProcessor |
Konfiguration des Vorlagenpfads
page.10 = FLUIDTEMPLATE
page.10 {
templateRootPaths {
0 = EXT:mp_core/Resources/Private/Templates/Page/
10 = {$settings.pageTemplates}
}
partialRootPaths {
0 = EXT:mp_core/Resources/Private/Partials/
10 = {$settings.pagePartials}
}
layoutRootPaths {
0 = EXT:mp_core/Resources/Private/Layouts/
10 = {$settings.pageLayouts}
}
}
Pfadpriorität: 0 = Kern, 10 = Erweiterung, 20+ = Projekt. Höhere Zahlen haben Vorrang vor niedrigeren.
Erweiterungsüberschreibungen
plugin.tx_news.view.templateRootPaths.10 = EXT:mp_core/Resources/Extensions/news/Templates/
plugin.tx_form.view.templateRootPaths.10 = EXT:mp_core/Resources/Extensions/form/Templates/
plugin.tx_indexedsearch.view.templateRootPaths.10 = EXT:mp_core/Resources/Extensions/indexed_search/Templates/
Bedingte Konfiguration
Navigations-Bundles hängen vom Feld „Site-Konfiguration“ ab navType (siehe Configuration/SiteConfiguration/Overrides/sites.php):
navType | Layout |
|---|---|
1 | Primäre Navigation |
2 | Sekundäre Navigation |
3 | Tertiäre Navigation |
[traverse(site("configuration"), "navType") == "1"]
page.includeJSFooter.navigationPrimary = EXT:mp_core/Resources/Public/JavaScripts/navigationPrimary.js
[END]
TCA-Überschreibungen
Schnellübersicht
| Datei | Zweck |
|---|---|
tt_content_00_base.php | Assistent für globale Verknüpfungen, Paletten, Vue TodoList CType |
tt_content_00_header.php | Erweiterte Kopfzeilenoptionen |
pages.php | Funktionsschalter, Teaser-Beschreibung, Link-Symbol |
sys_category.php | Beziehung zur Hauptkategorie auf Seiten |
sys_file_metadata.php | RTE-Beschreibung, Barrierefreiheits-Flag |
sys_file_reference.php | Gliederungs- und Download-Optionen |
sys_template.php | Statische TypoScript-Registrierung |
Seitenfelder (pages.php)
| Feld | Typ | Beschreibung |
|---|---|---|
newsletter | Checkbox-Schalter | Anmeldefeld für den Newsletter |
socialmedia | Checkbox-Schalter | Leiste zum Teilen in sozialen Medien |
breadcrumb | Checkbox-Schalter | Breadcrumb-Navigation |
headercontainer | Schaltfläche zum Aktivieren/Deaktivieren | Layout des Header-Containers |
teaser_description | Textfeld | Teaser/Kartenbeschreibung |
link_icon | Datei (SVG) | Benutzerdefiniertes Seiten-Link-Symbol |
link_icon_background | Schaltfläche zum Aktivieren/Deaktivieren | Hintergrund des Symbols |
Globaler Link-Assistent (tt_content_00_base.php)
| Feld | Typ | Optionen |
|---|---|---|
tx_link_switch | Kontrollkästchen umschalten | Link aktivieren/deaktivieren |
tx_link | Link-Assistent | Seite, Datei, URL, Datensatz |
tx_link_layout | Auswählen | Primäre/sekundäre/tertiäre Schaltfläche, Link-Stile |
tx_link_text | Texteingabe | Benutzerdefinierter Linktext |
tx_link_position | Auswählen | Mitte, Links, Rechts |
Palette: link_config
Benutzerdefinierte Inhaltselemente
| Element | Datei | Beschreibung |
|---|---|---|
| Galerie | tt_content_gallery.php | Responsive Bildergalerien + Lightbox |
| Bühne | tt_content_stage.php | Hero-Bereiche (Bild-/Videohintergründe) |
| Banner | tt_content_banner.php | Anpassbare Bannerbereiche |
| Einzel-Teaser | tt_content_singleteaser.php | Inhalts-Teaser mit Bildern/Links |
| Akkordeon | tt_content_accordion.php | Zusammenklappbare Bereiche (b13/container) |
| Registerkarten | tt_content_tabs.php | Registerkarten (b13/container) |
| Schieberegler | tt_content_slider.php | Swiper-Karussells (b13/container) |
| Raster | tt_content_grid.php | Flexible Spaltenlayouts (b13/container) |
| Container | tt_content_container.php | Generischer Wrapper (b13/container) |
| To-Do-Liste | tt_content_00_base.php | Vue.js 3 To-Do (CType: mpcore_todolist) |
| Menü-Unterseiten | tt_content_menu_subpages.php | Erweitertes Unterseiten-Menü |
Dateimetadaten / Referenzen
| Tabelle | Feld | Beschreibung |
|---|---|---|
sys_file_metadata | description | RTE-Textbeschreibung |
sys_file_metadata | is_accessible | Kennzeichen für Barrierefreiheit |
sys_file_reference | outline | Mit Rahmen anzeigen |
sys_file_reference | allow_download | Download-Schaltfläche anzeigen |
Häufige Anpassungsmuster
Hinzufügen eines Feldes zu einem bestehenden Element
$myColumns = [
'tx_my_field' => [
'label' => 'My Field',
'config' => ['type' => 'input', 'size' => 30],
],
];
ExtensionManagementUtility::addTCAcolumns('tt_content', $myColumns);
ExtensionManagementUtility::addToAllTCAtypes('tt_content', 'tx_my_field', 'textmedia', 'after:bodytext');
Datenbankschema
Fügen Sie Spalten hinzu ext_tables.sqlund führen Sie anschließend „Admin-Tools“ -> „Wartung“ -> „Datenbankstruktur analysieren“ aus.
CREATE TABLE tt_content (
tx_my_field varchar(255) DEFAULT '' NOT NULL
);
Tipps
- Verwenden Sie vorhandene Paletten aus
tt_content_00_base.phpundtt_content_00_header.php - Fügen Sie benutzerdefinierten Feldern das Präfix
tx_, um Konflikte zu vermeiden - Verwenden Sie „
LLL:EXT:...“-Referenzen für alle Beschriftungen - Verwenden Sie „
displayCond“ für die bedingte Sichtbarkeit von Feldern:'displayCond' => 'FIELD:my_toggle:=:1' - Verwenden Sie Site-Einstellungen anstelle von fest codierten TypoScript-Werten
- Beachten Sie die Pfadnummerierung:
0(Kern),10(Erweiterung),20+(Projekt)
Weiterführende Literatur
- Backend -- RTE, Seite TSconfig, Inhaltsvorschau
- Inhaltselemente -- TCA-Feldreferenz pro CType
- Frontend -- Build-System und Asset-Pipeline
- Favicons – Favicon-Generierung
- TYPO3-TCA-Referenz
- TYPO3-Site-Sets
- TYPO3-TypoScript-Referenz
- b13/container