Zum Inhalt springen

Konfiguration

Referenz zur Konfiguration von Site-Sets, Site-Einstellungen, TypoScript und TCA.

MP-Core Logo

Site-Sets (TYPO3 13.4+)

SetZweck
mpc/mp-core (Aggregator)Bindet alle darunter liegenden Feature-Sets in einem Include ein
mpc/mp-core-base (erforderlich)Kernfunktionalität, Vorlagen, Basis-Styling, gemeinsame Einstellungen
mpc/mp-core-containerContainer-Elemente (Akkordeon, Registerkarten, Schieberegler, Raster)
mpc/mp-core-newsIntegration der News-Erweiterung
mpc/mp-core-formKonfiguration des Formular-Frameworks
mpc/mp-core-seoSEO (Open Graph, Twitter Cards, Schema.org, Sitemap)

mpc/mp-core ist ein Aggregator, der auf mpc/mp-core-base sowie auf alle Funktionsumfänge. Es reicht aus, nur mpc/mp-core in Ihre Website einzubinden. Wenn Sie eine fein abgestimmte Steuerung benötigen, fügen Sie mpc/mp-core-base und wählen Sie einzelne Funktionssätze aus.

Rollen festlegen

Rolle festlegenRolle
mpc/mp-coreAggregator + gemeinsame Website-Einstellungen (settings.yaml, settings.definitions.yaml in diesem Ordner)
mpc/mp-core-baseLädt TYPO3-Systemerweiterungen ein; registriert die oben genannten Pfade für gemeinsame Einstellungen; optionale Integrationen, sofern vorhanden
mpc/mp-core-* (Feature)Feature-spezifisches TypoScript und Einstellungen; jeweils abhängig von mpc/mp-core-base nur
 

Wichtig: Beim Erstellen eines benutzerdefinierten Site-Sets muss dependencies: [mpc/mp-core-base, …] — niemals mpc/mp-core. Das Abhängigmachen vom Aggregator eines untergeordneten Sets führt zu einem Rekursions-Deadlock im SetRegistry.

 

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

Aktivieren von Sets

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 gezielt auswählen:

 
dependencies:
  - mpc/mp-core-base
  - mpc/mp-core-container
  - mpc/mp-core-seo
 

Website-Einstellungen

 

Bearbeitbar über Website-Verwaltung → Websites → Einstellungen oder config/sites/[site]/settings.yaml.

Nach Änderungen 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 Standardwerte der Website-Einstellungen befinden sich in Configuration/Sets/mp-core/settings.definitions.yaml und settings.yaml. Der Basissatz verweist lediglich auf diese Dateien.

Quelle: Configuration/Sets/mp-core/

 

Schema-Standarddefault in settings.definitions.yaml (Benutzeroberfläche „Site-Einstellungen“). Ausgelieferter Standardwert – Wert aus settings.yaml wenn es das Schema überschreibt (Spalte = wie im Schema).

 

PIDs

SchlüsselTypStandardwert
PIDs.pidSearchint0
PIDs.pidHomeint1
PIDs.pidMetaNavTopint66
PIDs.pidMetaNavFooterint25
PIDs.pidMainNavMetaint25
PIDs.pidCategoriesint251
PIDs.pidLogosBannerTopint391
PIDs.pidSupplementint24
PIDs.pidWebFontsint0

Konfiguration

SchlüsselTypStandard
config.admPanelboolfalse
config.debugboolfalse
config.noCacheboolfalse
config.removeDefaultJSZeichenketteexternal
config.spamProtectEmailAddressesbooltrue
config.spamProtectEmailAddresses_atSubstZeichenkette[at]
config.absRefPrefixZeichenketteauto
config.headerCommentZeichenkette(leer)

Leistung

SchlüsselTypStandardwert
performance.compressJsboolfalse
performance.compressCssboolfalse
performance.concatenateJsboolfalse
performance.concatenateCssboolfalse
performance.enableLazyLoadingbooltrue
SchlüsselTypSchema-StandardAuslieferungsstandard
navigation.maxDepthint53
navigation.showHiddenPagesboolfalse
navigation.enableBreadcrumbbooltrue
SchlüsselTypStandardwert
search.headerSearchbooltrue
search.autosuggestbooltrue

Meta

SchlüsselTypSchema-StandardwertAuslieferungsstandard
meta.viewportZeichenkettewidth=device-width, initial-scale=1
meta.robotsZeichenketteindex,follow
meta.appleMobileWebAppCapableZeichenketteno
meta.compatibleZeichenketteIE=edge
meta.googleZeichenkettenotranslate
meta.googleSiteVerificationZeichenkette(leer)zPXbpegj_B5wbUDB7aXteJbnbT0IPiTDgsP53on-gRA

Vorlagen & Pfade

SchlüsselTypStandard
basePathZeichenketteEXT:mp_core
pageTemplatesZeichenketteEXT:mp_core/Resources/Private/Templates/Page/
pagePartialsZeichenketteEXT:mp_core/Resources/Private/Partials/Page/
pageLayoutsZeichenketteEXT:mp_core/Resources/Private/Layouts/Page/
pageFaviconsFileZeichenketteEXT:mp_core/Resources/Private/Partials/Page/Favicons.html
contentElementTemplatesZeichenketteEXT:mp_core/Resources/Extensions/fluid_styled_content/Private/Templates/
contentElementPartialsZeichenketteEXT:mp_core/Resources/Extensions/fluid_styled_content/Private/Partials/
contentElementLayoutsZeichenketteEXT:mp_core/Resources/Extensions/fluid_styled_content/Private/Layouts/
containerElementTemplatesZeichenketteEXT:mp_core/Resources/Private/Templates/Container/
containerElementPartialsZeichenketteEXT:mp_core/Resources/Private/Partials/Container/
containerElementLayoutsZeichenketteEXT:mp_core/Resources/Private/Layouts/Container/
pluginsNewsTemplatesZeichenketteEXT:mp_core/Resources/Extensions/news/Templates/
pluginsNewsPartialsZeichenketteEXT:mp_core/Resources/Extensions/news/Partials/
pluginsNewsLayoutsZeichenketteEXT:mp_core/Resources/Extensions/news/Layouts/
pluginsIndexedSearchTemplatesZeichenketteEXT:mp_core/Resources/Extensions/indexed_search/Templates/
pluginsIndexedSearchPartialsZeichenketteEXT:mp_core/Resources/Extensions/indexed_search/Partials/
pluginsIndexedSearchLayoutsZeichenketteEXT:mp_core/Resources/Extensions/indexed_search/Layouts/
contentTypesTemplatesZeichenketteEXT:mp_core/Resources/Private/Templates/Content/
contentTypesGalleryTemplatesZeichenketteEXT:mp_core/Resources/Private/Templates/Content/
resourcesPrivateZeichenketteEXT:mp_core/Resources/Private
resourcesExtensionsZeichenketteEXT:mp_core/Resources/Extensions
structuredDataEnabledbooltrue
structuredData.extraEntity.typeZeichenkettenone
structuredData.extraEntity.nameZeichenkette(leer)
structuredData.extraEntity.descriptionZeichenkette(leer)
structuredData.extraEntity.keywordsZeichenkette(leer)

Container (mpc/mp-core-container)

Quelle: Configuration/Sets/mp-core-container/

SchlüsselTypStandardwert
container.grid.enabledbooltrue
container.grid.defaultColumnsint2
container.grid.maxColumnsint4
container.grid.gutterSizeZeichenkette20px
container.accordion.enabledbooltrue
container.accordion.allowMultipleboolfalse
container.accordion.firstOpenbooltrue
container.tabs.enabledbooltrue
container.tabs.positionZeichenkettetop
container.wrapper.maxWidthZeichenkette1200px
container.wrapper.paddingZeichenkette15px

Nachrichten (mpc/mp-core-news)

Quelle: Configuration/Sets/mp-core-news/

SchlüsselTypStandard
news.list.paginate.itemsPerPageint10
news.list.orderByZeichenkettedatetime
news.list.orderDirectionZeichenkettedesc
news.list.dateFormatZeichenketted.m.Y
news.list.showCategoriesbooltrue
news.list.showTagsbooltrue
news.detail.showBackLinkbooltrue
news.detail.showRelatedbooltrue
news.detail.relatedLimitint3
news.detail.enableCommentsboolfalse
news.media.maxWidthint1200
news.media.maxHeightint800

Formular (mpc/mp-core-form)

Quelle: Configuration/Sets/mp-core-form/

SchlüsselTypStandardwert
form.honeypot.enabledbooltrue
form.confirmationPage.enabledbooltrue
form.requiredFieldMarkerZeichenkette*
form.email.senderNameZeichenketteWebsite Contact Form
form.email.senderEmailZeichenkettenoreply@example.com
form.email.replyToEmailZeichenketteinfo@example.com
form.validation.clientSidebooltrue
form.validation.showInlineErrorsbooltrue
form.storage.saveToDatabaseboolfalse
form.storage.uploadFolderZeichenkette1:/forms/

SEO (mpc/mp-core-seo)

Quelle: Configuration/Sets/mp-core-seo/

SchlüsselTypStandard
seo.meta.defaultDescriptionZeichenkette(leer)
seo.meta.generateDescriptionsbooltrue
seo.meta.maxDescriptionLengthint160
seo.meta.maxTitleLengthint60
seo.meta.titleSeparatorZeichenkette|
seo.openGraph.enabledbooltrue
seo.openGraph.defaultImageZeichenkette(leer)
seo.openGraph.imageWidthint1200
seo.openGraph.imageHeightint630
seo.twitter.enabledbooltrue
seo.twitter.cardTypeZeichenkettesummary_large_image
seo.twitter.siteZeichenkette(leer)
seo.sitemap.enabledbooltrue
seo.sitemap.excludeHiddenPagesbooltrue
seo.sitemap.priorityZeichenkette0.5
seo.canonical.enabledbooltrue
seo.schema.enabledbooltrue
seo.schema.organizationTypeZeichenketteOrganization
seo.schema.legalNameZeichenkette(leer)
seo.schema.alternateNameZeichenkette(leer)
seo.schema.descriptionZeichenkette(leer)
seo.schema.foundingDateZeichenkette(leer)
seo.schema.vatIdZeichenkette(leer)
seo.schema.taxIdZeichenkette(leer)
seo.schema.knowsAboutZeichenkette(leer)
seo.schema.person.jobTitleZeichenkette(leer)
seo.schema.emailZeichenkette(leer)
seo.schema.telephoneZeichenkette(leer)
seo.schema.contactPoint.contactTypeZeichenkettecustomer service
seo.schema.contactPoint.telephoneZeichenkette(leer)
seo.schema.contactPoint.emailZeichenkette(leer)
seo.schema.contactPoint.areaServedZeichenkette(leer)
seo.schema.contactPoint.availableLanguageZeichenkette(leer)
seo.schema.address.streetAddressZeichenkette(leer)
seo.schema.address.addressLocalityZeichenkette(leer)
seo.schema.address.postalCodeZeichenkette(leer)
seo.schema.address.addressRegionZeichenkette(leer)
seo.schema.address.addressCountryZeichenkette(leer)
seo.robots.enabledbooltrue
seo.robots.allowAiBotsbooltrue
seo.robots.crawlDelayint0
seo.robots.additionalZeichenkette(leer)
seo.llmsTxt.enabledbooltrue
seo.llmsTxt.introtext(leer)
seo.llmsTxt.news.storagePidZeichenkette(leer)
seo.llmsTxt.news.detailPageIdint0
seo.llmsTxt.news.limitint5
 

Verwendung von Einstellungen in TypoScript

Website-Einstellungen werden als einfache TypoScript-Konstanten unter ihrem gepunkteten Schlüssel (ohne settings. Präfix), z. B. {$navigation.maxDepth}, {$config.admPanel}, {$PIDs.pidWebFonts}. Die Pfadeinstellungen (pageTemplates, basePath, …) werden zusätzlich mit einem settings. Präfix bereitgestellt, weshalb die mpcSitepackage.* Pfadkonstanten auf {$settings.pageTemplates}.

Für Werte, die zur Renderzeit aufgelöst werden müssen (z. B. innerhalb config, page.metaoder in DataProcessor-Eigenschaften) lesen Sie diese direkt über den site:settings.* Daten-Getter statt über eine Konstante:

 
# Flat constant (resolved at TypoScript parse time)
page.10.dataProcessing.110.levels = {$navigation.maxDepth}

# Runtime getter (preferred for config / meta / processor stdWrap)
config.compressJs.data = site:settings.performance.compressJs // {$config.compressJs}
page.meta.robots.data = site:settings.meta.robots
 

Schriftdesign-Tokens werden nicht über TypoScript verwendet: Sie werden aus den Web-Font-Datensätzen (siehe Web-Fonts) generiert WebFontProcessor und als benutzerdefinierte CSS-Eigenschaften in Resources/Private/Partials/Page/Styles.html.

Web Fonts

Redakteure können benutzerdefinierte Schriftarten selbst hosten (in den Dateimanager hochgeladen oder daraus ausgewählt), anstatt auf Systemschriftarten zurückzugreifen. Diese Funktion ersetzt die bisherigen design.fonts.* Zeichenfolgen-Einstellungen.

Datenmodell

DatensatzTabelleZweck
Web-Schriftfamilietx_mpcore_domain_model_webfontfamilyEine CSS- font-family (Name + Fallback-Stack), zugewiesen zu einer Ziel-CSS-Variablen
Schriftarttx_mpcore_domain_model_webfontfaceEine hochgeladene Schriftdatei pro Strichstärke/Stil (Inline-Element einer Familie)

Das Feld „Gilt für“ einer Familie ordnet diese einer benutzerdefinierten CSS-Eigenschaft zu:

RolleCSS-Variable
Fließtext--bs-body-font-family
Überschriften--bs-font-sans-serif
Benutzerdefinierte CSS-VariableDer --… Name, der im Familieneintrag eingegeben wurde

Editor-Workflow

  1. Erstellen Sie einen Systemordner zur Speicherung der Datensätze und legen Sie dessen Seiten-ID in der PIDs.pidWebFonts Website-Einstellung fest. Belassen Sie die Einstellung auf 0 , um die Datensätze auf der Stammseite der Website zu speichern.
  2. Erstellen Sie im Listenmodul dieses Ordners eine Web-Schriftfamilie: Geben Sie die Schriftfamilie ein name (z. B. Inter), einen fallback Stapel (z. B. sans-serif) ein und wählen Sie „Gilt für“ aus.
  3. Fügen Sie pro Schriftstärke/Schriftart eine Schriftart hinzu. Laden Sie eine woff2 Datei über den Dateimanager aus und legen Sie deren Stärke (100–900) und Stil (normal/kursiv) fest.
  4. Leeren Sie den Frontend-Cache. WebFontProcessor generiert die @font-face Regeln und die :root Variablenzuordnung in den mit einem Nonce versehenen Inline-Block <style> Block in der Seiten- <head>.

Rendering-Pipeline

 
Webfont records (FAL files)
  -> WebFontProcessor (page.headerData.2040.dataProcessing.20)
  -> WebFontCssBuilder (validate + sanitize, build @font-face + :root CSS)
  -> {webFontsCss} in Styles.html
  -> <f:asset.css useNonce="1"> + mpc:format.cssSanitize
 

Alle Werte werden anhand fester Zulassungslisten in WebFontCssBuilder (Gewichtung, Stil, font-display, Dateiformat, benutzerdefinierter Variablenname, unicode-range) überprüft, und der Familienname, der Fallback sowie die URL werden von allen Zeichen bereinigt, die aus der CSS-Deklaration herausfallen könnten, sodass ein vom Angreifer bereitgestellter Wert niemals aus dem Inline- <style> Block entkommen.

Einschränkungen

  • CSP: Selbst gehostete Schriftarten in fileadmin sind „Same-Origin“ und bereits durch font-src 'self' in Configuration/ContentSecurityPolicies.php. Um Schriftarten von einer anderen Domain bereitzustellen, muss diese Herkunft font-src über eine site-spezifische config/sites/<id>/csp.yaml.
  • Backend-Berechtigungen: Administratoren können die Einträge sofort bearbeiten. Backend-Gruppen ohne Administratorrechte benötigen tables_modify (und tables_select) für tx_mpcore_domain_model_webfontfamily und tx_mpcore_domain_model_webfontface.
  • Eine Familie wird nur ausgegeben, wenn sie mindestens ein Gesicht mit einer auflösbaren Schriftartdatei enthält; andernfalls wird das :root Zuordnung wird übersprungen (der Familienname allein würde nichts laden).

Website-Konfiguration (config.yaml)

Über die Website-Einstellungen hinaus erweitert mp-core den Website-Datensatz und die Website-Sprache um Configuration/SiteConfiguration/Overrides/sites.php. Konfigurieren Sie diese unter „Site-Verwaltung“ → „Sites“ → [Site] → „Konfiguration“ (oder unter config/sites/[site]/config.yaml).

Bereich(Beispiele)Hinweise
AnpassungnavType, subnav, subnavOrder, search, copyrightTextnavType: 1 primär, 2 sekundär, 3 tertiär
Faviconsfavicon-96x96-png, faviconIco, faviconSvg, apple-touch-icon, webmanifest, …Dateiverknüpfungen → Resources/Private/Partials/Page/Favicons.html (Favicons & Web-App-Manifest)
Farben & Stilecolor-toggle, color-1color-8, color-primary, stylesstyles fügt benutzerdefiniertes :root CSS ein; lässt sich mit ColorPickerValueItems in TCA
Soziale MediensocialMediaSwitch, Felder für Plattform-URLswerden in SocialMediaProcessor / strukturierte Daten
LogoslogoBig, logoSmall, logoSvg, logoText, logoTextHiddenSprachbezogene Überschreibungen für die Sprachen der Website; gelöst durch HeaderLogoProcessor
Strukturierte-Daten-EntitätextraEntityImageFAL-Dateiverweis für optionale zusätzliche Schema.org-Entität (StructuredDataProcessor); Typ/Name/Schlüsselwörter in den Website-Einstellungen

Sprachspezifische Paletten: copyrightText, Logo-Felder und logoText / logoTextHidden können je nach Sprache der Website variieren.

TypoScript-Struktur

 
Configuration/
├── ContentSecurityPolicies.php     # Frontend CSP mutations auto-applied when
│                                   # the `security.frontend.*ContentSecurityPolicy`
│                                   # feature toggle is on (see "Content Security
│                                   # Policy" below)
├── Services.yaml                   # PSR-4 autowiring for `Mpc\MpCore\*`; explicit
│                                   # `public: true` for DataProcessors and the
│                                   # `ColorPickerValueItems` itemsProcFunc; optional
│                                   # `Services.local.yaml` import (see below)
├── Services.local.yaml             # (optional, gitignored) local-only DI overrides
├── 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
DateiZweck
10.ConfigGrundlegende TYPO3-Konfiguration (Zeichensatz, Sprache, Cache)
20.PageSeitenobjekt, Vorlagenpfade, Datenprozessoren
30.Page.StylesCSS-Einbindungen
40.Page.ScriptsJavaScript-Einbindungen
50.Page.NavigationBündel für bedingte Navigation
60.LibGemeinsam genutzte lib.* Objekte
95.SitePresentationOverridesSocialMediaProcessor, StructuredDataProcessor
ContentElements/tt_content/*Rendering von Inhaltselementen, HeaderLogoProcessor

Abhängigkeitsinjektion (Services.yaml)

Configuration/Services.yaml führt automatisch das Mpc\MpCore\* Namespace und registriert die Dienste, die TYPO3 außerhalb des Containers auflösen muss, als public: true:

ServiceWarum public: true
Mpc\MpCore\DataProcessing\HeaderLogoProcessorWird von TypoScript instanziiert über GeneralUtility::makeInstance()
Mpc\MpCore\DataProcessing\SocialMediaProcessorGleich
Mpc\MpCore\DataProcessing\StructuredDataProcessorGleich
Mpc\MpCore\Middleware\RobotsTxtMiddlewareWird über den DI-Container aus dem PSR-15-Middleware-Stack aufgelöst
Mpc\MpCore\Middleware\LlmsTxtMiddlewareGleich
Mpc\MpCore\UserFunc\ColorPickerValueItemsitemsProcFunc Callback

Nur lokal gültige DI-Überschreibungen (Services.local.yaml)

Die mitgelieferte Services.yaml importiert eine optionale Schwesterdatei mit ignore_errors: not_found, sodass Projekte lokal begrenzte Dienste (Ad-hoc-Helfer, umgebungsspezifische Verknüpfungen) registrieren können, ohne die veröffentlichte Datei zu ändern oder die Container-Kompilierung zu unterbrechen, wenn die Datei fehlt:

 
# Configuration/Services.local.yaml  (gitignored)
services:
  # Example: register a local-only helper or override a service binding.
 

Configuration/Services.local.yaml ist in .gitignore für genau dieses Muster aufgeführt.

Projekt-Tooling (bin/)

Projektinterne Skripte befinden sich in mpcore/bin/ (außerhalb jeglicher Erweiterungs-Repositorys). Vollständige Befehlsreferenz: mpcore/README.md.

Import auf die Doku-Seite (bin/docsite-import.php)
 
php bin/docsite-import.php
php bin/docsite-import.php --dry-run
ddev exec php bin/docsite-import.php --dry-run
 

Von docs-site/: npm run import / npm run import:dry (umschließt dasselbe Skript).

XLF-Sortierung (bin/sort-xlf.php)
 
php bin/sort-xlf.php
php bin/sort-xlf.php --dry-run --package=mp-core
ddev exec php bin/sort-xlf.php
 

Content Security Policy (ContentSecurityPolicies.php)

Configuration/ContentSecurityPolicies.php enthält eine strenge Frontend-CSP, die von TYPO3 13.4+ automatisch angewendet wird, sobald einer dieser Feature-Toggles aktiviert ist (System -> Einstellungen -> Feature-Toggles):

  • security.frontend.enforceContentSecurityPolicy -- Durchsetzungsmodus
  • security.frontend.reportContentSecurityPolicy -- Nur-Berichts-Modus

Die mitgelieferte Richtlinie ändert die TYPO3-Frontend-Standardeinstellungen wie folgt:

DirektiveÄnderungBegründung
default-srcSet 'self'Strenge Grundregel: Alles, was keine eigene Direktive hat, muss aus derselben Quelle stammen.
script-srcExtend nonceProxyInline <script> Blöcke (ThemeInit.html, JSON-LD <script type="application/ld+json">) werden über <f:security.nonce()>.
style-srcExtend nonceProxyInline- <style> Blöcke (Farbüberschreibungen in Styles.html, elementbezogene Hintergrundbilder in fluid_styled_content/Layouts/Container.html) verwenden <f:asset.css useNonce="1">.
img-srcExtend data:„Allow SCSS-emitted inline SVG fallbacks“ (svg-load) und Base64-Platzhalter.
font-srcSet 'self'Alle Webfonts werden selbst gehostet unter Resources/Public/Fonts/.
connect-srcSet 'self'Keine XHR-/fetch-/WebSocket-Anrufe außerhalb der eigenen Herkunft.
object-srcSet 'none'Veraltete Plugins blockieren (<object>, <embed>, <applet>).
base-uriSet 'self'Verhindern von <base href> Injektionsangriffe.
form-actionSet 'self'Formular-POSTs erfolgen ausschließlich an denselben Ursprung.
frame-ancestorsSet 'self'Schutz vor Clickjacking: keine Einbettung über Ursprünge hinweg.

Überschreibungen pro Website

Betreiber können die Richtlinie pro Website über config/sites/<id>/csp.yaml:

 
inheritDefault: true
mutations:
  - mode: extend
    directive: img-src
    sources: ["https://cdn.example.com"]
  - mode: extend
    directive: form-action
    sources: ["https://newsletter.example.com"]
 

Vertrauensgrenze für die Farbkonfiguration der Website

Inline-CSS-Variablen werden Resources/Private/Partials/Page/Styles.html werden nun über den mpc:format.cssColor ViewHelper weitergeleitet, der an Mpc\MpCore\Service\CssColorValidator. Es werden nur syntaktisch gültige CSS-Farben (benannte, #rgb[a], #rrggbb[aa], rgb()/rgba()/hsl()/hsla()) ausgegeben; fehlerhafte oder vom Angreifer bereitgestellte Website-Konfigurationseinträge werden stillschweigend verworfen, sodass sie niemals aus dem Inline- <style> .

Derselbe Validator wird auch in Mpc\MpCore\UserFunc\ColorPickerValueItems , sodass das Dropdown-Menü des Backend-Farbwählers ebenfalls ungültige Felder herausfiltert und die Bezeichnungen auf 200 Zeichen begrenzt.

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.

Überschreibungen durch Erweiterungen

 
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

Navigationsbündel hängen vom Feld „Site-Konfiguration“ ab navType (siehe Configuration/SiteConfiguration/Overrides/sites.php):

navTypeLayout
1Primäre Navigation
2Sekundäre Navigation
3Tertiäre Navigation
[traverse(site("configuration"), "navType") == "1"]
  page.includeJSFooter.navigationPrimary = EXT:mp_core/Resources/Public/JavaScripts/navigationPrimary.js
[END]
 

TCA-Überschreibungen

Schnellübersicht

DateiZweck
tt_content_00_base.phpAssistent für globale Verknüpfungen, Paletten, Vue-To-Do-Liste, CType
tt_content_00_header.phpErweiterte Kopfzeilenoptionen
pages.phpFunktionsschalter, Teaser-Beschreibung, Link-Symbol
sys_category.phpZuordnung zur Hauptkategorie auf Seiten
sys_file_metadata.phpRTE-Beschreibung, Barrierefreiheits-Flag
sys_file_reference.phpGliederungs- und Download-Optionen
sys_template.phpStatische TypoScript-Registrierung

Seitenfelder (pages.php)

FeldTypBeschreibung
newsletterSchaltfeld zum Aktivieren/DeaktivierenAnmeldefeld für den Newsletter
socialmediaAktivierungsfeldLeiste zum Teilen in sozialen Medien
breadcrumbAktivieren/Deaktivieren des KontrollkästchensBreadcrumb-Navigation
headercontainerSchaltfläche zum Aktivieren/DeaktivierenLayout des Kopfzeilen-Containers
teaser_descriptionTextfeldTeaser/Kartenbeschreibung
link_iconDatei (SVG)Symbol für benutzerdefinierten Seitenlink
link_icon_backgroundSchaltfläche zum Aktivieren/DeaktivierenHintergrund des Symbols
FeldTypOptionen
tx_link_switchSchaltfeld umschaltenVerknüpfung aktivieren/deaktivieren
tx_linkLink-AssistentSeite, Datei, URL, Datensatz
tx_link_layoutAuswählenPrimäre/sekundäre/tertiäre Schaltfläche, Link-Stile
tx_link_textTexteingabeBenutzerdefinierter Linktext
tx_link_positionAuswählenMitte, Links, Rechts

Palette: link_config

Benutzerdefinierte Inhaltselemente

ElementDateiBeschreibung
Galeriett_content_gallery.phpResponsive Bildergalerien + Lightbox
Bühnett_content_stage.phpHero-Bereiche (Bild-/Videohintergründe)
Bannertt_content_banner.phpAnpassbare Bannerbereiche
Einzelner Teasertt_content_singleteaser.phpInhalts-Teaser mit Bildern/Links
Akkordeontt_content_accordion.phpZusammenklappbare Bereiche (b13/container)
Registerkartentt_content_tabs.phpRegisterkarten (b13/container)
Slidertt_content_slider.phpSwiper-Karussells (b13/container)
Rastertt_content_grid.phpFlexible Spaltenlayouts (b13/container)
Containertt_content_container.phpGenerischer Wrapper (b13/container)
To-Do-Listett_content_00_base.phpVue.js 3 To-Do-Liste (CType: mpcore_todolist)
Menü-Unterseitentt_content_menu_subpages.phpErweitertes Unterseiten-Menü

Dateimetadaten / Verweise

TabelleFeldBeschreibung
sys_file_metadatadescriptionRTE-Textbeschreibung
sys_file_metadatais_accessibleKennzeichen für Barrierefreiheit
sys_file_referenceoutlineMit Rahmen anzeigen
sys_file_referenceallow_downloadDownload-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

  1. Verwenden Sie vorhandene Paletten aus tt_content_00_base.php und tt_content_00_header.php
  2. Fügen Sie den benutzerdefinierten Feldern das Präfix tx_ , um Konflikte zu vermeiden
  3. Verwenden Sie „LLL:EXT:...“-Referenzen für alle Beschriftungen
  4. Verwenden Sie „displayCond für die bedingte Sichtbarkeit von Feldern: 'displayCond' => 'FIELD:my_toggle:=:1'
  5. Verwenden Sie „Site-Einstellungen“ anstelle von fest programmierten TypoScript-Werten
  6. Beachten Sie die Pfadnummerierung: 0 (Kern), 10 (Erweiterung), 20+ (Projekt)

Weiterführende Informationen

Seite teilen