Suche
156 Treffer
TYPO3 Version 13.4.20
In der Reihe TYPO3 Release-Notizen beleuchten wir regelmäßig die wichtigsten Bug-Fixes/Security-Issues oder wichtigen Änderungen in einem neuen Patchlevel-Release. Diese Releases sind gemäß Roadmap bereits terminiert und erscheinen grob einmal im Monat . Bugs haben je nach Projekt unterschiedliche Auswirkungen. Was in einem Projekt kritisch ist, kann in einem anderen kaum eine Rolle spielen. Unsere Gewichtung ist daher subjektiv und soll die Relevanz anderer Fixes nicht herabspielen . Aktuelles Release Das aktuelle Release ist ein Maintenance-Release. Drei wichtige Performance-Verbesserungen für das Backend: Scroll-Performance , Seitenbaum-Performance und keine Ressourcenerschöpfung bei langlebenden Backend-Sessions in Browser-Tabs. Das CLI-Kommando "cleanup:localprocessedfiles" löscht nicht mehr unnötigerweise zu viele Dateien. Zwei Anpassungen für CSP-Nonces , vor allem im Caching-Context . Mehrere Accessibility-Anpassungen im Rahmen des Accessibility-Codesprints wurden umgesetzt. Der Scheduler-Task zum Leeren der "sys_history" tut nun eben dies nicht mehr, um Audit-Logs und Datenkonsistenz sicherzustellen. Einige Abhängigkeiten wurden angepasst für PHP 8.5 Kompatibilität. Insgesamt gab es 85 Änderungen . Regression-Bugfixes Sehr wichtig Das CLI Kommando "cleanup:localprocessedfiles" löscht nun nicht mehr alle Dateien (seit 13.4.19) sondern nur nicht referenzierte. Wissenswert Die Datei-Erzeugung via ImageBuilder kann in gewissen Szenarien (Classic-Mode, absRefPrefix) einen Pfad erzeugen der zwei Slashes am Anfang enthielt ("//typo3temp") und dann von Browsern als URL falsch aufgelöst wurde. Falls im Extension-Manager Extensions aktiviert werden sollen, die nicht alle Abhängigkeiten erfüllen, wird die Fehlermeldung davon nun wieder korrekt ausgewertet und dargestellt EXT:form Korrekte Fehlerausgabe wenn eine YAML-Form-Definition nicht gespeichert werden kann (z.B. aufgrund von fehlenden Schreibrechten) Die CSS-Fehlerklasse im "AdvancedPassword" Formularelement wird nun korrekt ausgewertet und markiert einen gesamten Elementblock als Fehleingabe Die Sortierung von Formularen im Backend kann nun alle blätterbaren Seiten berücksichtigen, nicht nur die Reihenfolge der Element auf der aktuellen Seite TypoScript Das "hreflang" SiteConfig-Attribut kann im ContentObjectRenderer nun korrekt ausgelesen werden ohne dass der "locale"-Fallback das eigenständige Attribut überschreibt API (Frontend / Extbase) Der Extbase UriBuilder kann nun auch Objekte als Argumente durchreichen, wenn diese das "Stringable" Interface implementieren EXT:webhooks / EXT:reactions Vermeidung einer PostgreSQL-Fehlermeldung bei "GROUP BY" SQL-Abfrage, in der kein "ORDER BY" mehr vorgenommen wird EXT:indexed_search Wissenswert Nutzung der korrekten "search[sortDesc]" Variable um die auf/absteigende Sortierung korrekt zu nutzen Die Kürzung von indizierten Inhalten, die ungültige UTF-8 Zeichen enthalten, führt nun zu keiner PHP-Fehlermeldung mehr Content Security Policy (CSP) Wissenswert CSP Nonces werden korrekt ausgegeben auch wenn die Seite teilweise gecacht wurde Wissenswert Vermeidung von CSP Nonce-Headern wenn diese nicht erforderlich sind (vor allem in Caching-Situationen). Siehe Changelog-Eintrag! Backend: UI Sehr wichtig Deutlich verbesserte Performance des Seitenbaums, vor allem bei vielen gleichzeitig ausgeklappten Elementen Sehr wichtig Behebung eines großen Memory-Leaks, das auftreten kann wenn lang-lebende Browser-Tabs keinen aktiven Login mehr haben, und in einer Endlosschleife Inhalte anfragen (sofern die "SystemInformationToolbar" aktiv ist) und lokal im DOM einhängen. Wissenswert Die Scroll-Performance in Backend-Modulen wurde verbessert Das EXT:redirects-Modul nutzt kein falsches LLL-Sprachlabel mehr für die "Lösch"-Aktion (Accessibility-Sprint): Falls der Farbmodus-Wechsel (Dark/Light-Mode) im Browser deaktiviert ist wird das Wchseln im TYPO3-Backend auch ausgeblendet (Accessibility-Sprint): Kontextmenü-Positionierung korrigiert, wenn dies via Tastatur ausgelöst wurde (Accessibility-Sprint): Der "Live-Suche"-Button im Backend wird nun korrekt mit aria-haspopup-Label ausgezeichnet (Accessibility-Sprint): Aria role=alert für Login-Fehlermeldungen hinzugefügt (Accessibility-Sprint): Zeilenhöhe für Links im Loginfenster verbessert (Accessibility-Sprint): Die Spaltenköpfe im Seiten-Layout-Modul werden nun als semantische Header-Elemente ausgezeichnet (Accessibility-Sprint): Der Fokus-Zustand für "clearable" Input-Elemente wird nun nach Entfernung der Inhalte wiederhergestellt (Accessibility-Sprint): Die "Drag-and-Drop"-Elemente des Seitenbaums werden nun als aria-hidden ausgezeichnet, da sie per Tastaturbedienung nicht zur Verfügung stehen. (Accessibility-Sprint): Aria-Labels für den "Schließen"-Button modaler Fenster eingefügt (Accessibility-Sprint): Korrektur der Rahmendarstellung im Papierkorb-Modul (Accessibility-Sprint): Einbindung eines Aria-Labels für Optionen im Seitenbaum (Accessibility-Sprint): Alle Eingabefelder des Backend-Logins nutzen nun barrierefreie Labels (Accessibility-Sprint): Verbesserte Linkauszeichnung mit Titel-Attribut für "Weitere Optionen..." Button der Datei- und Datensatzliste (Accessibility-Sprint): Löschung von modalen Suchfeldinhalten mit "ESC"-Taste Passwort-Toggle und Capslock-Warnungsfunktion in Loginformularen funktioniert wieder (versehentlich eingeführt im Accessibility-Sprint, nicht Teil des vorherigen TYPO3-Releases) Modals mit "Small" Größe nutzen nun immer eine Mindestgröße Korrektur der "max-height" Berechnung der Höhe von Dropdownbuttons in der Buttonleiste in Backendmodulen zur vermeiden von beschnittenen Scrolleisten Auch Pseudo-Buttons (z.b. in Modals) lösen nun bei keyup/keydown von Enter/Space konsistent wie in Browsern gewöhnt aus Entfernung einer doppelten CSS-Klassenauszeichnung des Linkbrowser-Modals für "Link entfernen" Content-Elemente vom Typ "Shortcut" bieten nun einen Link zum Zielelement in der Backend-Elementvorschau Backend: API Sehr wichtig Der Scheduler-Task zum Leeren von "sys_history" Einträgen wird nicht mehr aktiv ausgeführt. sys_history Einträge sind inzwischen wichtig für Audit-Logs und Datenkonsistenz neuerer TYPO3-Versionen und dürfen daher nicht mehr gelöscht werden! Wissenswert Der Rechte-Check beim Löschen von Inhaltselementen einer kompletten Seite für eingeschränkte Redakteure im DataHandler wird nun anhand aller Datenbankspalten durchgeführt, statt eines eingeschränkten Sets. Somit können diese Datensätze wieder korrekt gelöscht werden. Der Ordner "var/transient" wird im Install-Tool Check nun als automatisch anlegbares Verzeichnis markiert Der Zugriffscheck auf Backend-Module wird nun rekursiv auf allen Ebenen ausgeführt, nicht nur für die ersten zwei. Der "SplitButton" der Button API ermöglicht nun auch dass ein "LinkButton" Element korrekt dargestellt werden kann. Zudem können nun "data" Attributen übergeben werden. Der FAL-Status-Report wertet nun nur noch browsable+online Storages aus, und respektiert somit das "browsable" Attribut Die MFA-RecoveryCodes nutzen nun einen 63-bit statt 64-bit Wert um dne PHP-Beschränkungen korrekt umzugehen Der User-Session Garbage-Collector nutzt nun einen vereinfachten Algorithmus zur Bestimmung der Aufräumwahrscheinlichkeit Vermeidung von Cache-Busting-URI-Erzeugung für Verzeichnisse (statt Dateien) Sicherstellung, dass die OutputCompression Middleware nur einmalig aktiv wird auch bei Request-Bubbling Die link.action und uri.action ViewHelper nutzen dieselben Argumentbeschreibungen Die link.action und uri.action ViewHelper teilen nun untereinander Code zur Vereinheitlichung, und nutzen dieselben Argumente Der Extbase FileSizeValidator kann nun die genutzte Einheit der Dateigröße (bytes, kilobytes, megabytes, ...) mit einer neuen Option "byteSizeUnits" steuern. Der SelectViewHelper nutzt nun die interne Methode zur Erkennung nicht-persistierter Extbase-Objekte statt eines redundanten Checks. Wenn im TCA komplette Wizard-Gruppen für neue Inhaltselemente entfernt werden kann die Sortierung der restlichen Gruppen nun korrekt ausgeführt werden In der Backend-Vorschau von "shortcut"-Elementen werden aufgrund von Veröffentlichungs-Zeitangaben die versteckten Relationen wieder korrekt ausgewertet (auch an an weiteren Stellen, die das GreedyDatabaseBackend nutzen) Die "FIRST_INSTALL" Datei kann nun in Composer-Instalationen auch im Projekt-Root angelegt werden statt nur im "public" Verzeichnis PHP-Typfehler Anpassung für PHP 8.5. Kompatibilität (Aufruf von "ord()") Anpassung für PHP 8.5. Kompatibilität (Aufruf von "null als Array-Offset") Anpassung für PHP 8.5. Kompatibilität (Überarbeitete float-Auswertung für "MathUtility::canBeInterpretedAsInteger") Anpassung für PHP 8.5. Kompatibilität (weitere Überarbeitung von "MathUtility::canBeInterpretedAsInteger") Anpassung für PHP 8.5. Kompatibilität (Indexed Search Lexer, boolean Zugriff als Array) Backend: FormEngine (Accessibility-Sprint): Fokus nach dem Leeren eines Datumsfeldes wird beibehalten Die "DocHeader"-Buttons werden nun beim Neu-Laden eines FormEngine Formulars (z.b. durch Änderung des Element-Typs) deaktiviert, um Race Conditions oder unbeabsichtigte Aktionen zu verhindern. Diese Daktivierungs-Funktion kann auch für ShortcutonButton und PhpDropDown-Buttons gezielt genutzt werden, siehe ChangeLog-Eintrag Backend: CKEditor Durch den CSS-Autoprefixer für das RTE-CSS angepasste Links können etwaige "#" (location-Hash) Parameter nun beibehalten, ohne dass sie fälschlicherweise entfernt werden (z.B. für CSS-Sprites) Backend: EXT:workspaces Die Workspace-Vorschau wertet starttime/endtime besser aus Dependencies Updates von mehreren Dependencies (Symfony und weitere) Update des Color-Pickers "alwan" mit CSS/JS-Anpassungen u.a. für Accessibility Update zum Icon-Set 4.4.1, das Icons mit unterschiedlicher Leserichtung (links-nach-rechts, rechts-nach-links) nutzt Update von phpdocumentor/reflection-docblock für PHP 8.5 Kompatibilität PPW Insights: Lassen Sie sich von digitaler Innovation inspirieren! Jetzt anmelden und digital informiert bleiben
WeiterlesenSo begann alles!
Fotoshooting 2003 an der Zoobrücke in Köln, unmittelbar neben unserem ersten Agentur-Standort. Von links Michael Pietz (Geschäftsführer) und Michael Wild von Hohenborn (Geschäftsführer). Zeitliche Abfolge auf einen Blick Im Jahr 2003 beschlossen der Internetpionier Michael Wild von Hohenborn und der Informatik-Absolvent (Hochschule Bonn-Rhein-Sieg) Michael Pietz mit ihrer Leidenschaft für das Internet und digitale Projekte, eine gemeinsame Existenz zu gründen. Heute ist PPW fest in Köln und Münster verwurzelt, und die beiden Gründer sind stolz auf eine intensive und erfolgreiche Zeit, in der sie Organisationen aus den unterschiedlichsten Branchen in die digitale Zukunft begleitet haben. 2003 Los geht’s – Gründung der pietzpluswild GbR durch Michael Pietz und Michael Wild von Hohenborn und Bezug des Büros am Barbarahof in Köln Riehl. 2006 Kisten packen – Umzug an den Rudolfplatz in schöne Maisonette-Agenturräume, um Platz für mehr Mitarbeitende zu haben. 2008 Aus der pietzpluswild GbR wird im Sommer die pietzpluswild GmbH - Internetagentur Köln. 2010 PPW bildet aus – erster Azubi für den Bereich Mediengestalter/in für Gestaltung und Technik mit dem Schwerpunkt Digital. Es folgen in den weiteren Jahren zwei weitere Azubis für diesen Bereich. 2013 Mitten in Köln auf der Breite Straße, inmitten der belebten Einkaufsstraße zwischen Geschäften, Cafes und Brauhäusern liegt jetzt die Digitalagentur PPW. 2014 Nichts ist beständiger als der Wandel – Kooperation mit Change Management Expertin Christiane Richter, conversio. Gemeinsam entwickeln wir eine passgenaue Digitalisierungsstrategie. 2015 Wir finden, unser Name und unser Corporate Design haben eine Auffrischung verdient. Daher widmen wir uns ausnahmsweise mal ganz uns selbst und unterziehen uns einem Facelift: Aus pietzpluswild wird PPW mit neuem Logo und neuem Erscheinungsbild in Digital und Print. 2017 Auf in neue Gefilde – in Münster wird der zweite Agenturstandort gegründet. Am Kreativkai gelegen ist hier der Standort, an dem UX gelebt wird. Sei es durch die Nähe zum Digital Hub des Münsterlandes oder durch das von unserem Standortleiter Oliver Schirok gegründete UX-Meetup UXMS. 2019 Die Münsteraner Kollegen packen Kartons und Post-its ein. Im neuen Loft-Büro am anderen Ende des Kreativkais hat unser UX-Team mehr Platz für Whiteboards, Workshops und Wachstum. 2020 Nichts ist wie es war. In Corona-Zeiten arbeitet das PPW Team trotzdem nahtlos weiter und hält das Virus auf Distanz und die Projekte am Laufen. 2023 Die Kölner packen wieder Kartons und wechseln das neue Büro am Barbarossaplatz, nach 10 Jahren in der Breite Straße. Weiter geht die Reise im neuen HQ - an einem der zentralsten Standorte in Köln. Hier hat das PPW Team noch mehr Rundumblick und kann zügig in alle Richtungen durchstarten. 2024 Nun steht auch in Münster der nächste Umzug mit Büro-Vergrößerung an. Wir brauchen mehr Platz und mehr Wohlfühlatmosphäre. Im August 2024 ziehen wir an unseren neuen Standort am Dahlweg 120a in Münster. 2025 Dieses Jahr ist bei PPW das Jahr der Agenturvergrößerung. Nachdem genug Platz in den neuen Büroräumen der beiden Standorte vorhanden ist, kommen weitere Mitarbeitende ins PPW und Hello x Team. Es gibt Verstärkung in allen Geschäftsbereichen in Köln und Münster. Weitere Ereignisse anzeigen Unsere Philosophie ... ... für partnerschaftliche Zusammenarbeit Unsere Beratung unterstützt unsere Kundinnen und Kunden langfristig in ihrer gesellschaftlichen, ökologischen und wirtschaftlichen Verantwortung. Unsere Bestandskunden beraten wir seit vielen Jahren und wir gewinnen regelmäßig interessante Projekte und neue Interessenten hinzu. Die Konzentration auf unsere Kernkompetenzen spielt eine wesentliche Rolle unseres gemeinsamen Erfolges. Als verantwortungsvolle Arbeitgeber investieren wir außerdem kontinuierlich in die Weiterbildung unserer Mitarbeitenden und sind auch Ausbildungsbetrieb. Unser Team ist das Herzstück unserer Digitalagentur. Nur durch unsere gemeinsamen Kompetenzen, Teamfähigkeit, Leidenschaft und Motivation werden unsere Agentur-Projekte zu erfolgreichen digitalen Web-Lösungen für unsere Kunden. Digitalagentur Köln mit Standorten in Köln und Münster Es begann nicht in einer Garage!
WeiterlesenTYPO3 14.0 - Inkompatible Änderungen
Umstellungen in der Architektur und bei Schnittstellen, auch Breaking Changes genannt. Diese Änderungen sind für die Entwicklung und Integration spannend, da die notwendigen Anpassungen Zeitaufwand (=Geld) bedeuten. Neben der Entfernung von bisherigen Deprecations (vor allem Entfernung von TSFE und list_type in CType) sind die wichtigsten Änderungen: Die neue System Resource API wird übergreifend für Datei-Auflösung/Einbindung eingesetzt, relevant für Sonderfälle bei absRefPrefix -Nutzung Anpassungen in der Backend Module Button-Komponenten/DocHeader-API; kein "rohes" HTML mehr in den verwandten PSR-14-Events mehr erlaubt Durch Anpassungen im XLIFF-Sprachhandling sind eigene XLIFF-Parser anders zu implementieren. Einige Labels wurden verschoben/angepasst. Bessere Nutzung von Symfony Auto-Configuration/Tagging, macht einige manuelle Registrierungsvorgänge obsolet. Entfernung der Frontend/Background Output-Compression und CSS/JS-Minifizierung Die Nutzung von Fluid v5 hat Auswirkungen auf Typ-Deklaration, CDATA-Parsing und ViewHelper-Entwicklung. Auch "null"-Handling für Tag-Attribute und Namespace-Handling wurden verändert. Die URL-Einstiegspunkte ` typo3/index.php ` und ` typo3/install.php ` existieren nicht mehr als Datei Vorbereitungen für die Entfernung von ` $GLOBALS['TYPO3_REQUEST'] ` durch striktere ` $request `-Middleware-Nutzung Die ` fluid_styled_content->parseFunc ` Vorlage ist auf ein Minimum reduziert Alte Extbase "Annotations" sind nicht mehr gültig Speicherung von ` EXT:scheduler ` Tasks wurde verändert Referenz-Index wird für Extbase-Änderungen standardmäßig nun immer genutzt Einige Änderungen im ` EXT:felog ` Logout-Handling "Einfrieren" von Workspaces entfällt Die composer.json Datei ist nun für alle Extensions verpflichtend, ext_emconf.php reicht nicht mehr aus. Inkompatible Änderungen in der Architektur und Schnittstellen ("Breaking Changes") API / Schnittstellen (Generell) Implementationen für eigene TypolinkBuilder müssen neues Interface nutzen. Zielgruppe: Entwicklung Ein neues TypolinkBuilderInterface ersetzt den alten AbstractTypolinkBuilder , und ermöglicht nun komfortable Dependency Injection und direkten Zugriff auf den Request-Kontext. Eine neue Methode build() ersetzt das alte buildLink() . Eigene TypolinkBuilder müssen dieses neue Interface implementieren oder für die Nutzung des alten Abstracts einige Signaturen anpassen. Weiterführende Dokumentation TypolinkBuilder signature changes Relevante Commits (GitHub) [!!!][FEATURE] Add TypolinkBuilderInterface with automatic DI Wissenswert Entfernung von Environment::getComposerRootPath() . Zielgruppe: Entwicklung Anstelle dieser Method soll nun Environment::getProjectPath() genutzt werden, da durch Vereinheitlichungen im Composer-Installer dieser nicht mehr abweicht im Inhalt des getComposerRootPath() . Weiterführende Dokumentation Environment::getComposerRootPath method removed Relevante Commits (GitHub) [!!!][TASK] Remove Environment::getComposerRootPath() Sehr wichtig Der Einstiegspunkt typo3/index.php ist nicht mehr verfügbar. Zielgruppe: Administration Im Zuge von Konfigurierbarkeit des Backend ist die Erstellung dieser Datei nicht mehr nötig, und wird durch virtuelles Routing (Apache/Nginx-Konfiguration) hergestellt. Weiterführende Dokumentation Deprecated functionality removed Relevante Commits (GitHub) [!!!][TASK] Remove legacy BE entry point handling Sehr wichtig Der Einstiegspunkt "/typo3/install.php" wurde entfernt. Zielgruppe: Administration Das Install-Tool kann nun über den regulären Haupt-Einstiegspunkt "/index.php" geroutet werden. Notfall-Zugriff kann über eine URL-Variable erfolgen. Weiterführende Dokumentation Install Tool now adapts to backend login routing Relevante Commits (GitHub) [TASK] Remove entrypoint "typo3/install.php" Entfernung des SortableCollectionInterface . Zielgruppe: Entwicklung Dieses Interface war nie vollständig implementiert und war zur Verwaltung von Array-Kollektionen vorgesehen. Eigene Implementationen sollten ein eigenes Interface nutzen oder die PHP-Standardmethoden wie usort/uasort nutzen. Weiterführende Dokumentation Remove non-implemented sortable Collection logic Relevante Commits (GitHub) [!!!][TASK] Remove non-implemented sortable Collection logic Der TYPO3\CMS\Core\Charset\CharsetConverter wurde vereinfacht und unterstützt nur noch UTF-8. Zielgruppe: Administration Da mittlerweile Webseiten alle im UTF-8 Zeichenraum betrieben werden ist eine Nutzung anderer Zeichensätze nicht mehr direkt notwendig und im Core eingesetzt. Wer diese Funktionen genutzt hat, kann andere Hilfsbibliotheken hierfür einbinden (oder den alten Code reaktivieren im eigenen Scope). Weiterführende Dokumentation Simplified CharsetConverter Relevante Commits (GitHub) [!!!][TASK] Simplify CharsetConverter Der TYPO3\CMS\Core\Resource\Security\FileNameValidator nutzt nun ein Core-verwaltetes Dateinamensmuster und kann nicht mehr via Konstrukturmethode angepasst werden. Zielgruppe: Integration Hierfür wird nun nur noch $GLOBALS['TYPO3_CONF_VARS']['BE']['fileDenyPattern'] ausgewertet. Weiterführende Dokumentation FileNameValidator no longer accepts custom regex in __construct() Relevante Commits (GitHub) [!!!][TASK] Stateless FileNameValidator Nutzung der Record API in DatabaseRecordList . Zielgruppe: Entwicklung Der zentrale Controller für die Backend-Verwaltung im Listenmodul (Datensätze) nutzt nun die Record API. Diese ermöglicht ein Auslesen der TCA-Werte anhand von vollständig gebauten Objekten, in denen Relationen und weitere Inhalte bereits aufgelöst wurden. Eigener Code der den DatabaseRecordList-Controller anspricht oder XCLASS-t muss bei den Signaturen oder Aufrufen nun Anpassungen vornehmen. Weiterführende Dokumentation Use Record API in List Module Relevante Commits (GitHub) [!!!][TASK] Use Record API in List Module Sehr wichtig Nutzung der Record API im Seitenmodul. Zielgruppe: Entwicklung Die Record-API wird intern nun auch zur Auswertung von Datensätzen im Seitenmodul genutzt. Etwaige eigene Implementationen die den StandardContentPreviewRenderer nutzen, oder auf GridColumnItem zugreifen, oder den PageContentPreviewRenderingEvent nutzen, oder das Vorschaurendering über TypoScript via mod.web_layout.tt_content.preview.[recordType] beeinflussen müssen die Record API ebenfalls berücksichtigen. Beim Einsatz von Content-Blocks ist dies innerhalb der Extension schon bereits früher genutzt worden. Weiterführende Dokumentation Use Record API in Page Module Preview Rendering Relevante Commits (GitHub) [!!!][TASK] Use Record API in Page Module Preview Rendering | [BUGFIX] Access raw data on ColumnItem status determination | [BUGFIX] Fix GridColumnItem isDisabled() evaluation | [BUGFIX] Handle invalid pi_flexform in FormPagePreviewRenderer | [BUGFIX] Allow record type with dots Die Option "zufällige Unterseite" beim Seitentypen "Shortcut" wurde entfernt. Zielgruppe: Redaktion Weiterführende Dokumentation Remove random subpage option of doktype=shortcut Relevante Commits (GitHub) [!!!][TASK] Remove random subpage option of doktype=shortcut Klassen die ModuleInterface implementieren (eher selten, meist wird nur die Module Klasse direkt genutzt, die dieses Interface implementiert) müssen die Methode hasSubmoduleOverview implementieren. Zielgruppe: Entwicklung Weiterführende Dokumentation New method hasSubmoduleOverview() in ModuleInterface Relevante Commits (GitHub) [!!!][FEATURE] Introduce card-based sub module overview Wissenswert Aufgrund der Einführung der neuen System-Resource API wird das Datei-Resolving angepasst. . Zielgruppe: Integration Die Nutzung des Cache-Bustings nun immer standardmäßig aktiv. Zugriff auf Assets auf FAL-Storages ausser "fileadmin" via direkter URL-Eingabe (statt "FAL-Index"-Syntax) ist nicht mehr möglich. Ausserdem liefert die TypoScript "getData" Methode nun eine absolute anstelle einer relativen URI für aufgelöste Pfade. Eine interne Middleware in TYPO3, die den gesamten Seiteninhalt auf das Vorkommen von relativen Dateireferenzen durchsucht hat und bei absRefPrefix -Nutzung in absolute Links verwandelt hat ist nun deaktiviert. Bei Nutzung der korrekten APIs, unter anderem der neuen System Resource API und den ViewHelpern und LinkBuildern/UriBuildern/FAL-API-Aufrufen, wird dies keinen Einfluss haben und verbessert die Performance. Die Option additionalAbsRefPrefixDirectories ist hiermit nun auch hinfällig. Weiterführende Dokumentation Changes in URL generation of system resources | Global frontend content link prefixing removed Relevante Commits (GitHub) [!!!][FEATURE] Introduce System Resource API to resolve files/assets | [!!!][TASK] Avoid global content link rewriting in FE Wissenswert Nutzung des "external" Attributes für Asset-Rendering (z.b. "includeCSS") ist nicht mehr unterstützt und wird durch die neue "URI:" Syntax abgelöst. Zielgruppe: Integration Weiterführende Dokumentation Remove "external" property / option from TypoScript and AssetRenderer Relevante Commits (GitHub) [!!!][FEATURE] Implement relative URIs as system resources Sehr wichtig Button Template Komponenten / Button API. Zielgruppe: Entwicklung Durch die Einfügung von Typ-Deklarationen müssen genutzte Methoden der Button API diese Typen einhalten. Eigene Implementationen des ButtonInterface oder DropDownItemInterface müssen entsprechende Deklarationen enthalten. Alle Icon-Deklarationen der Button APIs sind nun nullable. Parameter der MenuItem::isValid und Menu::isValid Methoden dürfen nicht mehr genutzt werden. Eigene Ableitungen der AbstractButton Klasse müssen die entsprechenden Typdeklarationen beachten. Die neue Button-API hat Änderungen erfordert, die sich in den PSR-14 Events ModifyRecordListRecordActionsEvent und ProcessFileListActionsEvent auswirkt, wie auch DatabaseRecordList::makeControl() . EventListener dieser Events müssen Buttons nun auch via Button API erzeugen, und nicht mehr rohes HTML durchreichen. Weiterführende Dokumentation Strict typing and API cleanup in backend template components | Rework actions to use Buttons API with Components Relevante Commits (GitHub) [!!!][TASK] Modernize backend template components API | [!!!][TASK] Rework actions to use Buttons API Wissenswert Entfernung der "OutputCompression"-Option für Frontend und Backend. Zielgruppe: Administration Die gzip-Kompression und auch die Option zum "CompressionLevel" wurde entfernt; dies wird bessern von Webservern selbst durchgeführt statt im PHP-Scope. Zugehörige Middlewares wurden entfernt, etwaige eigenen Positionierungen von Middlewares mit diesen Identifizieren müssen geprüft werden. Weiterführende Dokumentation Frontend and backend HTTP response compression removed Relevante Commits (GitHub) [!!!][TASK] Remove FE & BE HTTP response compression Bei Nutzung der OutputCompression wurden auch CSS-Dateien "minifiziert", was nun entfällt. Zielgruppe: Administration Weiterführende Dokumentation Frontend CSS file processing no longer removes comments and whitespaces Relevante Commits (GitHub) [!!!][TASK] Avoid rewriting CSS files in FE Sehr wichtig Entfernung der Frontend-Asset-Konkatenierung und Kompression. Zielgruppe: Administration Assets sollten besser über Build-Routinen oder Webserver-Seitige Funktionen komprimiert werden, als mit der leider fehleranfälligen und problematischen PHP-Implementation. Weiterführende Dokumentation Removed frontend asset concatenation and compression | Removed PageRenderer related hooks and methods Relevante Commits (GitHub) [!!!][TASK] Remove FE asset concatenation and compression | [!!!][TASK] Remove FE asset concatenation and compression Sehr wichtig Zusammenführung von FlexFormService und FlexFormTools. Zielgruppe: Entwicklung Die Funktionalität der beiden Klassen wird nun in FlexFormTools zusammengeführt. Etwaige eigene Nutzung der FlexFormService-Klasse muss angepasst werden. Weiterführende Dokumentation Class FlexFormService merged into FlexFormTools Relevante Commits (GitHub) [!!!][TASK] Merge FlexFormService into FlexFormTools Wissenswert Entfernung "TypoScriptFrontendController" (TSFE). Zielgruppe: Entwicklung Durch mehrere Vor-Patches bereits angedeutet (und dort kommentiert, wie man damit umzugehen hat): TypoScriptFrontendController (TSFE) existiert nun nicht mehr als Objekt. Die letzten Reste wurden in den zentralen HTTP RequestHandler überführt. Relevante Commits (GitHub) [TASK] Inline remaining TSFE methods to RequestHandler Sehr wichtig Entfernung von $_GET/$_POST/$_REQUEST Fallbacks. Zielgruppe: Entwicklung Der Fallback-Layer, der die Synchronisierung der superglobalen GET/POST/REQUEST-Arrays durchgeführt hat, wurde abgeschaltet. Ein Zugriff auf Request-Variablen und Attribute darf nur noch regular per PSR HTTP Middleware geschen (dem $request Objekt). Mittelfristig wird auch die globale $GLOBALS['TYPO3_REQUEST'] Variable abgeschaltet werden. Middlewares die auf diese Variable nach typo3/cms-frontend/prepare-tsfe-rendering zugreifen, können sich auf diesen Variableninhalt NICHT mehr verlassen (und sollten besser die $request Variable entsprechend durchschleifen/weiterreichen). Weiterführende Dokumentation Globals _GET and _POST not reset to current Request data anymore Relevante Commits (GitHub) [!!!][TASK] Avoid $_GET / $_POST safety net Entfernung der MailMessage->send Methode (Mailversand über MailerInterface->send() weiterhin möglich). Zielgruppe: Entwicklung Weiterführende Dokumentation MailMessage-> send() removed Relevante Commits (GitHub) [!!!][TASK] Remove MailMessage-> send() Die Registrierung von Benutzer-Backend-Avatar-Providern erfolgt nun mittels Auto-Configuration (via Interface und Attribut #[AsAvatarProvider] ) anstelle von Registrierung in TYPO3_CONF_VARS . Zielgruppe: Entwicklung Weiterführende Dokumentation Remove backend avatar provider registration via :php: $GLOBALS Relevante Commits (GitHub) [!!!][FEATURE] Autoconfigure backend avatar providers Wissenswert Die TYPO3-Implementation des UriInterface für URI-Normalisierungen enthielt einen Fehler bei der Verarbeitung von Pfaden ohne führenden "/" und ohne Protokollangaben. In diesen Fällen hat TYPO3 selbständig einen "/" vorangestellt. Dieser Fehler wurde behoben, kann aber Auswirkungen auf eigene Implementationen haben, falls das alte Verhalten gewünscht war und die auf den führenden Slash angewiesen waren. Zielgruppe: Integration Weiterführende Dokumentation Allow rootless paths in URI implementation Relevante Commits (GitHub) [!!!][BUGFIX] Allow rootless paths in URI implementation Sehr wichtig Die Datei "composer.json" ist nun für Extensions zwingend erforderlich; "ext_emconf.php" reicht nun auch für den Classic mode nicht mehr aus. Zudem wird nun der Extension-Name aus dem ersten Teil der composer.json "description" bezogen. Zielgruppe: Entwicklung Weiterführende Dokumentation Require composer.json in classic mode | Populate extension title from composer.json Relevante Commits (GitHub) [!!!][TASK] Require composer.json in classic mode | [!!!][TASK] Use composer.json only for extension title | [TASK] Update composer package references API: Authentifizierung Die Option passwordTransmissionStrategy von TYPO3\CMS\Core\Authentication\processLoginData wurde entfernt. Zielgruppe: Entwicklung Diese Option stammte noch aus "RSA"-Backend-Loginzeiten. Etwaige Implementationen dieser Authentifizierungsklasse müssen die Methodensignatur von "processLoginData" beachten. Weiterführende Dokumentation Remove static function parameter in AuthenticationService Relevante Commits (GitHub) [!!!][TASK] Remove static function parameter in AuthenticationService API: Backend Die BackendLayout Klasse nutzt strikte Typen. Zielgruppe: Entwicklung Die Nutzung der BackendLayout-Klasse in eigenen Extensions muss nun strikte Typen an Methoden überreichen. Relevante Commits (GitHub) [!!!][TASK] Declare BackendLayout strict EXT:reports ReportInterface und RequestAwareReportInterface entfernt. Zielgruppe: Entwicklung Anstelle einer eigenständigen SystemReport-Registry werden Reports nun mit der regulären neuen "Sub-Modul"-Ansicht ausgewertet. Weiterführende Dokumentation Report interfaces removed Relevante Commits (GitHub) [!!!][FEATURE] Migrate Reports module to native submodule architecture Wissenswert Nutzung von Symfony Autoconfiguration. Zielgruppe: Entwicklung Mehrere Registries nutzen nun Symfony Autoconfiguration anstelle von eigenständiger Registrierung (siehe auch zugehöriges Feature): * Backend Layout DataProviders * Extractor Services * BackendAvatar Provider. Weiterführende Dokumentation Remove backend layout data provider registration via $GLOBALS | Registration of metadata extractors via registerExtractionService Relevante Commits (GitHub) [!!!][FEATURE] Autoconfigure backend layout data providers | [TASK] Convert registerExtractionService deprecation to breaking API: Cache Das Caching-Backend FreezableBackend wurde entfernt. Zielgruppe: Entwicklung Dieses Backend war nie vollständig implementiert und wurde nun entfernt. Weiterführende Dokumentation Remove FreezableBackendInterface Relevante Commits (GitHub) [!!!][TASK] Remove FreezableBackendInterface Die Cache Backends und Frontends nutzen nun strenge PHP Typisierung. Wenn diese in eigenem Code angesprochen werden, muss auf korrekte Typübergaben geachtet werden. Wenn die Klassen erweitert wurden, muss auf übereintimmende Typen für Parameter und Return-Types geachtet werden, vor allem wenn der AbstractBackend Konstruktur aufgerufen wurde. Zielgruppe: Entwicklung Weiterführende Dokumentation Cache Backend and Frontend related changes Relevante Commits (GitHub) [!!!][TASK] Introduce strict typing for Cache BE and FE API: DataHandler Wissenswert Zeitzonen-Handling vereinheitlicht. Zielgruppe: Entwicklung Die Verarbeitung von Datensätzen mit Zeitangaben wurde vereinheitlicht, so dass Zeitzonen-Informationen immer (auch bei Feldern nur mit Uhrzeitangabe, ohne Datumsangabe) korrekt übermittelt werden. Falls eigene Extensions via DataHandler API Inhalte in Feldern speichern, die als TCA type=datetime definiert sind, muss berücksichtigt werden, dass dort nun Zeitzonen-Konvertierungen angewendet werden. Frühere "Hacks" sind nicht mehr nötig (und sinnvoll) um ein korrektes Datumsobjekt zu übertragen. Weiterführende Dokumentation Improved ISO8601 Date Handling in TYPO3 DataHandler Relevante Commits (GitHub) [!!!][FEATURE] Support qualified and unqualified ISO8601 in DataHandler Entfernung der Option storeLogMessages im DataHandler. Zielgruppe: Entwicklung Einträge in sys_log bei DataHandler-Änderungen werden nun immer forciert und können nicht mehr deaktiviert werden. Weiterführende Dokumentation Property DataHandler-> storeLogMessages removed Relevante Commits (GitHub) [!!!][TASK] Remove DataHandler-> storeLogMessages Die public properties copyWhichTables , neverHideAtCopy und copyTree im DataHandler wurden entfernt, um direkt aus dem BE_USER Objekt korrekt ausgewertet zu werden. Zielgruppe: Entwicklung Weiterführende Dokumentation DataHandler: Remove internal property copyWhichTables and properties neverHideAtCopy and copyTree Relevante Commits (GitHub) [!!!][TASK] DataHandler: Remove copy related properties Entfernung von DataHandler->bypassWorkspaceRestrictions . Zielgruppe: Entwicklung Dieses Attribut war nicht mehr notwendig und konnte intern aufgelöst werden. Nutzung der DataHandler API mit diesem Attribut muss entfernt werden. Relevante Commits (GitHub) [TASK] Avoid property DataHandler-> bypassWorkspaceRestrictions API: Entfernung von Deprecations Sehr wichtig Alte Deprecations wurden entfernt. Zielgruppe: Entwicklung Die in TYPO3 v13 als "Deprecated" markierten Änderungen wurden nun als Breaking Change umgesetzt. Die vermutlich relevantesten Änderungen sind die Entfernung von TSFE und tt_content Subtypen ("list_type") zugunsten von CType. Auch für die Finalisierung des Fluid ViewInterface wurde dessen Kompatibilitätslayer nun final entfernt. Weiteres: JavaScript Modul-Namen (und Entfernung kleinerer Hilfsmethoden), ENUM-Ersetzungen, alte Hook-Interfaces, addPageTSConfig und addUserTSConfig , hmac/HashService . Entfernung von: alten Upgrade-Wizards vor TYPO3 v12 Komma-Notation columnsOnly , alten ClassAliasMap s, alten PageTree-Farboptionen, legacy-Icon-Konfiguration (z.B. iconRegistry ) getTcaFieldConfiguration als TCA-Helfer Weiterführende Dokumentation Deprecated functionality removed | Plugin subtypes removed: Changes to configurePlugin() and TCA handling Relevante Commits (GitHub) [!!!][TASK] Remove deprecated enableFields() | [!!!][TASK] Remove deprecated AbstractFile::FILETYPE_* constants | [!!!][TASK] Remove deprecated BackendUtility::thumbCode() | [!!!][TASK] Remove deprecated CacheService-> getPageIdStack() | [!!!][TASK] Remove deprecated class DuplicationBehavior | [!!!][TASK] Remove deprecated class Enumeration | [!!!][TASK] Remove deprecated class IconState | [!!!][TASK] Remove deprecated class InformationStatus | [!!!][TASK] Remove deprecated class SlugEnricher | [!!!][TASK] Remove deprecated code from DiffUtility | [!!!][TASK] Remove deprecated ContentObjectGetDataHookInterface | [!!!][TASK] Remove deprecated ContentObjectGetImageResourceHookInterface | [!!!][TASK] Remove deprecated ContentObjectOneSourceCollectionHookInterface | [!!!][TASK] Remove deprecated ContentObjectPostInitHookInterface | [!!!][TASK] Remove deprecated ContentObjectStdWrapHookInterface | [!!!][TASK] Remove deprecated DatabaseRecordList CSV hooks | [!!!][TASK] Remove deprecated DataHandler checkStoredRecords properties | [!!!][TASK] Remove deprecated doctrine driverMiddleware handling | [!!!][TASK] Remove deprecated EMU addPageTSConfig & addUserTSConfig | [!!!][TASK] Remove deprecated Extbase HashService | [!!!][TASK] Remove deprecated ExtensionManagementUtility::addPItoST43() | [!!!][TASK] Remove deprecated fluid RenderingContext request get&set | [!!!][TASK] Remove deprecated fluid view related code | [!!!][TASK] Activate setRequest() in PageTitleProviderInterface | [!!!][TASK] Use FileType Enum in FAL | [!!!][TASK] Remove Utility.updateQueryStringParameter() | [!!!][TASK] Remove 'extension download' upgrade wizard aliases | [!!!][TASK] Remove ext:fluid fillDefaultsByPackageName() | [!!!][TASK] Remove fallback of comma-separated list for columnsOnly | [!!!][TASK] Remove jQuery compatibility from @typo3/backend/form-engine-validation | [!!!][TASK] Remove legacy class aliases | [!!!][TASK] Remove pageTree.backgroundColor | [!!!][TASK] Remove registered 'class' handling in abstract form VH | [!!!][TASK] Remove RegularExpressionValidator option "errorMessage" | [!!!][TASK] Remove support for instantiating IconRegistry in ext_localconf.php | [!!!][TASK] Remove v12 upgrade wizards | [!!!][TASK] Remove deprecated icon size handling | [!!!][TASK] Remove deprecated method getExtensionIcon | [!!!][TASK] Remove deprecated method getTcaFieldConfiguration | [!!!][TASK] Remove deprecated method returnWebmounts | [!!!][TASK] Remove deprecated methods from FluidViewAdapter | [!!!][TASK] Remove deprecated methods in TypoScriptFrontendController | [!!!][TASK] Remove deprecated methods in DataProviderContext | [!!!][TASK] Remove deprecated PageRepositoryHook interfaces | [!!!][TASK] Remove deprecated plugin and sub types functionality | [!!!][TASK] Remove deprecated plugin and sub types functionality | [!!!][TASK] Remove deprecated smooth migration for renamed navigation ID | [!!!][TASK] Remove deprecated XLIFF files | [!!!][TASK] Remove deprecations in VersionState | [!!!][TASK] Remove upgrade wizards based on policy | [BUGFIX] Correctly remove ctrl subtype* in TCA migration | [BUGFIX] Remove forgotten TypoScript import of List content element API: Events Das Event AfterCachedPageIsPersistentEvent hat nun keinen Zugriff mehr auf den entfernten TypoScriptFrontendController . Zielgruppe: Integration Daten die dort vorher gelagert wurden sind nun im regulären Request-Objekt enthalten. Weiterführende Dokumentation AfterCachedPageIsPersistedEvent no longer receives TypoScriptFrontendController Relevante Commits (GitHub) [!!!][TASK] Have stateless TypoScriptFrontendController Das Event AfterMailerInitializationEvent wurde entfernt. Zielgruppe: Entwicklung Die Maileranpassung kann stattdessen über den Event BeforeMailerSentMessageEvent geschehen, oder über eine eigene Implementation des MailerInterfaces. Weiterführende Dokumentation AfterMailerInitializationEvent removed Relevante Commits (GitHub) [!!!][TASK] Remove useless AfterMailerInitializationEvent API: Extbase Extbase Validatoren müssen nun setRequest/getRequest Methoden implementieren. Zielgruppe: Entwicklung Dies erübrigt sich meist, indem anstelle einer Implementation vom ValidatorInterface direkt der AbstractValidator abgeleitet wird, was meistens der Fall sein sollte. Weiterführende Dokumentation Add setRequest and getRequest to Extbase ValidatorInterface Relevante Commits (GitHub) [!!!][TASK] Add setRequest and getRequest to extbase ValidatorInterface Sehr wichtig Der Referenz-Index bei Extbase-Repositorymethoden wird nun immer aktualisiert. Zielgruppe: Entwicklung Was früher optional war ( config.tx_extbase.persistence.updateReferenceIndex ), ist aufgrund der erhöhten Wichtigkeit eines gültigen Referenz-Indexes nun Pflicht. Alle Extbase-Repositorymethoden passen nun den Referenz-Index an bei Änderungen an Datenstrukturen. Dies kann zu leicht höherem Ressourcenverbrauch führen, gerade bei Persistierung von vielen Extbase-Entitäten. Weiterführende Dokumentation TypoScript Extbase toggle config.tx_extbase.persistence.updateReferenceIndex removed Relevante Commits (GitHub) [!!!][TASK] Always update reference index in Extbase Die PropertyMappingConfigurationInterface Klasse nutzt strikte Typen. Zielgruppe: Entwicklung Code, der das PropertyMappingInterface von Extbase nutzt muss auf strikte Typen achten, Implementationen hiervon müssen die Signaturen entsprechend anpassen. Weiterführende Dokumentation Strong-typed PropertyMappingConfigurationInterface Relevante Commits (GitHub) [!!!][TASK] Introduce type declarations in PropertyMappingConfigurationInterface Die Extbase-Validator Kurznotation wie TYPO3.CMS.Extbase:NotEmpty wurde entfernt. Zielgruppe: Entwicklung Für Validatoren soll stets die Fully-Qualified ClassName Notation (FQCN) genutzt werden, und keine Aliase. Relevante Commits (GitHub) [!!!][TASK] Remove extbase namespaced shorthand validator Wissenswert Einbindung von Extbase-Backendmodulen ohne Seitenbaum wertet TypoScript-Konfiguration anders aus. Zielgruppe: Entwicklung Extbase Backend-Module konnten TypoScript (PageTS Config) anhand einer PID-Auto-Erkennung anwenden. Diese entfällt nun, so dass etwaiges gültiges TypoScript gezielt angesprochen werden muss. Weiterführende Dokumentation Extbase backend modules not in page context rely on global TypoScript only Relevante Commits (GitHub) [!!!][TASK] Stop guessing pid in extbase BackendConfigurationManager API: Datei-Abstraktion (FAL) Wissenswert FAL API erhält PHP Typ-Deklarationen. Zielgruppe: Entwicklung In den FAL API Methoden wurden überall Typisierungen eingefügt. Code, der diese Methoden aufruft oder erweitert, muss daher auf übereinstimmende Typisierung achten. Einige Methoden aus AbstractFile wurden in die spezifischen Implementationen verschoben (rename, copyTo, moveTo). Die Methode rename() wurde aus dem FileInterface entfernt. Das FolderInterface wurde erweitert um einige Pfad/Datei-Methoden, die implementiert werden müssen um künftig bessere Verzeichnis-Treiber zu ermöglichen. Weiterführende Dokumentation File Abstraction Layer related changes Relevante Commits (GitHub) [!!!][TASK] Adapt FAL codebase - Part 2: Align PHP Interfaces Der $charset Parameter von sanitizeFilename wurde entfernt. Zielgruppe: Entwicklung Dieser Methodenaufruf, der im DriverInterface vorgegeben ist, erhält eine leicht andere Signatur, da der Parameter nicht mehr genutzt wurde. Weiterführende Dokumentation Avoid obsolete $charset in sanitizeFileName() Relevante Commits (GitHub) [!!!][TASK] Avoid obsolete $charset in sanitizeFileName() Methoden getIdentifier() und setIdentifier() in der Klasse AbstractFile wurden entfernt. Zielgruppe: Entwicklung Diese Methoden befinden sich bereits in den vom Abstract abgeleiteten Implementationen, und sollten nicht in dem Abstract selbst auftauchen. Eigene Implementationen (unwahrscheinlich) müssen angepasst werden. Weiterführende Dokumentation getIdentifier() and setIdentifier() from AbstractFile removed Relevante Commits (GitHub) [!!!][TASK] Remove (get/set)Identifier() from AbstractFile Anpassung von ProcessedFile / Task . Zielgruppe: Entwicklung In der FAL API ProcessedFile und ProcessedFileRepository sowie dem AbstractTask (Processing) wurden einige Methoden umgeschoben um eine zirkuläre Referenz zu vermeiden. Methodenaufrufe vor allem zu ProcessedFile->getTask() und ProcessedFile->generateProcessedFileNameWithoutExtension() in eigenen Implementationen müssen verändert werden. Weiterführende Dokumentation Circular dependency between ProcessedFile and Task removed Relevante Commits (GitHub) [!!!][TASK] Remove circular dependency between ProcessedFile and Task Entfernung der Datenbankspalten sys_file_metadata.visible und fe_groups . Zielgruppe: Integration Diese Felder wurden im Core nie richtig genutzt. Etwaige eigene Nutzung kann wieder hergestellt werden, indem diese Spalten in eigenem TCA hinzugefügt werden. Weiterführende Dokumentation Removal of fields from sys_file_metadata Relevante Commits (GitHub) [!!!][TASK] Remove fields fe_groups & visible from sys_file_metadata Entfernung der Felder "alternative" und "link" für gewisse FAL Dateitypen. Zielgruppe: Integration Die beiden genannten Felder sind nur noch in der Palette für "Bild"-Dateitypen vorhanden, bei anderen Typen (wie text oder application) werden diese beiden Felder standardmäßig nicht mehr angezeigt. Weiterführende Dokumentation Remove file backwards compatibility for alt and link field Relevante Commits (GitHub) [!!!][TASK] Remove file bw compat for alt and link field Wissenswert Die Klassen LocalPreviewHelper und LocalScropScaleMaskHelper wurden entfernt. Zielgruppe: Entwicklung Dank einer Code-Vereinheitlichung sind diese beiden Klassen im LocalImageProcessor aufgegangen. Dieser kann nun einheitlich Operationen durchführen. Etwaige individuelle Nutzung der Klassen muss angepasst werden. Üblicherweise sollte man nur die Prozessoren direkt nutzen, so dass der Impact gering sein dürfte. Die Klassen waren nicht als API vorgesehen (waren aber nicht intern deklariert). Weiterführende Dokumentation Remove LocalPreviewHelper + LocalCropScaleMaskHelper Relevante Commits (GitHub) [!!!][TASK] Remove LocalPreviewHelper and LocalCropScaleMaskHelper Wechsel der Exception für getSubFolder() Fehler. Zielgruppe: Entwicklung Es wird nun eine spezifische Exception anstelle einer generischen InvalidArgumentException geworfen. Weiterführende Dokumentation Folder-> getSubFolder() throws FolderDoesNotExistException Relevante Commits (GitHub) [!!!][TASK] Throw specific exception in Folder-> getSubFolder() Wissenswert Typisierung der FAL Klassen. Zielgruppe: Entwicklung In mehreren FAL Klassen wurden strikte PHP-Typen eingefügt. Etwaige Aufrufe der FAL API müssen nun typsicher sein. Weiterführende Dokumentation File Abstraction Layer related changes Relevante Commits (GitHub) [!!!][TASK] Use native types and fix proper return types in FAL API: Sprachhandling Das Handling von XLF-Dateien erfolgt nun mittels "symfony/translate". Zielgruppe: Entwicklung Die TYPO3-eigene XLF-Parsing-API wurde zugunsten der Symfony/translate Komponente ausgetauscht. Dies ermöglicht besseres Caching/Warmup. Wer eigene Sprachdateien-Parser geschrieben hat muss ggf. bei Methoden-Aufrufen Signaturen anpassen. Selbstdefinierte Parser werden nun in abweichenden TYPO3-Config-Keys gespeichert. LocalizationFactory::getParsedData() hat eine angepasste Signatur. Weiterführende Dokumentation Localization system architecture changes Relevante Commits (GitHub) [!!!][FEATURE] Use symfony/translation for translatable labels Sehr wichtig TCA-Labels von locallang_tabs.xlf werden durch Kurzformen ersetzt, die bei Ersetzungen von "showitems"-Positionierungen nun beachtet werden müssen. Zielgruppe: Integration Wo bislang "LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf" Referenzen genutzt worden, sind diese nun im kurzen Namensraum "core.form.tabs" nun genutzt. Etwaige "showitem" Ersetzungen die bisher mit String-Vergleichen in TCA-Overrides durchgeführt wurden müssen dies berücksichtigen. Ggf. sollte hierfür eine TYPO3-Versionsweiche eingebaut werden. Weiterführende Dokumentation Core TCA and user settings showitem strings use short form references Relevante Commits (GitHub) [!!!][TASK] TCA: Consolidate tab labels in core.form.tabs | [!!!][TASK] Utilize translation domain TYPO3_USER_SETTINGS showitem API: TCA Neue TCA Option searchable ersetzt searchFields . Zielgruppe: Entwicklung Früher mussten durchsuchbare Spalten einer per TCA konfigurierten Tabelle in der Option searchFields aufgelistet werden. Nun können standardmäßig immer alle Felder durchsucht werden, die gemäß TCA-Definition Wörter enthalten (Typen wie "input" oder "text"). Über das searchable Attribut (nun auf Feld-Ebene, nicht auf gesamter Tabellen-Ebene) können dann einzelne Felder auch wieder aus der Suche ausgeschlossen werden (oder aufgenommen werden, wenn die Automatik das Feld sonst ignorieren würde). Weiterführende Dokumentation TCA control option searchFields removed Relevante Commits (GitHub) [!!!][FEATURE] Introduce "searchable" TCA field option API: TCA / FormEngine Die Spalten "imagewidth/imageheight" in tt_content können nun NULL enthalten. Zielgruppe: Entwicklung Früher wurden hierfür immer Werte "0" gespeichert, nun ist dieses Datenfeld auch mit dem korrekten NULL Wert belegbar. Weiterführende Dokumentation Make tt_content imagewidth/imageheight nullable Relevante Commits (GitHub) [!!!][TASK] Make tt_content imagewidth/imageheight nullable Die TCA-Option "is_static" wurde entfernt. Zielgruppe: Integration Datensätze wie früher static_info_tables müssen nicht mehr hiermit ausgezeichnet werden; TCA-Einstellungen wie "readOnly" oder "editlock" sind hierfür besser geeignet. Daher ist die Option "is_static" entfernt worden. Weiterführende Dokumentation TCA control option is_static removed Relevante Commits (GitHub) [!!!][TASK] Remove TCA control option is_static Die Optionen search.case , search.pid und search.andWhere für TCA Definitionen wurde entfernt. Zielgruppe: Integration Diese Optionen wurden im Backend nicht (mehr) ausgewertet und sind daher nun entfernt worden. Weiterführende Dokumentation Removal of TCA search field configuration options Relevante Commits (GitHub) [!!!][TASK] Remove TCA field related search options Die Optionen interface.maxSingleDBListItems und interface.maxDBListItems wurden entfernt. Zielgruppe: Integration Diese Einstellungen zur individuellen Begrenzung der dargestellten Datensätze einer Tabelle wurden entfernt zugunsten der TSConfig Optionen mod.web_list.itemsLimitSingleTable und mod.web_list.itemsLimitPerTable . Weiterführende Dokumentation TCA interface settings for list view removed Relevante Commits (GitHub) [!!!][TASK] Remove TCA interface settings for list view TCA-Option "eval=year" entfernt. Zielgruppe: Integration Die Beschränkung eines Eingabefeldes auf eine Jahreszahl ergab wenig Sinn und wurde zugunsten regulärer Datumsfelder (oder Textfelder mit min/max) gestrichen. Weiterführende Dokumentation Remove eval method year Relevante Commits (GitHub) [!!!][TASK] Remove year from eval Wissenswert Nutzung von $GLOBALS['TCA'] in den Stamm-TCA-Dateien ist NICHT mehr möglich. Zielgruppe: Integration Diese globale Variable wird nicht mehr an dieser Stelle befüllt und zugänglich gemacht. Nur innerhalb von "TCA-Overrides" kann diese Variable noch genutzt werden. Dieser Schritt sorgt vor, dass mittelfristig $GLOBALS['TCA'] komplett entfernt und durch die TCA Schema API ersetzt werden könnte. Weiterführende Dokumentation $GLOBALS['TCA'] in base TCA files Relevante Commits (GitHub) [TASK] Remove bw compat for $GLOBALS['TCA'] in base TCA files API: TSConfig Doppelte Option mod.web_list.noViewWithDokTypes entfernt. Zielgruppe: Integration Diese Option zur Bestimmung, ob der "Vorschau"-Button für einen Doktype zur Verfügung steht oder nicht ist nun ausschließlich via TCEMAIN.preview.disableButtonForDokType gesteuert. Weiterführende Dokumentation Duplicate doktype restriction configuration removed Relevante Commits (GitHub) [!!!][TASK] Remove duplicate doktype restriction configuration API: TypoScript Sehr wichtig Die TypoScript-Condition "getTSFE" wurde entfernt. Zielgruppe: Integration Aufgrund der TSFE-Entfernung sind Conditions nun mit request-Attributen zu ersetzen. Weiterführende Dokumentation TypoScript condition function getTSFE() removed Relevante Commits (GitHub) [!!!][TASK] Remove TypoScript getTSFE() condition function Sehr wichtig Entfernung von "TSFE->content". Zielgruppe: Integration Durch TSFE-Anpassungen ist im Event "AfterCacheableContentIsGeneratedEvent" die Methode "getController" entfernt worden. Der Inhalt ist dafür nun über ein "getContent()" verfügbar und wird aus einem neuen Request-Attribut "frontend.page.parts" verfügbar gemacht. Hierfür wurde auch in EXT:adminpanel eine leichte Methoden-Signatur-Anpassung nötig, falls dort eigene DataProvider erstellt wurden. Weiterführende Dokumentation Event AfterCacheableContentIsGeneratedEvent changed | Prepare EXT:adminpanel DataProviderInterface change Relevante Commits (GitHub) [!!!][TASK] Refactor TSFE-> content away | [!!!][TASK] Refactor TSFE-> content away Nutzung des neuen Request-Attributs frontend.page.parts zum Speichern des SYS_LASTCHANGED Eintrags, statt in einem TSFE register. Zielgruppe: Entwicklung Die Nutzung von register:SYS_LASTCHANGED im Frontend ist weiterhin möglich, intern wird dies jedoch anders hinterlegt und ausgewertet. Relevante Commits (GitHub) [BUGFIX] Avoid storing FE "last changed" in register Nutzung eigener "Register" anstelle der TSFE-Register. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Model TS "register" as request attribute Das (intern genutzte) Attribut contentType vom TSFE wurde in das neue Request-Attribut " rontend.page.parts verschoben. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Move FrontendTypoScriptController-> contentType Das alte Attribut TSFE->config['config'] wird nun überall aus dem Request-Attribut frontend.typoscript (seit TYPO3 13 verfügbar) bezogen . Zielgruppe: Integration Relevante Commits (GitHub) [TASK] Avoid TypoScriptFrontendController-> config['config'] Sehr wichtig Der TypoScriptFrontendController wurde zustandslos, was dessen finale Entfernung ermöglicht. Zielgruppe: Integration Alle Zugriffe auf $GLOBALS['TSFE'] , $request->getAttribute('frontend.controller') und AbstractContentObject->:getTypoScriptFrontendController() werden nun scheitern und müssen durch gezielte andere Variablenzugriffe ersetzt werden. Dieser Patch ermöglicht nun auch den Zugriff auf "additionalHeaderData" und "additionalFooterData" nun durch einen Zugriff im PageRenderer zu ersetzen. Weiterführende Dokumentation Removed TypoScriptFrontendController Relevante Commits (GitHub) [!!!][TASK] Have stateless TypoScriptFrontendController Wissenswert Dynamische Aufrufe von PHP-Code via TypoScript (z.B. userFunc ) müssen nun mit einem Attribut #[AsAllowedCallable] markiert werden, um unsichere bzw. ungewollte Code-Aufrufe zu vermeiden. Zielgruppe: Integration Weiterführende Dokumentation Enforce explicit opt-in for TypoScript/TSconfig callables Relevante Commits (GitHub) [!!!][TASK] Enforce explicit opt-in for TypoScript/TSconfig callables Backend: API Sehr wichtig Aufgrund der Änderung des "Externe Seite"-Seitentyps ist das Feld "pages.url" entfernt geworden, da das neue Element "link" verwendet. Falls das alte Feld nach Ausführung des Migrationswizards hinaus genutzt werden soll, kann es manuell wieder hinzugefügt werden. Zielgruppe: Entwicklung Weiterführende Dokumentation Field "url" in table "pages" has been removed Relevante Commits (GitHub) [!!!][FEATURE] Enhance page type Link to fully support typolinks Backend: User-Interface / Darstellung (UI) Sehr wichtig Ersetzung der Bootstrap-"Modal"-Komponente durch native Dialoge. Zielgruppe: Integration Die Nutzung von *.bs.modal Events ist nicht mehr möglich, Bootstrap-Markup wird nicht mehr genutzt. Die TYPO3-spezifischen Modal-Events bleiben verfügbar ( typo3-modal-shown, typo3-modal-show ). Weiterführende Dokumentation Migrate Modal component from Bootstrap to native dialog Relevante Commits (GitHub) [!!!][TASK] Migrate Modal component from Bootstrap to native dialog | [BUGFIX] Fix dropdowns in element browser Die Standardsprache ("0") wird nun im Seitenmodul-Sprachvergleich immer als Referenz herangezogen und dargestellt. Die TSConfig-Option mod.web_layout.defLangBinding wird nicht mehr ausgewertet. Zielgruppe: Redaktion Weiterführende Dokumentation Default language binding in layout module Relevante Commits (GitHub) [TASK] Always use default language binding in page module Die Prüfung des Referenz-Index wurde ins Install-Tool verlagert, um dort zugänglicher zu sein für reguläre System-Administrationsaufgaben, und war vorher zu versteckt. Der Referenz-Index hat für neuere TYPO3-Versionen eine sehr hohe Bedeutung und muss aktuell gehalten werden. Zielgruppe: Administration Weiterführende Dokumentation Reference Index check moved to Install Tool Relevante Commits (GitHub) [DOCS] Add changelog entry for Reference Index Check migration FormEngine CSS wurde von Bootstrap col/row Klassen auf eigenes CSS-Grid umgestellt. Falls eigene Backend-CSS-Anpassungen diese internen (!) Klassen angesprochen haben, müssen Sie angepasst werden. Zielgruppe: Integration Weiterführende Dokumentation DataHandler properties userid and admin removed Relevante Commits (GitHub) [TASK] Replace Bootstrap grid with CSS Grid in FormEngine field groups | [TASK] Remove Bootstrap progress bar styles CKEditor (WYSIWYG-Komponente im Backend) CKEditor wertet nun "DarkMode"-Fähigkeiten aus zur Darstellung von Inhalten im Backend. Zielgruppe: Redaktion Weiterführende Dokumentation Enable "Light/Dark Mode" context awareness for CKEditor RTE by default Relevante Commits (GitHub) [!!!][TASK] Set default light/dark context awareness for CKEditor Cache Die internen und sinnfreien Methoden CacheHashCalculator::setConfiguration() und ::with() wurden entfernt. Zielgruppe: Entwicklung Weiterführende Dokumentation Remove superfluous CacheHashCalculator public methods Relevante Commits (GitHub) [!!!][TASK] Remove superfluous CacheHashCalculator public methods Datenbank-Abstraktionsschicht (DBAL) TCA-SQL-Felddefinitionen, die zwischen CHAR/BINARY und VARCHAR/VARBINARY unterschieden haben werden nun korrekt an die Datenbankschicht übertragen, statt wie früher in VAR... zwangskonvertiert zu werden. Zielgruppe: Administration Weiterführende Dokumentation Create CHAR and BINARY as fixed-length columns Relevante Commits (GitHub) Details Bei nutzung des GUID Datentypes (type=uuid) für PostgreSQL Instanzen ändert sich der native Datenbanktyp und kann bei bislang ungültig gespeicherten Datensätzen Fehler verursachen. Weiterführende Dokumentation Use doctrine GUID type for TCA type=uuid Relevante Commits (GitHub) [!!!][TASK] Use DB-level GUID Type for TCA type=uuid DataHandler Die internen DataHandler properties $userid und $admin wurden entfernt. Diese werden ggf. von Extensions verwendet, und sollten aber über die BE_USER property ausgelesen werden. Zielgruppe: Entwicklung Weiterführende Dokumentation DataHandler properties userid and admin removed Relevante Commits (GitHub) [FOLLOWUP] Add important RST for DataHandler property removal EXT:felogin (Benutzerlogin) Sehr wichtig Logout-Handling wurde verändert. Zielgruppe: Integration Die Anpassung des Logout-Handlings erfordert Änderungen, falls das "Logout"-Template von EXT:felogin angepasst wurde. Dort müssen URI-Argumente verändert werden. Zudem wurde die Funktion entfernt, nach dem Logout einen URL-basierten Redirect durchzuführen. Weiterführende Dokumentation Change logout handling in EXT:felogin | Do not perform redirect in EXT:felogin logoutAction Relevante Commits (GitHub) [!!!][TASK] Change logout handling in ext:felogin | [!!!][TASK] Do not perform redirect in ext:felogin logoutAction Entfernung der Option exposeNonexistentUserInForgotPasswordDialog . Zielgruppe: Integration Für eine erhöhte Sicherheit ist diese Option nun nicht mehr aktivierbar, die dafür sorgte dass beim "Passwort vergessen" Login offenbart werden konnte ob es einen Account zu einer E-Mailadresse gibt oder nicht. Weiterführende Dokumentation Remove exposeNonexistentUserInForgotPasswordDialog setting in EXT:felogin Relevante Commits (GitHub) [!!!][TASK] Remove exposeNonexistentUserInForgotPasswordDialog setting EXT:fluid_styled_content Sehr wichtig Entfernung der Standard- parseFunc . Zielgruppe: Integration Die standardmäßig ausgelieferte parseFunc (und parseFunc_RTE ) TypoScript-Definition ist nun auf ein Minimum eingestellt. HTML-Parsing soll vor der Persistierung geschehen, so dass in der Frontend-Ausgabe nur minimale Modifikationen nötig sein sollten. Eigene Definitionen der parseFunc sind weiterhin möglich, lediglich wenn man sich bisher auf die EXT:fluid_styled_content Definition vorher verlassen hat, ist eine Überprüfung und eigenständige Anpassung nötig. Weiterführende Dokumentation Default parseFunc configuration for Fluid Styled Content Relevante Commits (GitHub) [!!!][TASK] Remove default parseFunc configuration for FSC EXT:form (Formularverwaltung) Mehrere alte Hooks in EXT:form wurden durch neue PSR-14 Events ersetzt. Zielgruppe: Entwicklung PSR-14 Events sind flexibler und leichtgewichtiger in der technischen Implementation als Hooks. Mehrere neue Events wurden zudem gezielt für EXT:form eingefügt, so dass individuelle Anpassungen besser möglich sind (siehe Features). Weiterführende Dokumentation Removed "beforeFormDelete" hook | Removed "initializeFormElement" hook | Removed "beforeRemoveFromParentRenderable" hook | Removed "beforeFormSave" hook | Removed "beforeFormCreate" hook | Removed "beforeFormDuplicate" hook | Removed "beforeRendering" hook | Removed "afterBuildingFinished" hook | Removed "afterSubmit" hook | Removed "afterInitializeCurrentPage" hook Relevante Commits (GitHub) [!!!][FEATURE] Add PSR-14 Event before form deletion | [!!!][FEATURE] Add PSR-14 Event before renderable is added to form | [!!!][FEATURE] Add PSR-14 Event before renderable removed | [!!!][FEATURE] Add PSR-14 Event to manipulate form before saved | [!!!][FEATURE] Add PSR-14 Event to manipulate form creation | [!!!][FEATURE] Add PSR-14 Event to manipulate form duplication | [!!!][FEATURE] Add PSR-14 Event before renderable is rendered | [!!!][FEATURE] Add PSR-14 Event after form is built | [!!!][FEATURE] Add PSR-14 Event before renderable is validated | [!!!][FEATURE] Add PSR-14 Event after current page is resolved Wissenswert Methode AbstractFinisher->getTypoScriptFrontendController entfernt. Zielgruppe: Entwicklung Die Methode des Finishers existiert nicht mehr, da das gesamte TSFE Objekt in TYPO3 14 entfernt wurde. Aufrufe in eigenen Finishern müssen entsprechend auf die Request-Attribute zurückgreifen. Weiterführende Dokumentation Removed EXT:form AbstractFinisher-> getTypoScriptFrontendController() Relevante Commits (GitHub) [!!!][TASK] Remove AbstractFinisher-> getTypoScriptFrontendController() Wissenswert Entfernung der alten Form-Templates (prä-Bootstrap). Zielgruppe: Integration Die "version2" ist nun das einzige ausgelieferte Template. Weiterführende Dokumentation Remove legacy form templates Relevante Commits (GitHub) [!!!][TASK] Remove legacy form templates EXT:lowlevel (Systemadministration) Das Backendmodul "Database Relations" wurde entfernt. Zielgruppe: Administration Ein Info-Modul zur Ausgabe von Datenbankrelationen im "DB-Check" Modul wurde entfernt, da es wenig Mehrwert brachte. Weiterführende Dokumentation Remove "Database Relations" backend module Relevante Commits (GitHub) [!!!][TASK] Remove "Database Relations" backend module EXT:scheduler (Task-Planer) Wissenswert Strukturelle Veränderungen im Task-Planer: Konfiguration als TCA, keine serialisierten Objekte mehr. Zielgruppe: Entwicklung Der Scheduler wurde einer deutlichen Modernisierung unterzogen. Die früher problematische Speicherung der Tasks basierte auf serialisierten Objektdaten, die fehleranfällig waren. Nun sind die Tasks alle mit Formengine+TCA statt eigener Daten-Provider umgesetzt, speichern ihre Parameter in leicht auslesbaren JSON-Feldern, und nutzen auch ansonsten native Datenbankfelder für Parameter. Eine Datenbankmigration hierfür ist vorhanden. Alte Tasks können weiter laufen, aber eine Konvertierung zu "nativen Tasks" bringt alle TCA-Vorteile mit sich. Als Ausblick wird auch das Ausführen eines beliebigen Tasks mittels CLI möglich sein, ohne einen Task in ein Symfony Command konvertieren zu müssen. Die Option zur Einstellung von Scheduler-Task-Frequenzen ( TYPO3_CONF_VARS.SC_OPTIONS.scheduler.frequencyOptions ) wurde als Breaking Change in ein TCA Override überführt. Weiterführende Dokumentation Scheduler frequency options moved to TCA Relevante Commits (GitHub) [!!!][FEATURE] Make scheduler task timing options extensible via TCA Wissenswert Die Speicherung der Datenbankfelder für Planer-Tasks tx_scheduler_task nutzt nun nicht mehr serialisierte PHP-Objekte, sondern native JSON-Definitionen. Daher haben sich Feldtypen strukturell geändert. Zielgruppe: Administration Weiterführende Dokumentation Changed database storage format for Scheduler Tasks Relevante Commits (GitHub) [TASK] Migrate scheduler database to new storage format EXT:seo (Suchmaschinenoptimierung) Anpassung URI-Parameter "page" und "sitemap" bei Sitemap-URIs. Zielgruppe: Integration Die beiden Parameter sind nun als Unter-Array-Key von "tx_seo[]" verortet. Etwaige manuelle URL-Aufrufe hiervon müssen angepasst werden, wobei die Erzeugung der URLs üblicherweise nur Sitemap-intern ausgeführt wurde. Weiterführende Dokumentation Move GET parameters in sitemap into namespace Relevante Commits (GitHub) [!!!][TASK] Move sitemap GET parameters into namespace EXT:workspaces (Workflows) Wissenswert Das "Einfrieren" von Workspaces ist nun nicht mehr möglich. Zielgruppe: Redaktion Die Implementation hatte mehrere Fehler, so dass diese Funktionalität vorerst ersatzlos entfernt wurde, da die Nutzung in der Community nicht aktiv gewünscht wurde, und die Korrektur viel Zeit gekostet hätte. Weiterführende Dokumentation Workspace "Freeze Editing" removed Relevante Commits (GitHub) [!!!][TASK] Remove workspace 'Freeze Editing' Extbase Die Nutzung von "Extbase Annotations" (z.b. @Validate ) ist nicht mehr möglich und muss durch PHP-Attribute (z.B. #[Validate()] ) ersetzt werden. Zielgruppe: Integration Die bekannten "phpdoc" Annotationen wie @var und @param bleiben unangerührt, hier geht es um den Austausch durch "Annotationen" durch "PHP-Attribute" wodurch es für die Introspection sinnvoller nutzbar ist. Die alten Namespaces der Annotationen bleiben auch für 1:1 Ersetzung durch PHP-Attribute nutzbar, ansonsten sollte für sauberen Code der Namespace TYPO3\CMS\Extbase\Attribute nun genutzt werden. Weiterführende Dokumentation Removed support for annotations in Extbase Relevante Commits (GitHub) [!!!][TASK] Drop support for Extbase Annotations Strenge PHP-Typisierung der Extbase Argument -Klasse. Zielgruppe: Entwicklung Weiterführende Dokumentation Use strict types in Extbase class Argument Relevante Commits (GitHub) [!!!][TASK] Use strict types in Extbase Argument Wissenswert Von Extbase-Plugins gesetzte HTTP Header können nun zentral ausgewertet werden (z.B. Set-Cookie Aufrufe) und als eigenständige Header ausgegeben werden (anstelle mit Komma verbunden). Dies kann Auswirkung auf etwaige bisherige Verarbeitung von Extbase-Plugins haben. Zielgruppe: Entwicklung Weiterführende Dokumentation Streamline PSR-7 Response Header Handling Relevante Commits (GitHub) [!!!][TASK] Streamline PSR-7 response header handling Ein als nullable => true definiertes Feld wird in der Datenbank nun auch als DEFAULT NULL gespeichert. Falls Extbase-Models auf derartig definierte Datenbankspalten zugreifen muss darauf geachtet werden, dass die Modelle auch mit NULL Werten nun umgehen können. Zielgruppe: Administration Weiterführende Dokumentation Allow DEFAULT NULL for varchar fields Relevante Commits (GitHub) [BUGFIX] Allow DEFAULT NULL for VARCHAR Flexforms Wissenswert ds_pointerField für FlexForms entfernt / vereinfacht, FlexFormTools API-Aufruf angepasst. Zielgruppe: Entwicklung Die Definition von Flexforms hat sich in der TCA Syntax etwas verändert, so dass die "ds" Einträge nun direkt im pi_flexform TCA-Eintrag definiert werden, und via columnOverrides für andere pointer -Typen Felder definiert. Eine automatische TCA-Migration kann einfache Felddefinitionen dynamisch konvertieren, bei mehrfach-Einträgen muss dies jedoch manuell (oder z.B. via Rector) geschehen. Eigene Aufrufe der FlexFormTools-Methoden müssen ggf. auch angepasst werden um die Schema-Parameter zu übermitteln. Weiterführende Dokumentation Remove pointer field functionality of TCA flex Relevante Commits (GitHub) [!!!][FEATURE] Remove ds_pointerField and simplify FlexForm handling Fluid Sehr wichtig Fluid v5. Zielgruppe: Integration - Variablennamen dürfen nicht mehr mit einem Unterstrich ("_") beginnen! - CDATA Sektionen in Templates werden nicht mehr entfernt (sondern interpretiert) - render() Methoden-Deklarationen in Fluid ViewHelpern müssen nun strikte Typ-Deklarationen nutzen, vor allem für den Return-Type. - Mehrere Variablen/Methoden im AbstractViewHelper und dem ViewHelperInterface wurden entfernt: $childNodes, setChildNodes . - Namespaces werden nun nicht mehr vererbt (in Partials), sondern müssen immer einzeln pro Datei deklariert werden. - Der CompileWithRenderStatic Trait wurde entfernt, alle ViewHelper müssen nun render() nutzen. - "null" in Argumenten bei ViewHelper-Aufrufen, die den TagBuilder nutzen um HTML-Attribute zu setzen werden nun nicht mehr ausgegeben; leere Attribute müssen mit einem leeren String erzeugt werden, um nicht zu entfallen. - Namespaces können nur noch mit URIs (die den Pfad zur PHP-Datei enthalten) und nicht mehr reinen PHP-Klassennamen definiert werden. - Mehrere Änderungen im "TemplatePaths" Objekt (nur für Fluid-Parser-Erweiterungen relevant, unüblich) Weiterführende Dokumentation Strict Types in Fluid ViewHelpers | Disallow Fluid variable names with underscore prefix | CDATA sections in Fluid templates no longer removed Relevante Commits (GitHub) [TASK] Avoid unintentional null value for form ViewHelpers | [TASK] Avoid unintentional null value for form ViewHelpers | [TASK] Avoid unintentional null value for form ViewHelpers | [TASK] Require Fluid Standalone ^5.0.1 | [!!!][TASK] Update Fluid Standalone to 5.0 Wissenswert Der <f:form.password> ViewHelper gibt nun Inhalte von Passwort-Feldern nach Validierung nicht mehr im Klartext zurück. Zielgruppe: Integration Grundsätzlich sollten Passwörter nicht im Klartext ausgeliefert werden, und es ist gewohntes Verhalten auf Webseiten bei Fehlern das Passwort erneut eintragen zu müssen. Weiterführende Dokumentation Add respectSubmittedDataValue argument in password ViewHelper Relevante Commits (GitHub) [!!!][TASK] Add respectSubmittedDataValue argument in password ViewHelper Frontend: Middleware Wissenswert Anpassung Frontend-Middlewares. Zielgruppe: Entwicklung Durch den Ausbau von TSFE/TypoScriptFrontendController wurden die Middlewares typo3/cms-frontend/tsfe und typo3/cms-frontend/prepare-tsfe-rendering zusammengeführt. Etwaige eigene Middlewaresortierung muss sicherstellen, dass die gewünschte Reihenfolge vor/nach dem Typoscript-Setup weiterhin besteht! Relevante Commits (GitHub) [TASK] Merge FE init and preparation middlewares Sicherheit Nutzung von stärkeren cryptografischen Algorithmen in der HMAC Erzeugung. Alte Hashes werden hierdurch invalidiert, was bei Durchführung eines Major-Updates kein Problem darstellen sollte. Zielgruppe: Entwicklung Weiterführende Dokumentation Use stronger cryptographic algorithm for HMAC Relevante Commits (GitHub) [!!!][TASK] Use stronger cryptographic algorithm for HMAC TCA Die TCA-Parameter "append" und "prepend" vom ValuePicker wurden entfernt. Zielgruppe: Integration Weiterführende Dokumentation Drop prepend and append modes from TCA value picker Relevante Commits (GitHub) [!!!][TASK] Drop prepend and append TCA modes from Value Picker Zurück: Neue Funktionen und Features Weiter: Bugfixes und Verbesserungen Mit unserem festangestellten Mitarbeiter Garvin Hicking unterstützen wir aktiv die TYPO3-Entwicklung. Er arbeitet im Core-Merger Team des OpenSource Projekts mit, und ist daher über die neuesten Entwicklungen bestens informiert. In unseren Artikelserien zu TYPO3-Releases beleuchtet er detailiert (und garantiert ohne KI-Automatik) wichtige Änderungen. Garvin Hicking Senior Developer garvin.hicking(at)ppw.de
WeiterlesenTYPO3 14.0 - Neue Funktionen und Features
Spürbare Verbesserungen im Bereich Content-Erstellung und neue Schnittstellen oder Funktionen. Dieser Bereich ist sicher für alle der Spannendste, denn hier geht es um die wirklich spürbaren Fortschritte bei TYPO3. In diesem Bereich zeigen wir auch einige Screenshots zur Auflockerung. Die spannendsten Neuigkeiten in der 14.0 Version sind: Redaktion: Ein neues “fresh” Theme im Backend Umstrukturierungen bei den Backend-Modulen: Bessere Namen (Terminologie), Reihenfolgen, Button-Leisten, zentrale “Breadcrumb” mit Seiten/Element-Bezug Ein neuer Übersetzungs-Wizard Verbesserte Lokalisierungs-Ansichten (individuell wählbare Sprachen) Modernisierte Dashboard-Widgets mit individueller Konfiguration Die Datei-Liste mit Uploadmöglichkeiten wurde modernisiert Bessere Wizards für Content-Erstellung und Task-Planer-Objekte (" Zuletzt genutzt ") Redirects können nun Typen besitzen, um z.B. stabile “ QR-Codes ” als Weiterleitungsziel zu definieren Entwicklung: Generalüberholter “Planer” (nun auf TCA-Basis), eigene Symfony Commands können nun leicht “non-schedulable” definiert werden Zentrale Konfiguration für Standard-Format aller Thumbnail-Konvertierungen (z.b. “webp” oder “heic/heif”) Neue System Resource API für eine einheitliche, zuverlässige Verarbeitung von Resourcen und Assets Viele neue PSR-14 Events (z.B. für Formulare, Live-Suche, Seitenbaum-Filterung, RTE-Konfiguration zur Nutzung anderer WYSIWYG-Tools als nur CKEditor) Fluid 5 mit zahlreichen neuen ViewHelpern, Cache-Warmup und individueller Dateiendung TCA Typ “Country” mit schnellem Zugang für die Speicherung und Verarbeitung von Länder-Angaben (Country API). Übersetzung mit symfony/translate , XLIFF 2.0 support, verkürzte Sprachlabel ("backend.modules.layout" statt “LLL:EXT:backend/Resources/Private/Languages/locallang_layout.xlf”) Automatische Vervollständigung für CLI bin/typo3 Befehle Encryption/Cipher API für symmetrische Verschlüsselung Neue, moderne “ComponentFactory” und Breadcrumb API für einfache Button API Nutzung Zahlreiche erleichtere Symfony Dependency Injection und Auto-Configuration Möglichkeiten Neue “itemsProcessors” TCA-Funktion anstelle der alten “itemsProcFunc” Verbessertes DateTime Handling mit Zeitzonen Neue Funktionen und Schnittstellen API / Schnittstellen (Generell) Zentraler SEO RecordTitleProvider für das Setzen des Seitentitels, so dass nicht immer ein eigener Provider erstellt werden muss. Zielgruppe: Integration Weiterführende Dokumentation Provide record title tag provider Relevante Commits (GitHub) [FEATURE] Provide SEO record title provider Goodie Neuer Encryption Service für symmetrische Verschlüsselung mit einem shared secret (XChaCha20-Poly1305) als Nutzung für Extensions und den Kern. Zielgruppe: Entwicklung Weiterführende Dokumentation Introduce built-in symmetric encryption/decryption cipher service Relevante Commits (GitHub) [FEATURE] Introduce symmetric encryption service via XChaCha20-Poly1305 Goodie Zusätzlich zur alten TCA itemsProcFunc kann nun eine moderne itemsProcessors Registry definiert werden, die mit besserem API-Design erlaubt TCA-Items zu manipulieren. Zielgruppe: Integration Weiterführende Dokumentation Introduce TCA option "itemsProcessors" Relevante Commits (GitHub) [FEATURE] Introduce itemsProcessors over itemsProcFunc Goodie Ein neues TypolinkBuilderInterface ersetzt den alten AbstractTypolinkBuilder mit einer besseren API zum Erzeugen von TYPO3-internen Links zu Seiten und Dateien. Zielgruppe: Entwicklung Weiterführende Dokumentation TypolinkBuilderInterface Relevante Commits (GitHub) [!!!][FEATURE] Add TypolinkBuilderInterface with automatic DI API: Backend Wissenswert Bildkonvertierung kann nun für jeden Dateitypen das Standard-Zielformat definieren, also z.b. dass JPG und PNG Bilder im Frontend immer als WEBP oder AVIF dargestellt werden. Zukunftsfähig, da jedes beliebige (von Graphics/ImageMagick unterstützte) Format definiert werden kann, pro Dateitypen. Zielgruppe: Integration Weiterführende Dokumentation Specify default image conversion processing Relevante Commits (GitHub) [FEATURE] Configure default image conversion/preview formats Sehr wichtig Neue System Resource API um Dateien/Assets aufzulösen. . Zielgruppe: Entwicklung Dies ermöglicht nun ein zuverlässigeres auflösen von Dateinamen in Composer/Classic-Installationen mit einer einheitlichen API, die auch für zukünftiges Asset-Publishing (CDN, ...) nutzbar sein wird. Neben der bekannten "EXT:..." Syntax ist nun eine neue "PKG:" Syntax (mit Composer-Referenzen) möglich, sowie eine "FAL:" Syntax zur Referenzierung von Dateilisten-Inhalten. Auch eine "URI:" Syntax kann für relative URIs genutzt werden. Weiterführende Dokumentation System resource API for system file access and public URI generation Relevante Commits (GitHub) [!!!][FEATURE] Introduce System Resource API to resolve files/assets | [TASK] Use system resource API in ext:adminpanel | [BUGFIX] Fix broken CSS and JS resource loading in dashboard | [TASK] Add option to not add cache busting to generated URIs | [TASK] Refactor AuthenticationStyleInformation to use system resource API | [!!!][FEATURE] Implement relative URIs as system resources | [TASK] Introduce new internal API to generate a cache busting URI | [TASK] Use system resource API to resolve resources in getFileAbsFileName Unterstützung der "username" Authentifikation für Redis 6. Zielgruppe: Administration Weiterführende Dokumentation Support username for authentication in Redis cache backend Relevante Commits (GitHub) [FEATURE] Support username for authentication in Redis cache backend Wissenswert Anpassung der Backend Modul / Template API / Button API. Zielgruppe: Entwicklung Durch eine neue ComponentFactory wird die Erstellung von Button-API-Elementen vereinheitlicht, und der zugrundelegende Code mit moderner PHP-Syntax aktualisiert. "data" Attribute können nun auf alle Button-Typen gelegt werden. Die Datensatzansicht und Dateiliste nutzt nun diese neue Button API anstelle hartkodiertem HTML wie früher (siehe Breaking Change). Weiterführende Dokumentation ComponentFactory for backend components Relevante Commits (GitHub) [!!!][TASK] Modernize backend template components API | [TASK] Activate template components deprecations | [TASK] Support "attributes" for all kind of buttons | [BUGFIX] Re-active cut/copy/paste buttons in record list items | [!!!][TASK] Rework actions to use Buttons API | [TASK] Only use GenericButton when needed, prefer Input/LinkButton | [TASK] Streamline GenericButton/LinkButton use in record list | [BUGFIX] Streamline button classes on Install Tool login page Sehr wichtig Einfügung einer neuen Breadcrumb-API. Zielgruppe: Entwicklung Die neue Breadcrumb-API ermöglicht dass im "DocHeader" Bereich der Seitenmodule der Kontext des Modulinhalts klar zugänglich ist. Vorherige Eltern-Seiten und die einzelnen Elemente werden nun mit klickbaren Links und Icons dargestellt (z.B. im Seitenmodul oder Listenansicht). Weiterführende Dokumentation Improved breadcrumb navigation in backend Relevante Commits (GitHub) [FEATURE] Introduce breadcrumb component | [TASK] Streamline breadcrumb component | [BUGFIX] Preserve route actions in breadcrumb navigation | [TASK] Show breadcrumb in EXT:viewpage for invalid pages | [TASK] Avoid invalid dropdown button in module menu processing Goodie Nutzung von Symfony Autoconfiguration. Zielgruppe: Entwicklung Mehrere Registries nutzen nun Symfony Autoconfiguration anstelle von eigenständiger Registrierung (siehe auch zugehörige Breaking changes): * Backend Layout DataProviders * Backend Router * Extractor Services * Backend AvatarProvider. Weiterführende Dokumentation Autoconfigure backend layout data providers | Register metadata extractors via interface | Autoconfigure backend avatar providers Relevante Commits (GitHub) [!!!][FEATURE] Autoconfigure backend layout data providers | [TASK] Use symfony configurator for backend router | [FEATURE] Register Metadata Extractor Services via Interface | [!!!][FEATURE] Autoconfigure backend avatar providers Goodie QR-Codes können nun mit einheitlicher webcomponent API erzeugt/dargestellt werden (internal). Zielgruppe: Integration Relevante Commits (GitHub) [TASK] Add QR Code web-component API: Sprachhandling Wissenswert Das Handling von XLF-Dateien erfolgt nun mittels "symfony/translate". Zielgruppe: Entwicklung Die TYPO3-eigene XLF-Parsing-API wurde zugunsten der Symfony/translate Komponente ausgetauscht, siehe auch "Breaking Changes". Weiterführende Dokumentation Symfony Translation Component integration Relevante Commits (GitHub) [!!!][FEATURE] Use symfony/translation for translatable labels | [TASK] Centralize code in EXT:core/Localization | [TASK] Extract Label File Resolving into separate service | [TASK] Avoid using "default" as fallback locale in LLL translation files | [TASK] Remove "en" fallback in LocalizationFactory | [TASK] Move more LLL resolver logic into EXT:core Die bekannten TCA "locallang_tabs" Labels werden durch Kurzvarianten ersetzt in einem zentralen Namensraum, so dass diese üblichen Labels nun besser als "API" genutzt werden können. Zielgruppe: Integration Weiterführende Dokumentation TCA tab labels consolidated into core.form.tabs Relevante Commits (GitHub) [!!!][TASK] TCA: Consolidate tab labels in core.form.tabs | [BUGFIX] Use proper XLF translation domain for palette Wissenswert Einführung der "Kurzsyntax" für Übersetzungen ("Translation Domain Mapping"), so dass statt LLL:EXT:xyz/.../file.xlf:key direkt auf xyz.file:key zugegriffen werden kann. Diese Kurzformen ermöglichen lesbarere Einbindungen und können sowohl in Fluid als auch PHP referenziert werden. Ein neuer CLI-Task kann alle dieser "Kurzformen" darstellen ( bin/typo3 language:domain_list ). Zielgruppe: Integration Weiterführende Dokumentation Translation Domain Mapping | Support for XLIFF 2.x translation files Relevante Commits (GitHub) [FEATURE] Use translation domain mappings over LLL as simplified labels | [BUGFIX] Enforce "_" over "-" in localization domain naming | [BUGFIX] Ensure to add translation files once to Symfony translator | [FEATURE] Support for XLIFF 2.0 translation files | [TASK] Add CLI command and service to search labels | [BUGFIX] Process state attribute in correct tag in XLIFF 2.x files | [TASK] Detect and remove duplicate XLIFF label identifiers Goodie Anstelle der Backend-Modul-Labels mlang_tabs_tab und weiteren können diese nun über klarere, sprechende Keys backend.module.title bzw. backend.modules.XXX.title aufgelöst werden. Alle Core-Module nutzen nun diese Sprachsyntax. Zielgruppe: Integration Relevante Commits (GitHub) [TASK] Add new syntax for referencing labels for modules | [TASK] Migrate module labels to new short label domain Der f:translate ViewHelper unterstützt die neue Kurzform der Sprachlabels und erhält ein neues Attribut domain , das dem extensionName gegenüber nun bevorzugt wird. Zielgruppe: Integration Weiterführende Dokumentation TranslateViewHelper supports translation domain syntax Relevante Commits (GitHub) [FEATURE] TranslateViewHelper supports new Translation Domain syntax | [BUGFIX] Translation domain syntax takes precedence | [BUGFIX] Properly handle default fallback in f:translate ViewHelper Wissenswert Diverse Stellen im Core wurden auf die neue Kurzform von Language-Labels umgestellt (teilweise auch breaking changes für genutzte Referenzen, bitte beachten). Linting und Validierung von doppelten und syntaktisch falschen XLIFF-Dateien (nur im Core) eingefügt. Zielgruppe: Integration Relevante Commits (GitHub) [!!!][TASK] Utilize translation domain in all pages related showitem | [TASK] Adapt translation domain in EXT:impexp | [TASK] Adapt translation domain in EXT:linkvalidator | [!!!][TASK] TCA: Consolidate palette labels in core.form.palettes | [!!!][TASK] Utilize translation domain in all tt_content related showitem strings | [TASK] Adapt translation domain in EXT:filemetadata | [TASK] Rename locallang_tca.xlf in db.xlf in EXT:dashboard | [TASK] Adapt translation domain in EXT:seo | [TASK] Adapt translation domain in EXT:dashboard | [TASK] Migrate default TCA labels to short syntax | [!!!][TASK] Utilize translation domain in all tt_content related showitem string overrides | [!!!][TASK] Replace hardcoded labels in sys_file_storage related showitem strings | [TASK] Move labels from locallang_t3lib_fullsearch.xlf into EXT:lowlevel | [TASK] Consolidate EXT:lowlevel labels | [BUGFIX] Fix redirect "Statistics" palette label | [BUGFIX] Mark cookie warning label as unused | [TASK] Mark unused labels in locallang_core.xlf | [TASK] Improve enable field labels for users | [TASK] Add basic XLIFF validation / linting | [TASK] Make XLIFF linting less verbose | [TASK] Deprecate unused XLF files | [BUGFIX] Use correct "formName" for save buttons | [TASK] Remove unused empty language file locallang_alt_intro.xlf | [TASK] Update short description of backend modules | [TASK] Use proper convention for deprecating XLF files | [TASK] Utilize translation domain in scheduler task related showitems | [BUGFIX] Use correct language domain in EXT:lowlevel | [BUGFIX] Remove duplicated language file for View module Backend: API Wissenswert Der bisherige Seitentyp "Externe Seite" wurde nun in einen neuen Typen "Link" überführt, der mit sämtlichen internen und externen Seitenlinks (Typolinks) umgehen kann, auch "Telefon" und "Mail" und weiteres. Zielgruppe: Redaktion und Integration Weiterführende Dokumentation Enhance page type "Link" to fully support typolinks Relevante Commits (GitHub) [!!!][FEATURE] Enhance page type Link to fully support typolinks Backend: CLI (Kommandozeile) Ein neues Kommando cache:flushtags ermöglicht per CLI gezielte Cache-Tags zu löschen. Zielgruppe: Administration Weiterführende Dokumentation Add cache flush tags command Relevante Commits (GitHub) [FEATURE] Add cache:flushtags CLI command | [BUGFIX] Boot non-failsafe state in cache:flushtags command Backend: Dashboard Wissenswert Dashboard-Widgets können nun benutzerspezifisch konfiguriert werden, eine eigene API bietet Userspezifische Optionen an und ermöglicht sofortiges Anwenden von angepassten Optionen. Zielgruppe: Redaktion Weiterführende Dokumentation Configurable dashboard widgets Relevante Commits (GitHub) [FEATURE] Configurable dashboard widgets | [BUGFIX] Improve RSS widget error handling and user feedback | [BUGFIX] Respect rss widget limit set via options Goodie Das Feed-Dashboard-Widget unterstützt nun auch Atom-Feeds. Zielgruppe: Redaktion Weiterführende Dokumentation Extended RSS Widget with Atom Support Relevante Commits (GitHub) [FEATURE] Extend RSS widget with Atom feed support Goodie Ein neues Widget zur Darstellung der eigenen Bookmarks steht zur Verfügung. Zielgruppe: Redaktion Weiterführende Dokumentation New Bookmarks Widget Relevante Commits (GitHub) [FEATURE] Add Bookmarks dashboard widget Goodie Widget-Anpassung "Zuletzt geänderte Seiten". Zielgruppe: Redaktion Das Widget der zuletzt geänderten Seiten kann nun auf Seiten beschränkt werden, die man selbst geändert hat. Weiterführende Dokumentation Setting to restrict Latest changed Pages Widget to current user's changes Relevante Commits (GitHub) [FEATURE] Setting to restrict LatestChangedPagesWidget to current user Backend: User-Interface / Darstellung (UI) Goodie Der Baum in der Dateiliste kann nun ähnlich wie der Seitenbaum im Styling (Farben, Labels) angepasst werden (via PSR-14 Event). Zielgruppe: Entwicklung Weiterführende Dokumentation File storage tree items modification event and label support Relevante Commits (GitHub) [FEATURE] Allow manipulation of file storage tree Wissenswert In der Listenansicht von Seitenelementen können diese nun leicht mit einem Sprach-Dropdown gefiltert werden. Zielgruppe: Redaktion Weiterführende Dokumentation Language filter for list module Relevante Commits (GitHub) [FEATURE] Add language filter for list module | [BUGFIX] Respect page translations in localization panel Zwei neue UI-Möglichkeiten im Backend für "Card-Groups" wurden hinzugefügt, die große Kacheln mit Checkbox oder Radiobuttons enthalten können. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Add card layout option to form field types "checkbox" and "radio" Ein neuer Übersetzungs-Wizard ermöglicht einen besser geleiteten Prozess für Sprachvarianten von Seiten und Inhaltselementen, und erlaubt strukturelle Eingriffsmöglichkeiten (via PHP und JavaScript) mit "Finisher" und "LocalizationHandler" Objekten. Zielgruppe: Redaktion Weiterführende Dokumentation Modernized translation workflow Relevante Commits (GitHub) [FEATURE] Modernized translation workflow Wissenswert Anpassungen im Backend-Design inklusive neuem "Fresh"-Theme mit violettem Tinting. Weitere Änderungen: rundere Buttons, Farbflächen und Ebeneneinteilungen sowie Tinting-Vorbereitung, Abstände, (browser-relative) Schriftgrößen, Abhebung der Navigation/Header-Komponenten, Erzeugung von Komponenten-Grundlagen für Themes, Vereinheitlichung der Button-Leiste mit immer verfügbarer Share- und Reload-Funktion, Einheitliche Modul-Inhaltsbreiten, permanent verfügbare Sprachauswahl in allen relevanten Modulen, Kleine Dark-Mode Verbesserungen, Nutzung der "Open Sans" Schriftart für Überschriften. Zudem wurden Bootstrap-Grids in FormEngine zugunsten eigener CSS-Grids ausgetauscht. Zielgruppe: Redaktion Weiterführende Dokumentation Introduce Fresh theme | Automatic reload and shortcut buttons in backend modules | Improved DocHeader layout and unified language selector Relevante Commits (GitHub) [TASK] Dynamically generate color tokens using relative colors | [TASK] Introduce elevation system to improve spatial hierarchy | [FEATURE] Unify module button bar | [TASK] Separate scaffold module menu and topbar states | [TASK] Limit width of submodule overview for consistency | [BUGFIX] Fix spacing of Report modules | [TASK] Soften UI appearance with increased border radius | [BUGFIX] Correct nesting structure and rendering of the tasklist forms | [TASK] Drop link-reset css utility | [BUGFIX] Correct tree background colors after elevation system changes | [TASK] Use stateful properties for input borders in the view module | [BUGFIX] Convert fixed font sizes to relative units | [BUGFIX] Scale default TYPO3 backend font to user agent preference | [FEATURE] Improved DocHeader layout | [TASK] Remove ButtonSize-large | [TASK] Add small size variants to styleguide components | [TASK] Adjust color and spaces in module docheader | [BUGFIX] Make popovers context aware | [BUGFIX] Make CKEditor's "Powered by" badge context-aware | [TASK] Add examples for list groups to EXT:styleguide | [TASK] Add borderless list group styles for use within cards | [TASK] Use font "Open Sans" for headlines | [TASK] Use stateful properties for dropzone indicators in pagetree | [TASK] Introduce stateful color tokens for better theming flexibility | [FEATURE] Introduce Fresh theme | [TASK] Replace Bootstrap grid with CSS Grid in FormEngine field groups | [TASK] Remove Bootstrap progress bar styles | [TASK] Replace Bootstrap text color classes with TYPO3 variants | [TASK] Change infobox title for status in setup module | [TASK] Dedicated placeholer labels for tree implementations | [BUGFIX] Correct sidebar overflow in forms editor | [TASK] Align info box in viewpage with all other modules Goodie In der Benutzerverwaltung kann die Liste nun nach aktuell eingeloggten Redakteuren gefiltert werden. Zielgruppe: Redaktion Weiterführende Dokumentation Add "Current logged-in users" filter to the "Backend Users" module Relevante Commits (GitHub) [FEATURE] Add filter for currently logged-in BE users Sehr wichtig Die Bearbeitung und Darstellung von mehrsprachigen Seiten und Datensätzen im Backend kann nun gezielt mit einer Auswahl von jeder gewünschten Sprache erfolgen. So können nun gezielt nur ausgewählte Sprachen im Vergleich angezeigt werden anstelle nur einer einzigen (oder allen). Zudem bietet nun eine interne PageContext-API zentralen Zugriff auf derartige Meta-Informationen an und bietet großes Potential für Erweiterungen. Zielgruppe: Redaktion Weiterführende Dokumentation Multi-language selection in page and list modules Relevante Commits (GitHub) [FEATURE] Multi-language selection in page and list modules | [TASK] Utilize PageContext API in View module | [BUGFIX] Check if user is logged in before trying to create the pagecontext | [BUGFIX] Fix performance regression in page language context | [BUGFIX] Apply language filter for pages when only default language selected | [BUGFIX] Improve PageContext middleware performance | [BUGFIX] Preserve focused translation when switching to single-language view CLI (Kommandozeile) Command-Line-Interface Verbesserungen. Zielgruppe: Entwicklung Neuer CLI-Befehl install:password:set . Automatische Kommando-Vervollständigung für das bin/typo3 CLI Script und beispielhafte Argumentvervollständigung für das sys_redirect CLI Kommando. Weiterführende Dokumentation Introduce install:password:set command | Introduce shell auto-completion for the typo3 command Relevante Commits (GitHub) [FEATURE] Add CLI command install:password:set | [FEATURE] Introduce shell auto-completion for the typo3 script | [TASK] Add autocomplete to commands of EXT:redirects Goodie Interne Debugging-CLI Befehle debug:backend:modules und debug:backend:routes . Zielgruppe: Entwicklung Die beiden Befehle zeigen alle verwendeten Backend-Module (mitsamt Untermodulen, deren Sortierung und Bezeichnern) sowie alle aktiven URI/URL-Routen im Backend. Relevante Commits (GitHub) [TASK] Add "debug:backend:modules", "debug:backend:routes" commands Datenbank-Abstraktionsschicht (DBAL) Goodie Der GUID Datenbankfeldtyp kann nun für TCA=uuid Felder automatisch genutzt werden. Zielgruppe: Entwicklung Weiterführende Dokumentation Use doctrine GUID type for TCA type=uuid Relevante Commits (GitHub) [!!!][TASK] Use DB-level GUID Type for TCA type=uuid DataHandler Neue Möglichkeit eines "discard" Kommandos für den DataHandler, um Workspace-Änderungen zu verwerfen. Zielgruppe: Entwicklung Weiterführende Dokumentation Add "discard" command to DataHandler Relevante Commits (GitHub) [FEATURE] Add "discard" command to DataHandler Wissenswert Die Behandlung von Datumsangaben im DataHandler kann nun an zentraler Stelle mit allen bekannten Datums-Angaben (ISO mit und ohne Zeitzonen, DateTime-Objekten, SQL-Datumsangaben) umgehen. Dies betrifft alle Aktionen in FormEngine und auch bei Nutzung der API von Extensions. Zielgruppe: Entwicklung Weiterführende Dokumentation Support qualified and unqualified ISO8601 dates in DataHandler Relevante Commits (GitHub) [!!!][FEATURE] Support qualified and unqualified ISO8601 in DataHandler DateTime Der f:format.date ViewHelper kann nun eine Zeitzone definieren. Zielgruppe: Integration Weiterführende Dokumentation Configurable timezone for DateViewHelper Relevante Commits (GitHub) [FEATURE] Add timezone option to DateViewHelper EXT:form (Formularverwaltung) Der EXT:form SaveToDatabaseFinisher kann nun Datenfelder als Passwörter hashen. Zielgruppe: Entwicklung Weiterführende Dokumentation Add password hashing option to SaveToDatabase finisher Relevante Commits (GitHub) [FEATURE] Add password hashing option to SaveToDatabase finisher Die YAML-Dateien des EXT:form Moduls können nun imports und placeholder auswerten (mittels Symfony YamlFileLoader statt einer eigenen YAML-Ladekomponente). Zielgruppe: Integration Weiterführende Dokumentation Allow YAML imports and placeholder processing when creating new forms Relevante Commits (GitHub) [FEATURE] Use YamlFileLoader when creating new form from templates Wissenswert Verbessertes Fehlerhandling für FormFinisher. Zielgruppe: Integration Exceptions werden nun in von Besuchern lesbare Fehlermeldungen umgewandelt. Weiterführende Dokumentation Improve handling of FinisherException Relevante Commits (GitHub) [FEATURE] Improve handling of finisher exceptions Mehrere neue PSR-14 Events (anstelle der alten Hooks, siehe Breaking Changes). Zielgruppe: Entwicklung BeforeFormIsCreated, BeforeFormIsDuplicated, BeforeFormIsDeleted, BeforeFormIsSaved, BeforeRenderableIsAddedToForm, BeforeRenderableIsRemovedFromForm, BeforeRenderableIsValidated, BeforeRenderableIsRendered, AfterFormIsBuilt, AfterCurrentPageIsResolvedEvent . Weiterführende Dokumentation PSR-14 to manipulate form creation process | PSR-14 to manipulate form duplication process | PSR-14 before form deletion | PSR-14 to manipulate form before it is saved | PSR-14 event to modify form elements after being added | PSR-14 event before renderable is removed from form | PSR-14 event before renderable is validated | PSR-14 Event to modify form after being built | PSR-14 event before renderable is rendered | PSR-14 event after current page is resolved Relevante Commits (GitHub) [!!!][FEATURE] Add PSR-14 Event to manipulate form creation | [!!!][FEATURE] Add PSR-14 Event to manipulate form duplication | [!!!][FEATURE] Add PSR-14 Event before form deletion | [!!!][FEATURE] Add PSR-14 Event to manipulate form before saved | [!!!][FEATURE] Add PSR-14 Event before renderable is added to form | [!!!][FEATURE] Add PSR-14 Event before renderable removed | [!!!][FEATURE] Add PSR-14 Event before renderable is validated | [!!!][FEATURE] Add PSR-14 Event before renderable is rendered | [!!!][FEATURE] Add PSR-14 Event after form is built | [!!!][FEATURE] Add PSR-14 Event before renderable is rendered | [!!!][FEATURE] Add PSR-14 Event after current page is resolved EXT:redirects (Link-Weiterleitungen) Goodie Redirects erhalten nun Meta-Informationen über die erstellende Person und den Zeitpunkt Erstellung, und werden in der Übersicht angezeigt. Zielgruppe: Redaktion Weiterführende Dokumentation Add creation information for redirects Relevante Commits (GitHub) [FEATURE] Add Username and creation date to redirects EXT:reports Das Report -Modul kann nun Untermodule komfortabel über die reguläre TYPO3-Backendmodul-Registrierung einbinden statt einer bisherigen eigenständigen API. Zielgruppe: Entwicklung Weiterführende Dokumentation Reports module uses native submodule overview Relevante Commits (GitHub) [!!!][FEATURE] Migrate Reports module to native submodule architecture EXT:scheduler (Task-Planer) Wissenswert Durch neue "Native" Tasks können Scheduler-Tasks zuverlässiger verarbeitet werden, und neue Möglichkeiten zur Verarbeitung mittels TCA FormEngine wurden geschaffen. Die "Frequenz"-Einstellungen (täglich, stündlich, ...) könnnen nun auch als reguläre TCA Overrides definiert werden. Tasks können nun deutlich stabiler serialisiert und deserialisiert werden als vorher. Zielgruppe: Entwicklung Weiterführende Dokumentation New scheduler task wizard | Scheduler tasks as native TCA table | Custom TCA types for scheduler tasks | Improve scheduler task group handling and display | Extensible scheduler task timing options Relevante Commits (GitHub) [TASK] Migrate tasks to native tasks | [BUGFIX] Allow to stop disabled task | [BUGFIX] Properly handle scheduler task not registered | [FEATURE] Introduce scheduler task wizard | [BUGFIX] Fix SchedulerDatabaseStorageMigration upgrade wizard | [FEATURE] Use FormEngine and DataHandler for scheduler | [TASK] Clean up EXT:scheduler | [TASK] Clean up TaskService class in scheduler | [TASK] Cleanup scheduler task handling | [TASK] Drop debug statements in SchedulerTaskPersistenceValidator | [TASK] Enable DI in scheduler task objects | [TASK] Improve "no task" infobox in scheduler module | [TASK] Introduce TCA for tx_scheduler_task | [TASK] Migrate scheduler database to new storage format | [TASK] Migrate TableGarbageCollectionTask | [TASK] Remove Available Tasks view from scheduler module | [TASK] Replace "new" button for scheduler tasks in FormEngine | [TASK] Separate execution logic in scheduler task | [TASK] Streamline class handling of EXT:scheduler | [TASK] Unify tasks + CLI commands in scheduler | [TASK] Use strict types in ext:scheduler CronCommand classes | [TASK] Migrate IpAnonymizationTask | [TASK] Adjust task table configuration location | [TASK] Harmonize sorting of tasks in task type selection | [TASK] Migrate ValidatorTask to native task | [TASK] Migrate ExecuteSchedulableCommandTask | [FEATURE] Use custom TCA types over AdditionalFieldProviders | [TASK] Simplify scheduler module | [TASK] Support icon Overlay in new scheduler task wizard | [BUGFIX] Prevent infinite loop in scheduler invalid task deletion | [FEATURE] Improve Scheduler task group handling and display | [BUGFIX] Add restriction to live workspace in scheduler module | [!!!][FEATURE] Make scheduler task timing options extensible via TCA Goodie Die Eigenschaft schedulable: false kann nun über ein neues #[AsNonSchedulableCommand] Attribut für CLI Symfony Commands vergeben werden, um dies nicht mehr per Service-Definition einstellen zu müssen sondern rein innerhalb des Commands. Zielgruppe: Entwicklung Weiterführende Dokumentation Add AsNonSchedulableCommand attribute for CLI commands Relevante Commits (GitHub) [FEATURE] Add attribute AsNonSchedulableCommand for "schedulable" | [TASK] Migrate remaining commands to AsCommand attribute Extbase Wissenswert Nutzung von Symfony Validators nun in Extbase möglich. Zielgruppe: Entwicklung Es müssen nun keine eigenständigen Extbase Validator "wrapper" geschrieben werden um direkte Symfony Validators zu nutzen. Stattdessen können jetzt die regulären PHP-Attribute für Symfony Validatoren auf Methoden und Properties eingesetzt werden. Weiterführende Dokumentation Allow usage of Symfony validators in Extbase Relevante Commits (GitHub) [FEATURE] Allow usage of Symfony validators in Extbase Goodie Extbase-Attribute wie #[Validate] können nun auch Optionen als native Konstruktur-Properties übergeben, anstelle eines geschachtelten Arrays. Zielgruppe: Entwicklung Weiterführende Dokumentation Support property-based configuration for Extbase attributes Relevante Commits (GitHub) [FEATURE] Use properties for configuration of Extbase attributes Goodie Die #[Validate] und [#IgnoreValidation] Attribute können nun nicht nur auf Controller-Methoden-Ebene vergeben werden, sondern gezielt auf Parameter einer Methode. Zielgruppe: Entwicklung Weiterführende Dokumentation Allow :php: #[IgnoreValidation] and :php: #[Validate] attributes for method parameters Relevante Commits (GitHub) [FEATURE] Make validation attributes usable for method parameters Datei-Abstraktion (FAL) Unterstützung weiterer Hashing-Algorithmen in der FAL. Zielgruppe: Entwicklung Weiterführende Dokumentation Allow more hashing algorithms in FAL Relevante Commits (GitHub) [FEATURE] Support more hashing algos in FAL Flexform Wissenswert Die Flexform-Registrierung kann nun direkt via addPlugin() (Nicht-Extbase) bzw. registerPlugin() (Extbase) als Parameter dieser Methoden übertragen werden, und benötigt keine eigenständige Registrierung mehr (diese ist nun deprecated). Zielgruppe: Entwicklung Weiterführende Dokumentation FlexForm enhancements: Direct plugin registration and raw TCA support Relevante Commits (GitHub) [!!!][FEATURE] Remove ds_pointerField and simplify FlexForm handling Fluid Goodie Der Seitentitel kann nun direkt über einen Fluid f:page.title ViewHelper gesetzt werden. Zielgruppe: Integration Weiterführende Dokumentation Introduce Fluid page title ViewHelper Relevante Commits (GitHub) [FEATURE] Introduce Fluid page title ViewHelper Neue zentrale Fluid HeaderData und FooterData ViewHelper ermöglichen das Einfügen von CSS/JS-Code im Foot/Head-Bereich einer Seite als Ergänzung zum f:asset ViewHelper (der nicht beliebige Argumente unterstützt). Hierfür wird der PageRenderer genutzt. Zielgruppe: Integration Weiterführende Dokumentation Introduce headerData and footerData ViewHelpers Relevante Commits (GitHub) [FEATURE] Introduce HeaderData and FooterData ViewHelpers Sehr wichtig Fluid v5. Zielgruppe: Entwicklung Eine neue optionale Dateiendung .fluid.html statt .html kann genutzt werden, um in IDEs fluid-spezifisches Highlighting unabhängig von nur HTML5 zu ermöglichen. Diese Datei-Endung wird von allen Core-Templates auch nun genutzt. Zudem werden nun ViewHelper Argumente strikter validiert (strikte Typisierung, und "Union Types" sind nun möglich). CDATA-Sektionen können nun mit Fluid {{{...}}} Tags genutzt werden, um Syntax-Kollisionen in eingebettetem CSS/JS zu vermeiden. Weiterführende Dokumentation Alternative Fluid syntax for CDATA sections | Union types for ViewHelpers | Fluid file extension and template resolving Relevante Commits (GitHub) [!!!][TASK] Update Fluid Standalone to 5.0 | [!!!][TASK] Update Fluid Standalone to 5.0 | [BUGFIX] Use correct reference to InlineTemplates.fluid.html in EXT:form | [TASK] Rename template files in EXT:beuser | [BUGFIX] Make MetaViewHelper compatible with Fluid 5 | [TASK] Use *.fluid.* file extension for all templates | [BUGFIX] Have simple cropper VH in ext:install | [BUGFIX] Prevent invalid Fluid cache identifiers Neuer viewHelper f:page.meta zum direkten Setzen von HTML-Meta-Attributen innerhalb eines Templates. Zielgruppe: Integration Weiterführende Dokumentation Introduce Fluid page meta ViewHelper Relevante Commits (GitHub) [FEATURE] Introduce Fluid page meta ViewHelper Goodie Integration eines Cache-Warmups von *.fluid.* Dateien zum Pre-Parsing. Zusätzlich steht auch ein dediziertes CLI-Kommando typo3 fluid:cache:warmup zur Verfügung. Zielgruppe: Administration Weiterführende Dokumentation Fluid cache warmup Relevante Commits (GitHub) [FEATURE] Add Fluid cache warmup Install-Tool Install-Tool Sessions können nun auch so konfiguriert werden, dass sie in Redis statt im Dateisystem gespeichert werden können. Zielgruppe: Administration Weiterführende Dokumentation Allow install tool sessions without shared file system Relevante Commits (GitHub) [FEATURE] Allow install tool sessions without shared file system JavaScript API Eine zentrale JavaScript "URLFactory" kann nun für das Handling von URL-Objekten genutzt werden. Zielgruppe: Entwicklung Weiterführende Dokumentation Introduce UrlFactory JavaScript module Relevante Commits (GitHub) [FEATURE] Introduce URL factory in TypeScript PSR-14 Events Angepasste und neue PSR-14-Events. Zielgruppe: Entwicklung BeforeLiveSearchFormIsBuiltEvent zur Anpassung der Formularparameter der Live-Suche im Backend. BeforeEmailFinisherInitializedEvent zum Anpassen von Optionen des EXT:form EmailFinishers . AfterPageUrlsForSiteForRedirectIntegrityHaveBeenCollectedEvent für URL-Manipulation nach dem CLI Redirect-Integritätscheck. ModifyQueryBeforeFetchingObjectCountEvent und ModifyResultAfterFetchingObjectCountEven können genutzt werden bevor und nachdem Extbase "COUNT" Repository-Methoden aufruft. AfterRichtextConfigurationPreparedEvent nach der Initialisierung des RTE. PasswordHasBeenResetEvent nach dem Passwort-Resets eines Backend-Users. Weiterführende Dokumentation New PSR-14 BeforeLiveSearchFormIsBuiltEvent | PSR-14 event to modify options in EmailFinisher | PSR-14 event for modifying URLs in redirects:checkintegrity | Add PSR-14 events to Extbase Backend::getObjectCountByQuery method | New PSR-14 AfterRichtextConfigurationPreparedEvent | PSR-14 event after a backend user password has been reset Relevante Commits (GitHub) [FEATURE] Introduce new PSR-14 BeforeLiveSearchFormIsBuiltEvent | [FEATURE] Introduce PSR-14 Event to modify options in EmailFinisher | [FEATURE] PSR-14 event to modify URLs for integrity check | [FEATURE] Add events for getObjectCountByQuery | [FEATURE] Add new AfterRichtextConfigurationPreparedEvent | [FEATURE] Dispatch event after BE user's password reset Sehr wichtig Mit dem neuen PSR-14 Event BeforePageTreeIsFilteredEvent kann die Seitenbaum-Filterung individuell angepasst werden, und z.B. weitere Einschränkungen mit eigenständiger Syntax ermöglichen. Zielgruppe: Entwicklung Weiterführende Dokumentation Extended page tree filter functionality Relevante Commits (GitHub) [FEATURE] Allow extending page tree filter functionality Die LinkBuilder-API erhält einen neuen PSR-14 Event BeforeDatabaseRecordLinkResolvedEvent mit dem ein Datensatz vor dem Link-Building evaluiert und manipuliert werden kann. Zielgruppe: Entwicklung Weiterführende Dokumentation PSR-14 event for custom record retrieval in LinkBuilder Relevante Commits (GitHub) [FEATURE] Add PSR-14 for record retrieval in DatabaseRecordLinkBuilder Goodie Einführung mehrerer PSR-14 Events für die Backend-Benutzerverwaltung, um Extensions einen Zugriff zur komfortableren Verwaltung zu ermöglichen: AfterBackendGroupFilterListIsAssembledEvent, AfterBackendGroupListConstraintsAssembledFromDemandEvent, AfterBackendUserListConstraintsAssembledFromDemandEvent, AfterFilemountsListIsAssembledEvent . Zielgruppe: Entwicklung Weiterführende Dokumentation PSR-14 events for Backend Users module Relevante Commits (GitHub) [FEATURE] Add PSR-14 events to beuser extension Routing / Redirects Wissenswert Es können nun reguläre Ausdrücke (regExp) für die Routing Slug-Konfiguration genutzt werden. Zielgruppe: Integration Weiterführende Dokumentation Introduce regex-based replacements for slugs Relevante Commits (GitHub) [FEATURE] Introduce regex based replacements for slugs Der Linkvalidator ermöglicht nun, etwaige externe Linkziele für Redirects im Bericht anzumäkeln. Zielgruppe: Redaktion Weiterführende Dokumentation Option to report redirects in link validator Relevante Commits (GitHub) [FEATURE] Option to report redirects in link validator Sicherheit Beim ungültigen Login eines Backend-Users mit korrektem Passwort aber falschem MFA-Token wird nun eine Notification-Mail geschickt. Zielgruppe: Redaktion Weiterführende Dokumentation Notify backend users on failed MFA verification attempts Relevante Commits (GitHub) [FEATURE] Notify backend user on failed MFA verification attempts Goodie Beim Einfügen eines Passworts aus dem Clipboard zum Login werden etwaige enthaltene Leerzeichen/Zeilenumbrüche angemäkelt. Zielgruppe: Redaktion Weiterführende Dokumentation Add warning when pasting password with whitespace Relevante Commits (GitHub) [FEATURE] Notify users on pasting password with whitespace TCA Die "valuePicker" TCA Items können jetzt "label"/"value" Array keys verwenden statt numerische Indexe. Zielgruppe: Integration Weiterführende Dokumentation Associative array keys for TCA valuePicker items Relevante Commits (GitHub) [FEATURE] Associative array keys for TCA valuePicker items | [BUGFIX] Fix valuePicker for TCA type=link Sehr wichtig Ein neuer TCA-Typ "country" wurde eingefügt, der nun sowohl in FormEngine, Extbase als auch TypoScript Rendering genutzt werden kann um die Country API Objekte anzusprechen. Zielgruppe: Integration Weiterführende Dokumentation New TCA type "country" Relevante Commits (GitHub) [FEATURE] New TCA type "country" | [BUGFIX] Adjust TCA type=country column default definition | [BUGFIX] Let Country object retrieval handle NULL value | [BUGFIX] Properly parse Country property in CountrySelectViewHelper Goodie Der FormEngine TCA ValuePicker wird in der Ausgabe ersetzt durch eine neue, accessible "Combobox". Die alten TCA Keys bleiben dem "ValuePicker" zugeordnet, lediglich die Ausgabe ist betroffen. Zielgruppe: Integration Weiterführende Dokumentation Implement accessible combobox pattern Relevante Commits (GitHub) [FEATURE] Implement accessible combobox pattern sys_redirects Einträge können nun eigenständige TCA-Typen setzen, um somit Untertypen von Redirects zu ermöglichen (z.B. für QR-Codes). Zielgruppe: Integration Weiterführende Dokumentation sys_redirect default type name changed to "default" Relevante Commits (GitHub) [TASK] Allow types for sys_redirect table RecordTypes können nun spezifische Titel für Untertypen besitzen, die im Backend (Datensatzliste, Vorschaumodul, ...) ausgewertet werden können. Zielgruppe: Integration Weiterführende Dokumentation Type-specific title in TCA types section Relevante Commits (GitHub) [FEATURE] Support type-specific title in TCA types section Im TCA werden nun alle durchsuchbaren Felder automatisch ausgelesen. Felder werden nun von der Suche gezielt ausgeschlossen (opt-out) statt wie früher gezielt aktiviert (opt-in). Zielgruppe: Integration Weiterführende Dokumentation Configure searchable fields Relevante Commits (GitHub) [!!!][FEATURE] Introduce "searchable" TCA field option Terminologie Sehr wichtig Mehrere Umbenennungen der Hauptmenü-Navigation im Backend: "Web" => "Content", "Page" => "Layout", "Backend Usersr" => "Backend", "File" => "Media", "Filelist" => "Media", "Admin Tools" => "Admin", "Database Integrity" => "Database", "Admin" => "Administration", "Site Management" => "Sites", "Sites" => "Setup", "View" => "Preview", "Info" => "Status", "Workspace" => "Publish", "DB Mount" => "Page Tree Entry Point". Das "Site" und "Site Settings" Modul wurde in "Settings" zusammengelegt und bietet eine deutlich klarere Übersicht der Sites und deren Konfiguration. Die Umbenennungen werden als Routing-Aliase hinterlegt um Bestandsnutzung zu ermöglichen. Ein Migrationswizard passt Rechte mit etwaigen geänderten Identifiern an. Zielgruppe: Redaktion Weiterführende Dokumentation Improved backend module naming and structure Relevante Commits (GitHub) [FEATURE] Rename top-level module "web" to "content" | [FEATURE] Rename top-level module "file" to "media" | [TASK] Rename top level module "Admin Tools" to "Admin" | [TASK] Update install tool module identifiers | [TASK] Rename DB mount label to "Page Tree Entry Point" | [TASK] Rename module "Admin" to "Administration" | [TASK] Rename second-level module "view" to "preview" | [TASK] Migrate module identifiers in user and group permissions | [TASK] Change "Filelist" module name to "Media" | [TASK] Rename "Info" module to "Status" and relocate to EXT:backend | [TASK] Rename "Workspaces" module name to "Publish" | [TASK] Rename Backend Users module to Users | [TASK] Rename workspace module identifier | [TASK] Rename “Page” module to “Layout” | [TASK] Rename “Site Management” to “Sites” and submodule “Sites” to “Setup” | [BUGFIX] Remove accidentally added enable field descriptions | [TASK] Merge backend modules "Setup" and "Settings" | [TASK] Reorder the modules in Content TypoScript API Via TypoScript stdWrap können nun auch alle <html>-TagAttribute gesteuert werden. Zielgruppe: Integration Weiterführende Dokumentation Add stdWrap to config.htmlTag.attributes.[attr] Relevante Commits (GitHub) [FEATURE] Add stdWrap to htmlTag.attributes Goodie TCADefaults können nun ähnlich wie TCEFORM via TypoScript Typ-abhängig gesetzt werden. Damit können für verschiedene z.B. tt_content Untertypen-abhängige Standardwerte gesetzt werden,. Zielgruppe: Integration Weiterführende Dokumentation Type-specific TCAdefaults support Relevante Commits (GitHub) [FEATURE] Add type-specific TCAdefaults support Das "Locale" Objekt einer Seite kann nun via TypoScript Symfony ExpressionLanguage ausgewertet werden. Zielgruppe: Integration Weiterführende Dokumentation Introduce expression for accessing site locale Relevante Commits (GitHub) [FEATURE] Introduce expression for accessing site locale User-Interface (UI) Eine neue Benutzergruppen-Detailansicht stellt Details einer einzelnen Gruppe (wie für einen einzelnen Benutzer) dar. Zielgruppe: Redaktion Weiterführende Dokumentation Detail view for backend user groups in 'Users' module Relevante Commits (GitHub) [FEATURE] Add detail view for backend user groups Der Wizard bei der Erstellung neuer Inhalte zeigt nun auch eine Kategorie "Zuletzt benutzt" für die letzten Inhaltselemente an. Dieser kann auch als User-Setting individuell deaktiviert werden. Zielgruppe: Redaktion Weiterführende Dokumentation Add recently used records to record wizards Relevante Commits (GitHub) [FEATURE] Add dynamic recently used category to record wizards | [TASK] Add option to manage display of "recently used" Der LinkBrowser kann nun mit TypoScript-Konfiguration Vorbelegungen für CSS-Klassen und "target" von Links definieren. Zielgruppe: Integration Weiterführende Dokumentation Add options to predefine link target and class in link browser Relevante Commits (GitHub) [FEATURE] Add options to predefine link target and class in LinkBrowser Die Popups für die Element/Seiten/Datei-Auswahl unterstützen nun die Auswahl von gewünschten Spalten, ähnlich wie im regulären Dateilisten-Modul. Zielgruppe: Redaktion Weiterführende Dokumentation Enhance file browsers with column selector Relevante Commits (GitHub) [FEATURE] Enable columns selector in file browsers Das "Info"-Modul kann nun eine Sprachauswahl für den Seitenbaum nutzen. Zielgruppe: Redaktion Weiterführende Dokumentation Language selection for backend module "Status - Pagetree Overview" Relevante Commits (GitHub) [FEATURE] Provide language selection in info module Goodie Die zuletzt genutzte Kategorie/Rubrik beim "Neuer Inhalt"-Wizard wird nun benutzerspezifisch gespeichert für den nächsten Aufruf. Zielgruppe: Redaktion Weiterführende Dokumentation Remember last opened category in record wizards Relevante Commits (GitHub) [FEATURE] Remember last opened category in record wizards Goodie Das Popup zum Ersetzen von Dateien/Bildern mit neu hochgeladenen Inhalten wurde neu implementiert und modernisiert. Zielgruppe: Redaktion Weiterführende Dokumentation File replace modal with enhanced file information Relevante Commits (GitHub) [FEATURE] Render "replace file" dialog in modal Datensätze mit Untertyp können nun im "Neuer Inhalt"-Wizard einzeln angesteuert / erzeugt werden. Zielgruppe: Redaktion Weiterführende Dokumentation Respect record type while creating new records Relevante Commits (GitHub) [FEATURE] Respect record types in new record wizard Wissenswert Die teilbaren Links (bzw. Seiten-Reloads) beim Bearbeiten von Seiten/Datensätzen im Backend (FormEngine) können nun den Kontext der bearbeiteten Seite erhalten, so dass bei Aufruf dieser URLs der Seitenbaum die zugehörige Seite hervorheben kann (statt diesen Kontext zu verlieren). Einige ViewHelper ( be:uri/link.new/editRecord ) können diesen Kontext auch gezielt belegen. Zielgruppe: Redaktion Weiterführende Dokumentation New ViewHelper argument "module" to define module context Relevante Commits (GitHub) [BUGFIX] Show active page in page tree for shared FormEngine links | [BUGFIX] Resolve to default lang page uid in form engine context Wissenswert Die Erzeugung von neuen Dateien in der Dateiliste nutzt nun ein modales Popup, das gewählte Verzeichnisse unabhängig vom Haupt-Modulfenster befüllen lässt. Damit entfallen nun unnötige eigene Oberflächen/Code zum Erstellen von Dateien. Neu hochgeladene Dateien erscheinen schneller in der Übersicht. Zielgruppe: Redaktion Weiterführende Dokumentation Unified file creation in Element Browser Relevante Commits (GitHub) [FEATURE] Unified file creation via Element Browser UI: Backend-Modulübersichten Backend-Module können nun via Untermodul-Abhängigkeiten definieren und erkennen, wenn sie nicht benötigt werden, und entsprechende Menüpunkte aus der Backend-Navigation entfernen. Zielgruppe: Entwicklung Weiterführende Dokumentation Introduce submodule dependencies Relevante Commits (GitHub) [!!!][FEATURE] Introduce submodule dependencies for backend modules | [TASK] Migrate dependsOnSubmodules to appearance array | [TASK] Use submodules for lowlevel's db searches Wenn Backend-Module Untermodule besitzen können diese nun in als "Karten" (ähnlich wie im Install-Tool) die Untermenüs präsentieren. Beispiel: "Content > Info" Modul. Zielgruppe: Redaktion Weiterführende Dokumentation Introduce card-based submodule overview Relevante Commits (GitHub) [!!!][FEATURE] Introduce card-based sub module overview Sehr wichtig Einführung einer neuen "Submodul-Übersicht". Zielgruppe: Redaktion Die dritte Ebene von Modulen (meist zugänglich über ein Dropdown im DocHeader von Modul-Inhalten) ist nun konsistenter über eine API verfügbar, um in Zukunft z.b. direkt im Hauptmenü dargestellt werden zu können. EXT:webhooks und EXT:reactions sind nun im Hauptmenüpunkt "Integrations" zusammengeführt. Die Reihenfolge von Menüpunkten wurde optimiert. Übersichtsseiten stellen nun automatisch die Übersichten für Untermenüpunkte dar. Das "Hilfe"-Modul wird nun in dem User-Settings-Menüpunkt oben rechts dargestellt. Wenn in einem Hauptmenüpunkt (wie "Media") nur ein einzelnes Modul enthalten ist, wird dies nur noch als Hauptmenüpunkt dargestellt. Weiterführende Dokumentation Introduce Integrations module Relevante Commits (GitHub) [TASK] Use submodule overview in styleguide module | [!!!][FEATURE] Migrate Reports module to native submodule architecture | [FEATURE] Introduce "Integrations" hub (module) | [TASK] Add module title to button label in submodule overview | [BUGFIX] Improve submodule link accessibility without breaking UX | [TASK] Reorder the modules in Admin | [TASK] Revert third-level module in module menu | [TASK] Migrate Help Modules into User Toolbar | [TASK] Move parent modules between 'tools' and 'system' | [TASK] Add single submodule promotion Workspaces Goodie In der Workspace-Übersicht wird nun in der Spalte "Editor" angezeigt, welcher letzte Redakteur anzeigt eine Änderung der Seite durchgeführt hat. Zielgruppe: Redaktion Weiterführende Dokumentation Show editor information in workspace "Publish" module Relevante Commits (GitHub) [FEATURE] Show editor information in workspace overview Feature-Video Stefan Frömken hat auf seinem YouTube-Kanal ein ausführliches Video (beinahe 2 Stunden) mit allen (!) Features der TYPO3 14.0 bereit gestellt, somit eine sehr gute Ergänzung zu dieser Textfassung: https://youtu.be/VbZ_YRa0AeE?si=jsY2nSQTAdeF8PLL Zurück: Übersicht TYPO3 14.0 Weiter: Inkompatible Änderungen Mit unserem festangestellten Mitarbeiter Garvin Hicking unterstützen wir aktiv die TYPO3-Entwicklung. Er arbeitet im Core-Merger Team des OpenSource Projekts mit, und ist daher über die neuesten Entwicklungen bestens informiert. In unseren Artikelserien zu TYPO3-Releases beleuchtet er detailiert (und garantiert ohne KI-Automatik) wichtige Änderungen. Garvin Hicking Senior Developer garvin.hicking(at)ppw.de
WeiterlesenTYPO3 14.0 - Bugfixes und Verbesserung der Performance
Auch kleinere Bugfixes und Performance-Verbesserungen können eine spürbare Verbesserung auslösen. Die meisten relevanten Bugfixes von TYPO3 14 wurden auch immer in die Version 13 (und teilweise auch 12) zurückportiert. Somit sollten sich im Bereich der Bugfixes hier nur Dinge finden, die für eine Rückportierung zu "gefährlich" waren oder neue Komponenten betreffen. Hervorhebenswerte Anpassungen sind: Übergreifendere Nutzung der TCA Schema API Direktes Anlegen von Redakteurs- und Administrationsaccounts Optimierung von Button-Texten Transparenzinformationen in Bildern werden besser ausgewertet Umfangreichere Liste von zeitgemäßen "Media"-Dateiendungen Entfernung der "font" und "center" HTML-Tags im RTE Update auf Symfony 7.3 Zahlreiche Workspace-Änderungen " cache:flush " CLI-Befehl kann nun Fehlermeldungen darstellen Accessibility (a11y) Anpassungen Bugfixes und kleinere Anpassungen API / Schnittstellen (Generell) Generelle API-Anpassungen. Zielgruppe: Entwicklung Vermeidung von SessionHandler Optionen im Install-Tool Kontext. Vermeidung eines Fehlers wenn Backend-Module AJAX-Routen mit dem Präfix "ajax_" benutzen. DataHandler macht keine unnötige integer<>datetime Konvertierung mehr beim Daten-Import. Dynamische URL-Ersetzung des Browsers im Install-Tool angepasst. Anpassung der DefaultSettings.php Konfigurationssyntax zur korrekten Nutzung von "map" statt "element-list". Der PHP-Prozess wird für Dateien im "/_assets/" Verzeichnis nicht mehr ausgeführt (.htaccess). Bessere Benennung von involvierten (internen) Klassen beim 500/503 Fehlerrouting. Seiten-Caches nach dem Speichern eines EXT:form Formulars werden geleert. Die JavaScript "validateField" Methode für FormEngine-Validierung liefert nun keinen (unnötigen) Wert mehr zurück. Weiterführende Dokumentation Updated default .htaccess template Relevante Commits (GitHub) [BUGFIX] Remove default install tool session handler options | [BUGFIX] Remove only leading 'ajax_' prefix in Ajax route keys | [BUGFIX] Do not mangle integer datetime values during import | [BUGFIX] Fix browser url replacement for installtool in backend context | [BUGFIX] Make sure LANG.loader is a map | [TASK] Don't execute PHP for URIs starting with /_assets/ | [TASK] Clarify internal error handling for 500 and 503 | [TASK] Flush page cache after editing a form | [TASK] FormEngine: do not return a value in validateField() Goodie Die API für das Fluid-basierte Seiten-Modul ist nun nicht mehr @internal deklariert (z.B. BackendLayoutRenderer , PageLayoutContext , ContentFetcher , AbstractGridObject ). Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Remove experimental note in Fluid-based Page Module components Nutzung der UrlFactory zur Erzeugung von Links (und URL-Parametern) bei AJAX-Requests. Damit werden Kodierungsprobleme vermieden. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Use UrlFactory for query generation in AjaxRequest Die Konfigurationsoptionen in den System-Einstellungen können nun auch Typen map und list verarbeiten, in denen beliebige Array-Schlüssel und -Werte definiert werden können (z.B. für die neue Bildtypen-Konfiguration). Zielgruppe: Administration Relevante Commits (GitHub) [TASK] Add GUI-managed map (keys+values) and list for Configuration API: Datums-Verarbeitung Anpassungen des Timestamp/DateTime-Handlings. Zielgruppe: Redaktion "0" wird nun als gültiger Leerwert für nicht-nullable datetime-Felder ausgewertet. Behebung eines Fehlers für datetime default-Werte von "0". Relevante Commits (GitHub) [BUGFIX] Respect 0 as valid empty value for non-nullable datetime fields | [BUGFIX] Fix datetime default value inflation with default=0 Backend: User-Interface / Darstellung (UI) Wissenswert Optimierungen in Usability und Darstellung im Backend. Zielgruppe: Redaktion Entfernen von übersetzten Seiten wieder leicht möglich. Die Anzahl der aus dem Clipoard einzufügenden Elemente wird nun richtig berechnet. Vermeidung eines Vorschau-Element-Titel-Fallbacks, um Dopplungen von Unter-Überschriften zu verhindern. Mehrsprachige Datensätze die keine Verbindung zu einer Sprache haben werden im "fallback" Sprach-Modus nun immer dargestellt. Das aktivieren und deaktivieren von Datensätzen in der Datensatzliste wurde in eine dedizierte ControllerAction ausgelagert. Vom TypoScript-Konstanteneditor wurde eine Verlinkung zum Site Settings Editor eingefügt. Vordefinierte TCA-Paletten für "be_users" und "be_groups" ermöglichen nun strukturiertere Eingabefelder und leichteres ein/ausblenden von zugehörigen Optionen. Der neue Konfigurationsoptionstyp "url" für die Settings API ermöglicht die Eingabe von validierbaren URLs. Bei mehrsprachigen Seiten wird nun die Standardsprache immer als Vergleich/Kontext visualisiert, um klar zu zeigen in welchen Bereichen es inhaltliche Abweichungen gibt. Beim Umbenennen einer Datei wird der aktuelle Dateiname direkt ausgewählt um ersetzt zu werden. Die gerenderte Sitemap-XML Darstellung im Browser nutzt nun mehr Platz für den Link anstelle der anderen Felder. Im Benutzerwechselmodus wird im Menü besser hervorgehoben, dass ein Benutzer simuliert wird. Bei FormEngine-Tree-Feldern mit "maxitems=1" (z.B. Kategoriedatensätze) kann bei Klick auf einen anderen Datensatz direkt der vorherige entfernt werden, als Prozessvereinfachung. Neue Administratoren und Editoren können nun direkt mit einem dedizierten "Neu anlegen" Button im Benutzermodul erzeugt werden. Bei Erstellung eines neuen Datensatzes, für den nur ein Record-Typ erlaubt ist wird, direkt auf den korrekten Controller weitergeleitet. Anpassung der Button-Texte von "Schließen ohne Speichern"-Dialogen. Relevante Commits (GitHub) [BUGFIX] Allow deletion of localized pages again | [BUGFIX] Count elements in clipboard correctly when pasting all | [BUGFIX] Don't use label fallback in page module | [BUGFIX] Ensure floating records are also rendered with fallback | [TASK] Add dedicated action to toggle elements in record list | [TASK] Add link from the constant editor to the site setting editor | [TASK] Add palettes to be_users and be_groups records | [TASK] Add url type to settings API | [TASK] Always use default language binding in page module | [TASK] Auto-select file basename in "Rename" dialog | [TASK] Better use available space for the link | [TASK] Highlight active user impersonation | [TASK] Improve behaviour of FormEngine selectTree with maxitems=1 | [TASK] Modified button toolbar in backend users module | [TASK] Redirect to edit form if only one "New record" type is available | [TASK] Simplify wording in "Close without save" confirmation Bessere CSS Button-Auszeichnungen für Web-Component-Buttons (z.B. "copy to clipboard"). Zielgruppe: Entwicklung Relevante Commits (GitHub) [BUGFIX] Apply button styling to web components CKEditor (WYSIWYG-Komponente im Backend) RTE Processing. Zielgruppe: Integration "center" und "font" Tags im RTE werden standardmäßig nicht mehr unterstützt. Weiterführende Dokumentation Add 'center' and 'font' to YAML processing removeTags Relevante Commits (GitHub) [TASK] Remove 'center' and 'font' tags in RTE processing CLI (Kommandozeile) Goodie Der "cache:flush" Task zeigt nun Fehlermeldungen auf der Konsole genau an, und mittels "-v" kann gesteuert werden dass eine Erfolgsmeldung erscheint statt keiner Ausgabe. Zielgruppe: Administration Relevante Commits (GitHub) [TASK] Add verbose console to improve help text for cache:flush Caching Verbesserungen bei Frontend/Backend Caching und API. Zielgruppe: Administration Abgleich der Cache-Backend Lifetime mit HTTP Cache-Headern. Relevante Commits (GitHub) [BUGFIX] Align cache backend lifetime with HTTP cache headers Datenbank-Abstraktionsschicht (DBAL) Datenbank-Layer. Zielgruppe: Administration Eine Exception wird nun geworfen falls eine QueryBuilder-Abfrage ein UPDATE/DELETE Statement ausführt dass JOINs nutzt (dies ist nicht von Doctrine unterstützt). Die SQL-Deklaration "DEFAULT NULL" für VARCHAR Felder ist nun möglich. Performance-Optimierungen für die Schema-Auslesung. Relevante Commits (GitHub) [TASK] Throw exception for QueryBuilder UPDATE/DELETE with table joins | [BUGFIX] Allow DEFAULT NULL for VARCHAR | [TASK] Avoid costly database schema queries and class state Abhängigkeiten (Dependencies) Abhängigkeiten und Software-Bibliotheken. Zielgruppe: Administration Update auf Symfony 7.3 als Minimum. Relevante Commits (GitHub) [TASK] Raise Symfony composer dependency to 7.3 EXT:form (Formularverwaltung) API. Zielgruppe: Entwicklung Nutzung des DuplicationBehavior ENUMs in EXT:form. Relevante Commits (GitHub) [BUGFIX] Utilize DuplicationBehavior ENUM in EXT:form EXT:install (Installations-Tool) Das Modul "Referenz-Index" wurde von EXT:lowlevel in EXT:install verschoben. Zielgruppe: Administration Relevante Commits (GitHub) [TASK] Migrate "Reference Index" check into EXT:install Die Upgrade-Wizards wurden von EXT:install in EXT:core verschoben, so dass künftig keine harte Abhängigkeit mehr zu "EXT:install" bestehen muss. Auch die CLI-Befehle leben nun im Core. Zielgruppe: Administration Weiterführende Dokumentation Allow extensions to ship upgrade wizards without requiring EXT:install Relevante Commits (GitHub) [TASK] Move upgrade wizards to suitable system extensions | [TASK] Move upgrade wizard commands to EXT:core | [TASK] Allow shipping upgrade wizards w/o requiring EXT:install EXT:records Das Modul "Datensatz-Statistiken" wurde von EXT:lowlevel in EXT:records verschoben. Zielgruppe: Administration Relevante Commits (GitHub) [TASK] Move Record Statistics to "Reports" module EXT:workspaces (Workflows) Anpassungen am Workspace-Modul. Zielgruppe: Redaktion Unter anderem wurde die Suche innerhalb Workspaces und Darstellung von workspace-fähigen Tabellen und Rechteabfragen verbessert, und die Ausführung von AJAX-Abfragen vereinheitlicht. Relevante Commits (GitHub) [TASK] Streamline workspace module ajax dispatching | [TASK] Simplify DataHandler-> workspaceCannotEditRecord() | [TASK] Remove workspaces BE module cache | [TASK] Improve usability of search in workspaces | [TASK] Avoid unused property in workspaces GridDataService | [FOLLOWUP] Workspace stage handling details | [BUGFIX] Prevent workspace module crash in history | [BUGFIX] Properly check non-workspace-aware tables in list module | [BUGFIX] Re-add label for DB mountpoints in sys_workspace | [TASK] Have workspace aware inline children Entfernung "TSFE" Das globale "TSFE" wird zugunsten von Request-Attributen entschlackt. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Hand over state to a TSFE detail method | [TASK] Reduce TSFE mentions | [TASK] Reduce usages of TSFE in calling code of core | [TASK] Remove further TSFE methods | [TASK] Remove further TSFE properties | [TASK] Remove TypoScriptFrontendController-> sL() | [TASK] Avoid tsfe-> uniqueHash() | [TASK] Remove TSFE-> cObj and TSFE-> newCObj() | [TASK] Avoid tsfe-> recordRegister and tsfe-> currentRecord Extbase Verbesserungen der Extbase API. Zielgruppe: Entwicklung Typisierung: Auch Extbase-Properties mit integer-Keys werden für den "allowProperty"-Aufruf nun erlaubt. Das #[IgnoreValidation] PHP-Attribut wird nur innerhalb der ActionController Methoden ausgewertet, und nicht mehr an anderen (unnötigen) Stellen. Die Extbase-QueryObjectModel (QoM) Klassen wurden mit starker Typisierung versehen. Relevante Commits (GitHub) [BUGFIX] Fix extbase allowProperty() not allowing int keys | [BUGFIX] Respect #[IgnoreValidation] attribute in controllers only | [TASK] Modernise Extbase QOM classes Gesetzte Extbase-Validatoren eines Arguments werden immer aufgelöst. Zielgruppe: Entwicklung Relevante Commits (GitHub) [BUGFIX] Always set the validator for an argument in extbase Datei-Abstraktion (FAL) Dateiliste und zugehörige FAL-API. Zielgruppe: Administration Die direkte Erzeugung von "sys_file_storage" Datensätzen mit dem "Neue Inhaltselement"-Wizard wird vermieden, da nur für Root-Seiten möglich. Datei-Transparenzinformationen werden bei imagemagick und graphicsmagick-Operationen nun immer beibehalten, wenn möglich. Die Standard-Dateiendungen für erlaubte "mediafile_ext" Konfiguration wurde auf übliche, moderne Dateiformate angepasst. Die Methode ResourceStorage->getUniqueName() wurde optimiert, so dass die "automatische Dateinummererhöhung" bei Duplikaten weniger Kollisionen erzeugt und performanter abläuft. Weiterführende Dokumentation Add more common file types to mediafile_ext Relevante Commits (GitHub) [BUGFIX] Disable direct creation of sys_file_storage type 0 | [BUGFIX] Preserve transparency for image/graphicsmagick conversions | [TASK] Extend allowed list of uploadable mediafile_ext files | [TASK] Improve ResourceStorage-> getUniqueName() to reduce collisions Flexforms Flexform-Handling. Zielgruppe: Entwicklung Doppelte FlexForm-Datenauswertung wird vermieden. Relevante Commits (GitHub) [BUGFIX] Avoid double resolving of FlexForm data structure JavaScript API JavaScript API. Zielgruppe: Entwicklung FormEngine Validierungen werden mit einer zentralen Komponenten nun gesteuert. Relevante Commits (GitHub) [TASK] Feed @typo3/backend/form-engine-review from events | [TASK] Remove FormEngineValidation.pol() Das Laden von Import-Maps im Hauptframe wurde vereinheitlicht/zentralisiert. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Include all importmap configuration in authorized contexts Record API Die Record API wird nun im "Page"-Objekt verwendet um einen konsistenten internen Zugriff zu gewährleisten. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Make Page object implement RecordInterface TCA / FormEngine Optimierungen der Nutzung von TCA und Anpassungen in FormEngine. Zielgruppe: Administration Fehlerbehebung bei Validierung von neu erstellten Datensatzfeldern in FormEngine. Die Auswertung von Fremdschlüsseln in Relationen erfolgt nun anhand der vollständigen Datenbank-Zeile, und nicht nur Teilen davon. Automatische Erstellung von sprachrelevanten Datenbank-Indexen anhand der TCA-Definition. sys_file_storage nutzt nun richtige TCA typdefinitionen. Relevante Commits (GitHub) [BUGFIX] Re-add actual validation for newly created fields | [TASK] Always use full row for loading foreign table items | [TASK] Auto-add sys_language DB index for TCA tables | [TASK] Use real TCA types for sys_file_storage TCA Schema API Verbesserung der TCA Schema-API, Nutzung an mehr Stellen im Core. Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Use Schema API in EXT:extbase | [TASK] Use Schema API in EXT:frontend | [TASK] Use Schema API in PageRepository | [TASK] Use Schema API in RecordList | [TASK] Use Schema API in various places of EXT:backend | [TASK] Use TCA Schema in Restriction Container | [TASK] Use TcaSchema in SchemaMigrator | [TASK] Use TcaSchema in SchemaMigrator | [TASK] Utilize Schema API in EXT:workspaces | [BUGFIX] Gracefully check for subschema in StandardPreviewRender | [TASK] Make use of TcaSchema in DefaultTcaSchema | [TASK] Migrate BackendUtility to Schema API | [TASK] Migrate EXT:core to Schema API | [TASK] Migrate various pieces of code to Schema API | [TASK] Migrate various places in TYPO3 to Schema API | [TASK] Remove getSubSchemaDivisorField from TcaSchema | [TASK] Remove internal flag from Schema API | [BUGFIX] Add default data structure for sys_file_storage | [BUGFIX] Re-add logic for optional schema in Extbase | [TASK] Properly utilize EditLock capability | [BUGFIX] Use correct language capability field in route mapper | [BUGFIX] Prevent page module loading error for editors Tests Anpassung von Tests. Zielgruppe: Entwicklung Einige Umbauten von Unit auf Funktionale Tests, weitere Extbase-Tests (z.B. FileUpload, DateTime-Handling, Upgrade-Wizards) eingefügt. Relevante Commits (GitHub) [TASK] Add functional test for Extbase mapping to DateTime subclasses | [TASK] Add Test for MediaFieldsZeroToNullUpdateWizard | [BUGFIX] Use correct version constraint for test fixture extension | [TASK] Add functional tests for Extbase FileUpload | [BUGFIX] Stabilize Acceptance tests for new record wizard | [TASK] Avoid a useless abstract test controller | [TASK] Remove properties that are irrelevant in Functional Tests | [TASK] Remove useless check in ActionControllerValidationTest | [TASK] Remove wrong type declaration in FileConverterTest | [TASK] Restore removed BackendUtility::resolveFileReferences() tests | [TASK] Turn some extbase unit tests into functionals | [BUGFIX] Remove invalid TCA settings in workspaces and styleguide | [TASK] Ensure TemplateCest can reach its page tree | [FOLLOWUP] Remove unused data tuple | [TASK] Drop exception for testing framework in AllowedCallableAssertion Migration einiger Akzeptanz-Tests von "Codeception" hin zu "Playwright", Optimierungen der Playwright-Einbindung (GUI). Zielgruppe: Entwicklung Relevante Commits (GitHub) [TASK] Playwright: Migrate Redirect/* tests | [TASK] Playwright: Migrate BackendUser/* tests | [TASK] Playwright: Migrate Report/* tests | [TASK] Playwright: Migrate ConfigurationModule/* tests | [TASK] Playwright: Migrate DashboardModuleCest | [TASK] Playwright: Migrate SysNoteCest test | [TASK] Playwright: Lint all typescript files | [TASK] Disable db analyzer ac test in composer mode | [TASK] Playwright: Migrate Site/* tests | [TASK] Playwright: Migrate Recycler/* tests | [TASK] Playwright: Migrate View/* tests | [TASK] Always upload Playwright reports to GitLab | [TASK] Repair ac test execution | [TASK] Playwright: Migrate DbCheckModuleCest | [TASK] runTests.sh: Add command to run GUI in the browser | [BUGFIX] Remove duplicated environment variables Zurück: Inkompatible Änderungen Weiter: Modernisierung des Codes Mit unserem festangestellten Mitarbeiter Garvin Hicking unterstützen wir aktiv die TYPO3-Entwicklung. Er arbeitet im Core-Merger Team des OpenSource Projekts mit, und ist daher über die neuesten Entwicklungen bestens informiert. In unseren Artikelserien zu TYPO3-Releases beleuchtet er detailiert (und garantiert ohne KI-Automatik) wichtige Änderungen. Garvin Hicking Senior Developer garvin.hicking(at)ppw.de
WeiterlesenTYPO3 14.0 - Vorbereitung zur Entfernung von Funktionen und Schnittstellen (Deprecations)
Im Gegensatz zu den Breaking Changes sind Deprecations eine hilfreiche Information, welche Funktionen in der Folgeversion (TYPO3 15) umgestellt werden. Somit kann man sich bei allen Update-Anpassungen auf TYPO3 14 bereits für die Zukunft rüsten. Die wichtigsten Deprecations sind: Anpassungen der Modul-Iconleisten / Button-Komponenten und MetaInformation Breadcrumb Zugriff auf System Resource API Optionen von Extbase-Attributen und Namespaces der Attribute Anpassungen von Scheduler-Tasks mit eigenen Optionen Anpassungen in XLIFF Sprachdateien Veraltete Funktionen und Schnittstellen ("Deprecations") für die nächste TYPO3-Version 15 API / Schnittstellen (Generell) Wissenswert Neue Deprecations für TYPO3 v15. Zielgruppe: Entwicklung BackendUtility::isWebMountRestrictionIgnored. BackendUtility::resolveFileReferences. FileCollectionRegistry->addTypeToTCA(). GeneralUtility::resolveBackPath. PathUtility::getRelativePath(to). Weitere BackendUtility Methoden: BackendUtility::getCommonSelectFields(), BackendUtility::getItemLabel(), BackendUtility::isTableLocalizable(), BackendUtility::isTableWorkspaceEnabled(), BackendUtility::isRootLevelRestrictionIgnored. User TSConfig Option auth.BE.redirectToURL . InfoboxViewHelper STATE_* Konstanten. GraphicalFunctions->gif_or_jpeg (stattdessen neue Standard-Bildformat-Konfiguration nutzen). Weiterführende Dokumentation Various methods in BackendUtility | FileCollectionRegistry-> addTypeToTCA() method | GeneralUtility::resolveBackPath | PathUtility getRelativePath(to) methods | Deprecate User TSConfig auth.BE.redirectToURL | InfoboxViewHelper STATE_* constants | GraphicalFunctions-> gif_or_jpg Relevante Commits (GitHub) [TASK] Deprecate BackendUtility::isWebMountRestrictionIgnored | [TASK] Deprecate BackendUtility::resolveFileReferences | [TASK] Deprecate FileCollectionRegistry-> addTypeToTCA() | [TASK] Deprecate GeneralUtility::resolveBackPath | [TASK] Deprecate getRelativePath(to) methods in PathUtility | [TASK] Deprecate methods in BackendUtility | [TASK] Deprecate User TSConfig option auth.BE.redirectToURL | [TASK] Deprecate InfoboxViewHelper STATE_* constants | [FEATURE] Configure default image conversion/preview formats Wissenswert System Resource API. Zielgruppe: Integration Interne getPublicResourceWebPath Methode sollte zugunsten der System Resource API nicht mehr genutzt werden. FilePathSanitizer soll zugunsten der System Resource API nicht mehr verwendet werden. Methode createVersionNumberedFilename soll zugunsten der System Resource API nicht mehr verwendet werden, die das Cache-Busting automatisch anwendet. Weiterführende Dokumentation TYPO3\CMS\Core\Utility\PathUtility::getPublicResourceWebPath | FilePathSanitizer service | GeneralUtility::createVersionNumberedFilename Relevante Commits (GitHub) [!!!][FEATURE] Introduce System Resource API to resolve files/assets | [!!!][FEATURE] Introduce System Resource API to resolve files/assets | [!!!][FEATURE] Introduce System Resource API to resolve files/assets Redis Cache Backend. Zielgruppe: Administration Die Konfiguration der Authentifikation nur mit Passwort anstelle Benutzername+Passwort wird nicht mehr empfohlen. Weiterführende Dokumentation Deprecate usage of array in password for authentication in Redis cache backend Relevante Commits (GitHub) [FEATURE] Support username for authentication in Redis cache backend Sehr wichtig Button Template Komponenten / Button API. Zielgruppe: Entwicklung Die Methoden ButtonBar::make... und Menu::makeMenuItem und MenuRegistry::makeMenu sollen zugunsten der neuen ComponentFactory nicht mehr genutzt werden. Weiterführende Dokumentation ButtonBar, Menu, and MenuRegistry make* methods deprecated Relevante Commits (GitHub) [!!!][TASK] Modernize backend template components API Wissenswert MetaInformation API. Zielgruppe: Entwicklung Die MetaInformation API wurde bisher genutzt um in Backend-Modulen Elemente für den "DocHeader"-Bereich bereit zu stellen. Dies wird nun zugunsten der neuen Breadcrumb API nicht mehr genutzt. Weiterführende Dokumentation Deprecate MetaInformation API in DocHeader Relevante Commits (GitHub) [TASK] Deprecate MetaInformation API Die Methode AbstractTypolinkBuilder::build() soll zugunsten des neuen TypolinkBuilderInterface nicht mehr genutzt werden. Zielgruppe: Entwicklung Weiterführende Dokumentation AbstractTypolinkBuilder-> build Relevante Commits (GitHub) [!!!][FEATURE] Add TypolinkBuilderInterface with automatic DI Die Nutzung der \TYPO3\CMS\Filelist\FileList::start() -API (für eigene Filebrowser) nutzt die Sortierungsparameter nun als ENUMs statt boolean Werte, und soll darauf umgestellt werden. Zielgruppe: Entwicklung Weiterführende Dokumentation Boolean sort direction in FileList-> start() Relevante Commits (GitHub) Details API: Sprachhandling Das Handling von XLF-Dateien erfolgt nun mittels symfony/translate . Zielgruppe: Entwicklung Im Rahmen der neuen Locallang-Language-Labels-Ersetzung hat sich die Registrierung von eigenen "Loadern" verändert, und die automatische Migration wird mit TYPO3 v15 abgeschaltet, und muss auf den neuen TYPO3_CONF_VARS-Einstiegspunkt geändert werden. Weiterführende Dokumentation Localization Parsers Relevante Commits (GitHub) [!!!][FEATURE] Use symfony/translation for translatable labels Backend: User-Interface / Darstellung (UI) Button-Leiste enthält nun immer den "Shortcut"-Button (zum Teilen) und daher darf dieser in Extensions nicht mehr eigenständig platziert werden. Zielgruppe: Entwicklung Weiterführende Dokumentation Manual shortcut button creation Relevante Commits (GitHub) [FEATURE] Unify module button bar EXT:form (Formularverwaltung) Wissenswert YAML-Konfiguration für "Inheritances". Zielgruppe: Integration Die Sonder-Ebene __inheritances in YAML-Konfigurationsdateien soll zugunsten von nativer YAML-Funktion mittels Ankern (&), Aliasen (*) und Overrides (<<:) nicht mehr genutzt werden. Weiterführende Dokumentation Deprecate __inheritances operator in form configuration Relevante Commits (GitHub) [TASK] Deprecate __inheritances operator EXT:install (Installations-Tool) Aufgrund der Verschiebung von Upgrade-Wizards in EXT:core müssen namespaces von Upgrade-Wizards angepasst werden. Zielgruppe: Administration Weiterführende Dokumentation Move upgrade wizard related interfaces and attribute to EXT:core Relevante Commits (GitHub) [TASK] Allow shipping upgrade wizards w/o requiring EXT:install EXT:scheduler (Task-Planer) Der "Tabellen-Müllsammlungs"-Planer ermöglichte bislang die Konfiguration eigener aufzuräumender Tabellen. Diese Registrierung soll künftig per TCA erfolgen. Zielgruppe: Integration Weiterführende Dokumentation Table Garbage Collection Task configuration via $GLOBALS Relevante Commits (GitHub) [TASK] Migrate TableGarbageCollectionTask Der "IP Anonymisierungs"-Planer ermöglichte bislang die Konfiguration eigener Datenbankspalten zur Anonymisierung. Diese Registrierung soll künftig per TCA erfolgen. Zielgruppe: Integration Weiterführende Dokumentation IP Anonymization Task configuration via $GLOBALS Relevante Commits (GitHub) [TASK] Migrate TableGarbageCollectionTask Wissenswert Die frühere Registrierung von Scheduler-Tasks via AdditionalFieldProvider ist nun nicht mehr nötig, da diese mit regulären TCA Erweiterungen auf eigene Felder zugreifen kann. Diese Felder müssen dann nur noch im Task als Parameter hinterlegt werden (siehe Changelog-Beispiele). Zielgruppe: Entwicklung Weiterführende Dokumentation Scheduler task registration via SC_OPTIONS Relevante Commits (GitHub) [TASK] Migrate tasks to native tasks EXT:workspaces (Workflows) Wenn Stammdatensätze für Workspace-Nutzung vorgesehen sind muss die Deklaration von Inline-Child-Elementen ebenfalls Workspace-Awareness definieren. Diese wird aktuell implizit automatisch vergeben, muss aber künftig gezielt gesetzt werden. Zielgruppe: Integration Weiterführende Dokumentation Workspace aware inline child tables are enforced Relevante Commits (GitHub) [TASK] Have workspace aware inline children Extbase Sehr wichtig Extbase-Attribute wie #[Validate] sollen Parameter nun als native Konstruktur-Properties übergeben anstelle in einem geschachtelten Array. Zielgruppe: Entwicklung Weiterführende Dokumentation Deprecate passing an array of configuration values to Extbase attributes Relevante Commits (GitHub) [FEATURE] Use properties for configuration of Extbase attributes Der alte Namespace TYPO3\CMS\Extbase\Annotation für Extbase-Annotations soll zugunsten von echten Attributen in TYPO3\CMS\Extbase\Attribute nicht mehr genutzt werden. Zielgruppe: Entwicklung Weiterführende Dokumentation Deprecate :php: Annotation namespace of Extbase attributes Relevante Commits (GitHub) [DOCS] Document deprecation of TYPO3\CMS\Extbase\Annotation namespace | [TASK] Replace remaining mentions of "annotation" with "attribute" Die Argumente $argumentName und $param der Extbase-Attribute #[IgnoreValidation] und #[Validate] sind nicht mehr nötig, da die Attribute direkt auf Ebene der Methoden-Parameter nun vergeben werden können. Zielgruppe: Entwicklung Weiterführende Dokumentation Usage of :php: #[IgnoreValidation] and :php: #[Validate] attributes for parameters at method level Relevante Commits (GitHub) [FEATURE] Make validation attributes usable for method parameters FlexForms Wissenswert Die Registrierung von FlexForms via AddPiFlexFormValue() ist nun obsolet, da FlexForms direkt in addPlugin/registerPlugin() definiert werden können. Zielgruppe: Integration Weiterführende Dokumentation ExtensionManagementUtility::addPiFlexFormValue() Relevante Commits (GitHub) [!!!][FEATURE] Remove ds_pointerField and simplify FlexForm handling Fluid Die Standard-Asset-Sektionen "HeaderAssets" und "FooterAssets" beim automatischen Rendering waren nie dokumentiert und nicht sinnvoll, und sollen nicht mehr genutzt werden. Zielgruppe: Integration Weiterführende Dokumentation Deprecate auto-render assets sections Relevante Commits (GitHub) [TASK] Deprecate auto-render assets sections JavaScript Nutzung der FormEngine Javascript Methode markFieldAsChanged wurde in den Namespace typo3/backend/form-engine verschoben (statt typo3/backend/form-engine-validation wie bisher). Zielgruppe: Entwicklung Weiterführende Dokumentation markFieldAsChanged() moved to FormEngine main module Relevante Commits (GitHub) [TASK] Move markFieldAsChanged() to FormEngine main module Sprachhandling Wissenswert Diverse alte XLF-Dateien wurden konsolidiert und umbenannt. Bei Nutzung von Sprachlabels mit Referenzen auf Core-Dateien ist über interne Aliase der alte Dateiname noch möglich, aber in Zukunft nicht mehr gewünscht. Einige Sprachlabel entfallen künftig auch vollständig (da nicht mehr genutzt). Zielgruppe: Integration Weiterführende Dokumentation Deprecate unused XLIFF files Relevante Commits (GitHub) [TASK] Deprecate unused XLF files TCA Der sys_redirects Standard-TCA Typ heißt nun nicht mehr "1" sondern "default". Der alte Key soll nicht mehr genutzt werden. Zielgruppe: Integration Weiterführende Dokumentation sys_redirect default type name changed to "default" Relevante Commits (GitHub) [TASK] Allow types for sys_redirect table Zurück: Modernisierung des Codes Weiter: Ausblick auf 14.3 LTS Mit unserem festangestellten Mitarbeiter Garvin Hicking unterstützen wir aktiv die TYPO3-Entwicklung. Er arbeitet im Core-Merger Team des OpenSource Projekts mit, und ist daher über die neuesten Entwicklungen bestens informiert. In unseren Artikelserien zu TYPO3-Releases beleuchtet er detailiert (und garantiert ohne KI-Automatik) wichtige Änderungen. Garvin Hicking Senior Developer garvin.hicking(at)ppw.de
WeiterlesenTYPO3 14.0 - Modernisierung des Codes und Entschlackung
Unter der Haube ändern sich bei TYPO3 auch regelmäßig die Code-Basis für notwendige Modernisierung, Umstrukturierungen und neue interne Methoden, die nicht direkt Auswirkung auf Erweiterungen oder Implementationen haben müssen. Im Bereich der Aufräumarbeiten sind die meisten Änderungen nur für Menschen interessant, die gerne einen Blick "hinter die Kulissen" werfen wollen. Diese Änderungen haben für Extension-Entwicklung und Integration meist keine größere Relevanz, da sie nur die Core-Entwicklung betreffen. Manchmal sind dies jedoch auch schon Vorboten von künftigen Deprecations oder Breaking Changes. Zum Code-Cleanup zählen Dinge wie: Mehr Nutzung von Dependency Injection Mehr " stateless services " Bessere Nutzung von D(T)O 's (Data Transfer Objects) Mehr strikte Typisierun g, vollständigen Methoden-Signaturen Verhindern von PHP Typfehlern (Array-Zugriffe) PHP 8.5 -Syntaxkompatibilität Entfernung ungenutzten Codes Ausdünnung von großen G ott-Klassen in eigenständige Services Auflösen von @todo' s Anpassung von final, protected/private und readonly Auszeichnungen Durch die ständige "Auffrischung" auch der älteren Code-Basis bleibt TYPO3 zeitgemäß. Die Updates verwendeter Abhängigkeiten ( Dependencies ) und Optimierungen in der Buildchain zählen auch zu "under the Hood"-Verbesserungen, die das System wartbar halten. Auch das Aufräumen von bestehenden PHPStan "Baseline"-Einträgen ("Code smell") führt zu besserem Code. Hervorhebenswerte Anpassungen sind: Anpassung der internen ResourceFactory Typ-Deklaration der "render()" Methode von Core-ViewHelpern Nutzung von Symfony DI im Install-Tool-Kontext möglich Aufräumarbeiten im Code und Modernisierung API / Schnittstellen (Generell) Wissenswert Code-Cleanup. Zielgruppe: Entwicklung Generelle Code-Wartungsarbeiten. Die Attribute jsFooterLibs , jsFooterInline und jsFooterFiles wurden aus dem PageRenderer entfernt, da sie nicht mehr ausgewertet wurden. TreeController Klasse bereinigt. TagBuilder (Fluid) deklariert nun "null" Werte in Attributen konsistent als leeren String. Als Vorbereitung auf die System Resources API wurden einige Code-Stellen bereinigt, die URLs für Resourcen/Assets herstellen (Pfadangaben zu URLs konvertieren). FileProcessingService konnte readonly deklariert werden. FileIndexRepository konnte readonly deklariert werden. FileSessionHandler nutzt eine korrekte Nullable-Instanzierung. ResourceFactory wurde aufgeräumt, die internen public Methoden für einige Schnellzugriffe auf Daten entfernt, die erst innerhalb des erzeugten Objekts zur Verfügung stehen würden. Das LoggerInterface kann nun ReflectionAttributes auswerten. ContentObjectRenderer stdWrapOrder ist nun als Klassenkonstante ausgelagert. Umstellung eines alten marker-based Templates auf Fluid für interne PageRenderer Aktionen. Vermeidung einer Trait-Property in DefaultJavaScriptAssetTrait . Der ContentObjectRenderer kann nun Dependency Injection nutzen. Zahlreiche Tests wurden angepasst, Zugriff auf Caching und weiteres refactored. Die ContentContainer API kann nun "URL" Objekte direkt verarbeiten. Weiterführende Dokumentation Internal methods removed from ResourceFactory Relevante Commits (GitHub) [BUGFIX] Avoid DefaultRestrictionContainer in installtool session | [TASK] Cleanup TYPO3\CMS\Core\Http\Response | [BUGFIX] Avoid DefaultRestrictionContainer in installtool session | [BUGFIX] Cast possible record type int to string in TCA userfunc | [BUGFIX] Cast record type to a string | [BUGFIX] Fix access to nullable RawRecord in DatabaseRecordList | [TASK] Add more native type declarations in AbstractTreeView | [TASK] Add return type hints to ViewHelper classes | [TASK] Add return type to BU::getTCEFORM_TSconfig() | [TASK] Apply more type declarations to ResourceStorage | [TASK] Avoid inline compilerInput parentData | [TASK] Avoid SingletonInterface in HashService | [TASK] Avoid two unused variables in SiteSettingsController | [TASK] Avoid unused $request property in ext:reports SecurityStatus | [TASK] Avoid unused argument rollbackFields | [TASK] Avoid useless SingletonInterface in FlexFormService | [TASK] Break service loop in ContentFetcher | [TASK] Drop unneeded parameters from Clipboard-> confirmMsgText() | [TASK] Get FlexFormTools injected via DI | [TASK] Harden extbase RequestBuilder | [TASK] Harden QueryHelper | [TASK] Have readonly ext:redirects IntegrityService | [TASK] DataHandler: Remove early initialisation of slug and uuid default values | [TASK] Clean up ext:impexp worker classes | [TASK] Clean up extbase DataMapFactory | [TASK] phpstan staticMethod.alreadyNarrowedType | [TASK] Mitigate database difference in json field test assertion | [TASK] Mitigate postgres DB issue in styleguide | [TASK] Make methods and properties in final ViewHelpers private | [TASK] Move markFieldAsChanged() to FormEngine main module | [TASK] Move record list specific actions from AjaxDataHandler | [TASK] Obtain DH in ClearPageCacheController when needed | [TASK] Reduce mess in CharsetConverter | [TASK] Offload charset table generation | [TASK] Refactor extension data import registry keys to extension format | [TASK] Remove clearIconCache in IconFactory | [TASK] Remove legacy history information from sys_log leftovers | [TASK] Remove orphaned language keys in locallang_misc.xlf of EXT:core | [TASK] Remove outdated @todo in TableDiff | [TASK] Remove outdated composer class-alias-loader information | [TASK] Remove outdated vfsStream related workarounds | [TASK] Remove stray @todo from IconSize deprecation removal | [TASK] Remove superfluous todo in AbstractCompositeValidator | [TASK] Remove two unused methods in DataHandler | [TASK] Remove unnecessary f:count call | [TASK] Remove unused and broken FormEngine.getFormElement() | [TASK] Remove unused Export option for static resources | [TASK] Remove unused FlashMessageController | [TASK] Remove unused imports in extbase | [TASK] Remove unused labels in live search | [TASK] Replace $_FILES with PSR-7 UploadedFile in ExtendedFileUtility | [TASK] Require FormPersistenceManager to be injected | [TASK] Resolve many phpstan staticMethod.alreadyNarrowedType findings | [TASK] Use strict types in MvcPropertyMappingConfigurationService | [TASK] Use DI in FlexFormValueFormatter | [TASK] Use DI in ViewHelpers | [TASK] Improve DI in FAL StorageRepository | [TASK] Inject service classes into ViewHelpers which use DI already | [TASK] More DI in Mail\TransportFactory | [TASK] Use DI in ExtractorService | [TASK] Ensure ReferrerEnforcer is stateless | [TASK] Have readonly stateless BootstrapRenderer | [TASK] Have stateless GroupResolver | [TASK] Have stateless workspaces ElementEntityProcessor | [TASK] Have stateless workspaces IntegrityService | [TASK] Have stateless workspaces PreviewUriBuilder | [TASK] Have types in extbase ClassSchema related classes | [TASK] Make extbase Typo3DbQueryParser less stateful | [TASK] Make FormEngine InlineStackProcessor stateless | [TASK] Stateless ModuleTemplate and history related classes | [TASK] Turn extbase ColumnMap into a readonly DO | [TASK] Turn extbase DataMap into a readonly DO | [TASK] Use data object for TCA processing | [TASK] Use native types in processDatamap_postProcessFieldArray usages | [TASK] Thin out PageTreeView and PagePositionMap classes | [TASK] Inline a static property in LocalPreviewHelper | [TASK] Make some FAL related services more harmless | [TASK] Declare ModalElement as type import in file list replace handler | [TASK] Remove readonly from PCPP arguments in WidgetContext | [BUGFIX] Set default value for properties | [BUGFIX] Add missing null coalescing operator in AbstractTemplateModuleController | [BUGFIX] Avoid array access warning in EditDocumentController | [TASK] Add declare(strict_types=1) to Extbase Argument | [BUGFIX] Properly feed DatabaseRecordList-> start() with int | [TASK] Link in about module should point to status submodule | [TASK] Ignore all files in Build/composer | [TASK] Remove unused dashboard doughnut chart css | [TASK] Remove unused properties in PageRenderer | [TASK] Clean up FileStorage\TreeController | [BUGFIX] Avoid folders being rendered twice | [TASK] Avoid unintentional null values passed to TagBuilder | [TASK] Cleanup patch for system resources integration | [TASK] Declare class FileProcessingService readonly | [TASK] Make FileIndexRepository readonly | [BUGFIX] Prevent log error when installToolSessionHandler is not set | [TASK] Remove internal methods in ResourceFactory | [TASK] Remove PHP 8 version checks for ReflectionAttribute | [TASK] Declare ContentObjecRenderer stdWrapOrder constant | [TASK] Use ext:core template file in FE PageRenderer | [TASK] Inline property in DefaultJavaScriptAssetTrait | [TASK] Have dependency injection in ContentObjectRenderer | [TASK] Allow URL objects in ContentContainer.setUrl() API: Backend Code-Cleanup. Zielgruppe: Entwicklung Die Nutzung von Symfony DI im "Install-Tool" Kontext ist nun möglich (mit kleineren Einschränkungen). Relevante Commits (GitHub) [TASK] Remove main application services from failsafe container API: DataHandler Code-Cleanup. Zielgruppe: Entwicklung Interne DataHandler properties userid und admin entfernt, da bereits im BE_USER Objekt enthalten. Relevante Commits (GitHub) [TASK] DataHandler: Remove properties userid and admin API: TCA / FormEngine Code-Cleanup. Zielgruppe: Entwicklung TCA vom "Code Editor" wurde von EXT:backend TCA Override in EXT:core Haupt-TCA verschoben. Das (unnötige) Modell für Extensionmanager-Pakete wurde im TCA aufgehoben und auf lowlevel-Ebene implementiert. Relevante Commits (GitHub) [TASK] Streamline codeEditor's TCA | [TASK] Free table tx_extensionmanager_domain_model_extension from TCA Extbase Code-Cleanup. Zielgruppe: Entwicklung Ungenutzte Methoden vom ActionController wurden entfernt. Relevante Commits (GitHub) [TASK] Drop unused internal method in ActionController Fluid Wissenswert Code-Cleanup. Zielgruppe: Entwicklung Die render() Methode von ViewHelpern in Fluid5 muss zwingend eine Typdeklaration besitzen (string), Anpassung der Core-Viewhelper um dies zu erfüllen. Relevante Commits (GitHub) [TASK] Ensure ViewHelpers conform to upcoming type changes Zurück: Bugfixes und Verbesserungen Weiter: Künftige Entfernung (Deprecations) Mit unserem festangestellten Mitarbeiter Garvin Hicking unterstützen wir aktiv die TYPO3-Entwicklung. Er arbeitet im Core-Merger Team des OpenSource Projekts mit, und ist daher über die neuesten Entwicklungen bestens informiert. In unseren Artikelserien zu TYPO3-Releases beleuchtet er detailiert (und garantiert ohne KI-Automatik) wichtige Änderungen. Garvin Hicking Senior Developer garvin.hicking(at)ppw.de
WeiterlesenTYPO3 Version 13.4.21
In der Reihe TYPO3 Release-Notizen beleuchten wir regelmäßig die wichtigsten Bug-Fixes/Security-Issues oder wichtigen Änderungen in einem neuen Patchlevel-Release. Diese Releases sind gemäß Roadmap bereits terminiert und erscheinen grob einmal im Monat . Bugs haben je nach Projekt unterschiedliche Auswirkungen. Was in einem Projekt kritisch ist, kann in einem anderen kaum eine Rolle spielen. Unsere Gewichtung ist daher subjektiv und soll die Relevanz anderer Fixes nicht herabspielen . Aktuelles Release Das aktuelle Release ist ein Maintenance-Release und behebt hauptsächlich ein Symfony 7.4 Dependency-Injection Kompatibilitäts-Problem für Composer-basierte Installationen. Zudem gibt es Regression-Bugfixes für Änderungen in Fluid LinkAction ViewHelper , Behebung von Workspace-Zugriffsrechtsproblemen. Auch enthalten ist ein Update auf Fluid 4.5.0 , welches nun einige neue Deprecations hervorrufen kann. Beim Update also auf ein ggf. aktiviertes Deprecation-Log achten! Zwei kleine Goodies: Die Thumbnail-Ansicht im Detail-Info-Bereich einer Datei erscheint nicht mehr verpixelt. Und die DBAL-Integration kann nun mit Postgresql GUID-Typen umgehen. Insgesamt gab es 56 Änderungen . Regression-Bugfixes Sehr wichtig Frische Composer-Installationen (oder Upgrades) scheitern nun nicht mehr an der Symfony 7.4 Dependency-Injection-Änderung, die bei nicht Nutzung nicht vorhandener PHP Interface-Klassen Fehler geworfen hat. Wissenswert Der Fluid UriAction ViewHelper kann nun reine Zahlen in "section" Parametern wieder wie bisher auswerten Die Fluid f:*.action ViewHelper (zum Erstellen von Links) verweisen nun wieder auf die Root-Seite falls "pageUid" als Argument leer ist. Die Zugriffsrechte auf das Workspace-Vorschaumodul erlaubten den Zugriff nur, wenn auch genereller Zugriff auf das Workspace-Modul existierte. Diese Rechte werden nun stattdessen individuell ausgewertet, so dass auch ohne Workspace-Modulzugriff eine Vorschau ausgelöst werden kann. Fluid Sehr wichtig Update auf Fluid 4.5.0. Hierdurch werden in Vorbereitung auf Fluid5 nun zahlreiche Deprecation-Warnungen geworfen, die man im Auge halten sollte. Ein Update der TYPO3-Patchlevel-Version wird daher ggf. Auswirkungen auf bisher leere Deprecation-Logs haben. Deprecations sollte in Produktivinstanzen nicht geloggt werden! Weiterhin: Neue ViewHelper (range, length, merge, startsWith, endsWith, round, ceil, floor, min, max, contains) EXT:indexed_search Korrektur der HTML-Struktur für Buttons in der Indexed-Search-Backend-Statistik für eine korrekte Darstellung Bedingung für Anstoß der Neu-Indexierung der Suche korrigiert Backend: UI Infoboxen im Backend stellen nun keinen leeren Titel mehr dar, wenn dieser nicht gesetzt ist. Der Datumspicker im Backend stellt nun keine doppelten "Lösch"-Icons mehr dar Autocomplete im Datumspicker ist nun deaktiviert, um nicht mit dem Kalender-Popup zu kollidieren Der Datumspicker ändert nicht mehr unnötig die DOM-Reihenfolge, die CSS-Styling beeinflussten Vermeidung von doppelter HTML-Kodierung für Datensatztitel im Workspace-Modul Die Suche nach Sonderzeichen im Seitenbaum ("&") wertet diese nun korrekt aus URI-Sonderzeichen im LinkBrowser für eigene Linkziele werden nun korrekt zurück an Felder wie "header_link" übermittelt Korrekte visuelle Darstellung der Rechte von Inhalts-Typen für Backend-Benutzer(gruppen) Das Info-Popup für den Link zu einer Seite vom Typ "Externe URL" zeigt nun den Link abhängig von der gewählten Sprachversion Hidden Input Elemente werden in einigen Modulansichten (Backend-Benutzerverwaltung, Planer) korrekt platziert um eine falsche Rahmen-Darstellung von Buttons zu vermeiden Bei falscher Sprachzuordnung in den Site Sets wird die Fehlermeldung nun korrekt ausgegeben Der Sprach-Downloadmanager zeigt nun die Sprachlabels im Button an, um bei langen Listen den Überblick zu behalten auf welche Sprach sich ein Downloadpfeil bezieht Darstellung von visuell abgeschnittenen Inhalten im Element-Browser korrigiert Darstellung eines TYPO3 Trademark-Links in Login und About-Bereich Darstellung von Tabellenrahmen korrigiert, wenn es als erstes Element eines Panels erscheint Kürzung des Copyright/Lizenz-Hinweis auf der Login-Seite Vorschau von Bilder im Datei-Info-Block (Backend) erscheint nun weniger pixelig API: Backend Wenn eigene Datensätze im LinkHandler definiert und in der Datensatzliste aufgerufen wurden, konnte ein PHP-Typfehler für undeklarierten Variablenzugriff erscheinen Beim Auslesen von FAL-Objekten die zu einem ungültigen Storage-Datensatz zeigen wird dieser Fehler nun korrekt ausgewertet Labels im Page-Tree können nun auch "LLL:EXT"-Sprachübersetzungen nutzen Das neue Sicherheits-Attribut `AsAllowedCallable` für `userFunc` TypoScript-Aufrufe kann für bessere künftige Kompatibilität in Erweiterungen auch schon in v12 und v13 eingesetzt werden - es ist dort dann jedoch noch funktionslos. FAL-Storages die als "offline" markiert sind können weiterhin bearbeitet werden Vermeidung eines PostgreSQL-Fehlers in der Backend-Datensatz-Datenbanksuche in Verbindung mit `LOWER()` Nutzung des DBAL "GUID"-Datenfeldtyps (vor allem für PostgreSQL) ist möglich (in ext_tables.sql) PHP-Typfehler Typfehler beim Zugriff auf fehlende Icon-URLs im BackendLayout DataProvider PHP 8.5 Typfehler (Array-Key mit NULL) Backend: CKEditor Das Entfernen von Links im RTE-Modul, die auf versteckte/fehlende Seiten zeigen, ist nun wieder korrekt möglich Wenn im CKEditor nur ein Teil eines Links markiert und bearbeitet wird, konnte das zum Aufteilen der ` ` Links führen. Nun wird immer das gesamte Link-Element angepasst. Dependencies Update der symfony/* Komponenten Update von NPM dependencies PPW Insights: Lassen Sie sich von digitaler Innovation inspirieren! Jetzt anmelden und digital informiert bleiben
Weiterlesen02.12. - Der neue Task-Planer
02.12.2025: Der neue Task-Planer Bei TYPO3 wird der Task-Planer ("Scheduler") dazu benutzt, um im Hintergrund gewisse System-Aufgaben durchzuführen (Datenbank-Reinigung, FAL-Abgleich, Import/Export-Tasks). Hierfür gibt es zum einen die grafische Oberfläche zum Anlegen und Konfigurieren von Tasks, und zum anderen den Kommandozeilen ("CLI")-Prozess, der diese ganzen Tasks zu den gewünschten Uhrzeiten im Hintergrund ausführt. Mit TYPO3 14.0 ist nun der technische Unterbau des Systems rundum erneuert. Alle Tasks werden nun mit der Macht der TCA-Konfiguration definiert, und sind so mitsamt aller Features in die FormEngine integriert. Endlich muss man keine “FieldProvider” mehr schreiben um eigene Tasks mit Optionen auszustatten, oder ist auf die GUI der Symfony-Command-Konfiguration beschränkt. Größter Vorteil jedoch: Die immer problematische Serialisierung (=Speicherung der Task-Konfiguration in einem abstrakten Datenobjekt, was zur Ausführung dann wieder hergestellt werden muss) weicht nun einer zuverlässigen JSON-Notation aller Argumente/Parameter. Dadurch können Tasks nun auch leichter exportiert und importiert werden, und auch regulär über den Papierkorb verwaltet werden. Alte Tasks werden nahtlos über den Upgrade-Wizard in das neue Format umgestellt. So bleibt auch bei Updates der PHP-Klassen künftig ein Task immer stabil und geht nicht mal versehentlich “verloren” oder muss fehleranfällig migriert werden - denn früher beim Wechsel zwischen unterschiedlichen Task-Typen gingen gerne mal Einträge oder Daten verloren, die nun dank FormEngine-Validierung und DataHandler-Persistierung vermieden werden - beide APIs natürlich mit allen Schnittstellen-Vorteilen, die man in TYPO3 gewöhnt ist. Abgerundet wird der Task-Planer durch ein flexibleres Taskgruppen-Konzept, in der man Gruppen auch durch eine Farbkodierung unterscheidbar machen kann. Durch den neuen Wizard zur Auswahl des neu zu erstellenden Tasks kann man sich leichter durch die verfügbaren Typen navigieren. Der Wizard lässt sich mit PSR-14 Events natürlich auch anpassen. Als kleiner Bonus lässt sich via TCA nun auch sehr einfach eine Voreinstellung zur Taskplaner-Zeitfrequenz hinzufügen: <?php $GLOBALS [ 'TCA' ][ 'tx_scheduler_task' ][ 'columns' ] [ 'execution_details' ][ 'config' ][ 'overrideFieldTca' ] [ 'frequency' ][ 'config' ][ 'valuePicker' ] [ 'items' ][] = [ 'value' => '0 2 * * *' , 'label' => 'Nicht nach Mitternacht füttern!' , ]; Zurück: Tag 1 Weiter: Tag 3 Zurück: Übersicht
Weiterlesen01.12. - Neue ViewHelper
01.12.2025: Neue ViewHelper Mit TYPO3 14 kommen mehrere neue ViewHelper hinzu, die vor allem das Rendering einer Seite deutlich flexibler machen. Besonders in Verbindung mit Drittanbieter-Extensions lässt sich nun vieles direkt im Template statt in TypoScript oder über Events steuern. Das spart Zeit, reduziert Komplexität und hält das Setup sauberer. Eine kleine Demo: < html > < f:page.title > TYPO3 v14 – Adventskalender Tag 1 </ f:page.title > < f:page.meta property = "og:title" > Adventskalender TYPO3 v14 </ f:page.meta > < f:page.headerData > < link rel = "preconnect" href = "https://www.domain.tld" > </ f:page.headerData > < f:page.footerData > < script > console . log ( 'Ho Ho Ho...' ); </ script > </ f:page.footerData > </ html > In Kombination mit den bereits bekannten ViewHelper <f:asset.css /> und <f:asset.script /> lässt sich damit der komplette Head- und Footer-Bereich strukturiert und vollständig aus dem Fluid-Template heraus steuern. Zurück: Übersicht Weiter: Tag 2
Weiterlesen