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 Funktionsumfänge 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ängigkeiten von einem untergeordneten Set über den Aggregator herzustellen, 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

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 „Websiteeinstellungen“). 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üsselTypStandard
performance.compressJsboolfalse
performance.compressCssboolfalse
performance.concatenateJsboolfalse
performance.concatenateCssboolfalse
performance.enableLazyLoadingbooltrue
SchlüsselTypSchema-StandardAuslieferungsstandard
navigation.maxDepthint53
navigation.showHiddenPagesboolfalse
navigation.enableBreadcrumbbooltrue

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}.

Bei Werten, 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 eigene Schriftarten selbst hosten (in den Dateimanager hochgeladen oder von dort ausgewählt), anstatt auf Systemschriftarten zurückzugreifen. Diese Funktion ersetzt die früheren 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-Unterelement 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 Familiensatz 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 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 Strichstärke/Stil eine Schriftart hinzu. Laden Sie eine Datei über den Dateimanager hoch oder wählen Sie eine woff2 Datei über den Dateimanager aus und legen Sie die Stärke (100–900) sowie den Stil (normal/kursiv) fest.
  4. Leeren Sie den Frontend-Cache. WebFontProcessor erzeugt 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 Bezug auf 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 von einem Angreifer bereitgestellter Wert niemals aus dem Inline- <style> .

Einschränkungen

  • CSP: Selbst gehostete Schriftarten mit fileadmin sind „Same-Origin“ und bereits durch font-src 'self' in Configuration/ContentSecurityPolicies.php. Um Schriftarten von einer anderen Domain bereitzustellen, muss diese Herkunft zu 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 die :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 durch Configuration/SiteConfiguration/Overrides/sites.php. Konfigurieren Sie diese unter „Site-Verwaltung“ → „Sites“ → [Site] → „Konfiguration“ (oder unter config/sites/[site]/config.yaml).

BereichFelder (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
Social MediasocialMediaSwitch, 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 bindet automatisch den 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 ü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 ausgelieferte Services.yaml importiert eine optionale Schwesterdatei mit ignore_errors: not_found, sodass Projekte lokal begrenzte Dienste (Tooling-Befehle, Ad-hoc-Helfer) 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:
  Mpc\MpCore\Command\ImportDocumentationCommand:
    tags:
      - { name: console.command, command: 'docsite:import' }
 

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

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-Bericht-Modus

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

DirektiveÄnderungBegründung
default-srcSet 'self'Strenge Grundregel; alles, wofür keine eigene Direktive vorhanden ist, 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, elementspezifisches Hintergrundbild 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-Postbacks erfolgen ausschließlich an denselben Ursprung.
frame-ancestorsSet 'self'Schutz vor Clickjacking: keine Einbettung über Ursprungsgrenzen 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"]
 

Konfiguration der Farbe der Vertrauensgrenze für die Website

Inline-CSS-Variablen in 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 von Angreifern 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 Slots 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 TodoList 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
socialmediaCheckbox-SchalterLeiste zum Teilen in sozialen Medien
breadcrumbAktivierungsfeldBreadcrumb-Navigation
headercontainerSchaltfläche zum Aktivieren/DeaktivierenLayout des Kopfzeilen-Containers
teaser_descriptionTextfeldTeaser-/Kartenbeschreibung
link_iconDatei (SVG)Symbol für benutzerdefinierten Seitenlink
link_icon_backgroundSchaltfeld 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 Abschnitte (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 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 Settings“ anstelle von fest codierten TypoScript-Werten
  6. Beachten Sie die Pfadnummerierung: 0 (Kern), 10 (Erweiterung), 20+ (Projekt)

Weiterführende Informationen

Seite teilen