
Versionen lassen sich überspringen.
Du kannst direkt von einer älteren Fassung auf die aktuelle gehen – ein Zwischenschritt ist nicht nötig. Kein Upgrade-Wizard setzt einen anderen voraus, und die Datenbank wächst im Wesentlichen nur: Drei Felder sind seit 5.3.40 weggefallen, aber die wurden schon vorher nicht mehr gelesen – die Analyse bietet sie lediglich zum Löschen an.
Reihenfolge nach dem Update:
vendor/bin/typo3 extension:setup– die Datenbankanalyse legt alle neuen Spalten auf einmal anvendor/bin/typo3 cache:flush- Im Install Tool die angebotenen Upgrade Wizards ausführen
- Den T3SB-Konfigurations-Datensatz einmal speichern
Im Install Tool erzwingt TYPO3 die Reihenfolge selbst – solange Tabellen oder Spalten fehlen, erscheint statt der Wizard-Liste ein Kasten, der sie anlegt. Über die Kommandozeile gibt es diese Sperre nicht: upgrade:run prüft das Schema nicht von sich aus. Deshalb steht extension:setup oben an erster Stelle. Und die Sperre greift nur bei fehlenden Tabellen und Spalten, nicht bei geänderten Spaltentypen.
Lies außerdem die Release-Notes der übersprungenen Versionen durch: Die Änderungen am Verhalten summieren sich.
Kommst du von einer Version vor 5.3.50?
Dann liegt ein Einschnitt dazwischen. TYPO3 14.3 und PHP 8.2–8.5 gelten durchgehend, aber zwei Abhängigkeiten wechseln:
| bis 5.3.48 | ab 5.3.50 | |
|---|---|---|
b13/container | 3.2.2 – 3.99.99 | 4.1.0 – 4.99.99 |
t3sb_package | Pflicht | nicht mehr nötig |
Daran hängt ein Fallstrick: Bis 5.3.48 lagen das heruntergeladene CSS/JS, die Bootstrap-Quellen und das generierte SCSS in EXT:t3sb_package/Resources/Public/, ab 5.3.50 in typo3temp/assets/t3sbootstrap/. Der Upgrade-Wizard „Move generated assets out of EXT:t3sb_package“ kopiert sie – aber nur, solange t3sb_package noch installiert ist. Also erst updaten und den Wizard ausführen, dann entscheiden, ob die Extension raus kann. Ist sie schon weg: vendor/bin/typo3 t3sbootstrap:cdnToLocal baut die Dateien neu.
NEW:
Ein einfaches div im RTE. General HTML Support hält ein <div> im Markup, macht daraus aber kein Widget: kein Auswahlrahmen, keine Kennzeichnung im Editor, nichts, woran ein Toolbar-Eintrag ansetzen könnte. Klassen ließen sich deshalb nur in der Quelltextansicht setzen – seit dem Wechsel von CKEditor 4 auf 5, wo es dafür noch einen Knopf gab. Der neue Toolbar-Eintrag Div führt div als eigenes Modellelement und zeichnet es als editierbares Block-Widget aus. Einfügen umschließt die markierten Blöcke, sofern sie denselben Elternknoten haben, sonst entsteht ein leeres div mit einem Absatz; Div auflösen nimmt die Hülle weg und behält den Inhalt. Verschachtelung geht zwei Ebenen tief, darunter ist der Eintrag ausgegraut. Enter auf der letzten leeren Zeile springt hinter das div, Backspace auf der ersten davor – dieselbe Geste wie beim Alert. Im Backend markiert eine graue Umrandung das Element und zeigt seine Klassen als kleines Etikett in der Ecke; im Frontend ist davon nichts zu sehen
Eigene Klassen für das div. Das Werkzeug Klassen aus 5.3.56 hat eine dritte Gruppe Div bekommen, konfiguriert über t3sbClassPicker wie row und col: eigene Einträge kommen dazu, null entfernt einen der vier mitgelieferten (p-3, border, rounded, text-center), und ein Eintrag darf mehrere Klassen tragen, die gemeinsam gesetzt und gemeinsam entfernt werden. Eine Klasse, die nicht in der Liste steht, geht nicht verloren – sie wird mitgeführt, erscheint nur nicht als Schalter
Die h1 kann den Navigationstitel nehmen. Bisher stand dort ausnahmslos der Seitentitel – lange, für die Suche geschriebene Titel also auch über der Seite, obwohl im Menü die kurze Fassung steht. Der Konfigurations-Datensatz hat unter Page title (h1) den neuen Schalter Navigationstitel verwenden. Ist er an, nimmt die h1 das Seitenfeld nav_title; Seiten ohne Navigationstitel behalten ihren Seitentitel – eine Option darf keine leere Überschrift erzeugen. Ab Werk aus, bestehende Seiten ändern sich nicht. Neue Datenbankspalte page_titlenavtitle: nach dem Update die Datenbankanalyse ausführen und den Konfigurations-Datensatz einmal speichern, erst dabei wird die neue Konstante geschrieben
ACHTUNG, bestehende Inhalte:
Das Werkzeug beansprucht jedes div, das keinem anderen Werkzeug gehört – alles außer alert, row und col-*. Ein Text, in dem schon div stehen, sieht im Editor nach dem Update anders aus: Wo vorher ein unsichtbarer Block war, steht jetzt ein umrandeter Kasten mit seinen Klassen in der Ecke. Am gespeicherten Markup ändert sich nichts. Sobald ein Element beansprucht ist, hebt General HTML Support nichts mehr dafür auf – ein id, ein data-Attribut oder ein inline gesetztes style="column-count:2" wären beim ersten Speichern verloren. Das Plugin trägt deshalb alle Attribute im Modell mit und schreibt sie unverändert zurück. Wer das Werkzeug nicht will, schaltet rteDiv in der Extension-Konfiguration unter RTE aus; dann sind die div wieder unsichtbare Blöcke und GHS hält sie wie bisher. Pro Seitenbaum geht es über RTE.t3sbootstrap.features.div
Geändert:
Eigenes SCSS: der Konfigurations-Datensatz ist die Quelle. Das Site-Setting bootstrap.cdn.keepVariablesentfällt. Es hat sein Versprechen ohnehin nicht gehalten: Beim Speichern im Backend wurde die Datei immer aus dem Datensatz überschrieben, der Schalter wirkte nur gegen den Scheduler-Task. Er hielt die Datei also ausschließlich dann, wenn beide Felder im Datensatz leer blieben – und genau dann lag der Inhalt nur noch unter typo3temp/, das im Core ausdrücklich als jederzeit löschbar deklariert ist und von jedem Update, jedem Deployment und jedem Cache-Flush geleert wird. Das Setting erzeugte damit die Lücke, die es schließen sollte. Ab jetzt gilt durchgängig: der Datensatz ist die Quelle, die Datei ist abgeleitet. Damit greifen die beiden Werkzeuge, die es dafür schon gibt und die eine Datei nicht sehen können – Konfiguration übertragen (der JSON-Export enthält custom_scss und custom_variables_scss und ist damit zugleich die Sicherung dieser Inhalte) und die Datensatz-Historie von TYPO3 mit Diff und einzeln rücknehmbaren Schritten
t3sbootstrap:customScss überschreibt vorhandenes SCSS nicht mehr. Bis 5.3.56 hat das Kommando den Inhalt bei jedem Lauf auf das Bootswatch-Theme bzw. den Vorgabe-Kommentar zurückgesetzt – dafür waren die Zeitstempel-Kopien _<zeit>-custom-<pid>.scss neben der Datei da. Beides ist weg: der Reset und die Kopien. Jetzt gilt: Datensatz hat Inhalt → die Datei wird daraus geschrieben; Datensatz leer und Datei vorhanden → die Datei wird einmalig in den Datensatz übernommen (der Altbestand aus keepVariables = 1); beides leer → Initialisierung aus Bootswatch oder Vorgabe-Kommentar wie bisher. Wer das Bootswatch-Theme neu ziehen will, leert das Feld im Backend und lässt das Kommando laufen. Zu tun beim Update: nichts, wenn keepVariables auf 0 stand (Werkseinstellung). Stand es auf 1, einmal t3sbootstrap:customScss <Rootseiten-ID> laufen lassen, bevor der Konfigurations-Datensatz gespeichert wird
Neuer Hinweis im Backend-Modul, wenn bei aktiviertem SCSS die Bootstrap-Quellen unter T3SB-Bootstrap/Bootstrap/scss/ fehlen. Bisher meldete das Modul nur fehlende CDN-Assets; fehlten die Quellen, blieb die Seite stumm unformatiert – die Include-Datei Bootstrap/bootstrap-<pid>.scss wird nämlich nicht aus dem Datensatz neu erzeugt, die schreibt nur das Kommando
Bugfix:
Priorisiertes Inline-JavaScript lief zweimal. Gemeldet als Issue #532. Registriert eine Extension ihr Inline-JavaScript mit priority – Cookie-Consent-Lösungen tun das regelmäßig, weil ihr Code vor allem anderen laufen muss –, stand es anschließend zweimal auf der Seite: einmal inline im HTML und ein zweites Mal in der Datei, die IsInline unter typo3temp/assets/ erzeugt. Bei var fällt das nicht auf; bei einem globalen let, const oder class wirft der zweite Durchlauf einen Redeclaration-Error – und der beendet die gesamte erzeugte Datei, nicht nur die doppelte Stelle. Sichtbar wurde das als Seite, die nie fertig lädt, weil der Preloader stehen bleibt. Die Ursache war ein fehlendes Argument: PageRenderer schreibt erst das priorisierte Inline-JS ins HTML und ruft erst danach das Ereignis für das nicht-priorisierte auf; gerendert wird dabei nur gelesen, der Collector behält seine Einträge. getInlineJavaScripts() ohne Argument filtert nicht nach Priorität und lieferte deshalb auch die bereits ausgegebenen Skripte – das removeInlineJavaScript() danach kam für sie zu spät. Die Schleife liest jetzt getInlineJavaScripts(false). Priorisiertes Inline-JavaScript bleibt damit inline, wofür priority da ist; bisher landete es in einer Datei im Footer. Wer mit disableInlineJs = 1 ausgewichen ist, kann den Schalter zurücknehmen – danach Cache leeren und die alten typo3temp/assets/t3sbootstrap_*.js löschen, sie tragen den Hash ihres alten Inhalts. Dank an den Melder
ACHTUNG, neues DB-Feld: eine Spalte – page_titlenavtitle in tx_t3sbootstrap_domain_model_config, für die Option „Navigationstitel verwenden“. Nach dem Update also die Datenbankanalyse ausführen (Install-Tool → Analyze Database Structure bzw. vendor/bin/typo3 extension:setup), danach Cache leeren und den Konfigurations-Datensatz einmal speichern – nur beim Speichern wird t3sbconstants.typoscript neu geschrieben. Kein Upgrade-Wizard
Stand das Site-Setting bootstrap.cdn.keepVariables auf 1 – nicht die Werkseinstellung –, dann vor dem Speichern des Datensatzes einmal vendor/bin/typo3 t3sbootstrap:customScss <Rootseiten-ID> laufen lassen: Das eigene SCSS liegt in diesem Fall nur als Datei vor und wird dabei in den Datensatz übernommen
Release notes v5.3.57 - als PDF-Datei
NEW:
Klassen für Zeile und Spalte im RTE. Das Spalten-Werkzeug hebt seit jeher jede Klasse auf, die es nicht selbst setzt, und schreibt sie beim Speichern unverändert zurück – eintragen ließ sich eine aber nur in der Quelltextansicht. Dafür gibt es jetzt ein eigenes Werkzeug in der Toolbar, direkt hinter Spalten. Die Liste hat zwei Gruppen, Zeile und Spalte, jeder Eintrag ist ein Schalter: Spaltenabstand, Ausrichtung, Innenabstand, Rahmen. Geschrieben wird in dasselbe Modellattribut extraClasses, es entsteht also kein neues Element und kein zusätzliches Markup. Steht der Cursor außerhalb einer Spalten-Zeile, ist der Knopf aus und der Tooltip sagt warum; sonst nennt er die gesetzten Klassen. Das Panel bleibt nach einem Schalter offen, weil mehrere Klassen fast immer zusammen gesetzt werden. Einträge mit demselben exclusive-Schlüssel ersetzen sich gegenseitig, so verdrängt g-0 ein gesetztes g-3. Die Breitenklassen stehen nicht zur Wahl und lassen sich nicht entfernen – die Spaltenaufteilung ändert das Spalten-Werkzeug
Die Liste bestimmt das Projekt. Sie steht als t3sbClassPicker in der RTE-YAML, nach row und col getrennt, und ist bewusst eine Map und keine Liste: TYPO3 führt importierte YAML mit replaceAndAppendScalarValuesRecursive() zusammen, hängt Listen also an und ersetzt nur Schlüssel. Ein Sitepackage ändert damit einen einzelnen Eintrag, entfernt ihn mit null oder ergänzt eigene. Ein Eintrag darf mehrere Klassen tragen – bg-brand text-white p-4 wird gemeinsam gesetzt und gemeinsam entfernt. Ein Freitextfeld gibt es bewusst nicht
Bugfix:
„Backend-Layout (für Unterseiten dieser Seite)“ wurde nicht vererbt. Wer in den Seiteneigenschaften unter Erscheinungsbild ein Backend-Layout für Unterseiten wählte, sah davon auf einer danach angelegten Unterseite nichts – die stand weiterhin auf „1 Spalte“. Die Ursache war eine Zeile im Page-TSconfig der Extension: TCAdefaults.pages.backend_layout = pagets__OneCol. Sie schrieb das Layout in das eigene Feld jeder neu angelegten Seite, und die Vererbung greift nur, solange dieses Feld leer ist. Das gilt an beiden Stellen gleichermaßen: Im Backend löst BackendLayoutView erst das eigene Feld auf und steigt nur bei leerem Wert die Rootline nach backend_layout_next_level hoch; im Frontend slidet fluid_styled_content über levelfield:-2, backend_layout_next_level, slide und lässt das Ergebnis von override.field = backend_layout überschreiben. Die Einstellung war also nie kaputt – sie kam nur nie zum Zug. Der Vorgabewert ist ersatzlos entfernt; ohne gesetztes Layout gilt weiterhin OneCol. Bestehende Seiten ändern sich nicht: bei ihnen steht pagets__OneCol real in der Datenbank. Ein Upgrade-Wizard wäre nicht möglich, weil sich ein bewusst gewähltes „1 Spalte“ nicht von einem vorgegebenen unterscheiden lässt – wer die Vererbung auf einem bestehenden Zweig will, leert das Feld Backend-Layout auf den betroffenen Unterseiten. Dank an den Melder
Kein DB-Update nötig. Diese Version legt keine neuen Spalten an und bringt keinen Upgrade-Wizard mit. Nach dem Update genügt Cache leeren
Release notes v5.3.56 - als PDF-Datei
NEW:
Reiter „T3SB“ in den Seiteneigenschaften. Navbar, Meta-Zeile, Brotkrumen, Seitentitel, Jumbotron und Footer lassen sich jetzt auf einer einzelnen Seite abschalten, ohne einen eigenen Konfigurations-Datensatz anzulegen. Sechs Häkchen in einem eigenen Reiter. Ein Häkchen zeigt sich nur, solange der zugehörige Bereich im T3SB-Konfigurations-Datensatz überhaupt aktiv ist – wer die Navbar site-weit abgeschaltet hat, bekommt dafür keines zu sehen. Der Reiter ist standardmäßig aus und erscheint erst, wenn in der Extension-KonfigurationpageOptOut eingeschaltet wird
Einzug für die Inhaltselemente einer Seite. Eine Seite rückt ihre Inhaltselemente um 1 bis 6 Rasterspalten ein; das Feld steht im neuen Reiter T3SB. Der Einzug greift ab dem Breakpoint lg und nur im einspaltigen Backend-Layout. Unterseiten erben den Wert, bis eine von ihnen einen eigenen setzt – leer heißt erben, 0 heißt ausdrücklich keiner, womit sich ein geerbter Einzug auf einem Zweig gezielt wieder abschalten lässt. Wer die Vererbung gar nicht will, schaltet contentIndentInherit aus: Dann zählt allein die Seite, auf der der Wert steht. Die Auswahlliste verliert dabei den Eintrag Von der übergeordneten Seite erben, und der leere Wert heißt dort schlicht Kein Einzug – eine gespeicherte 0 bedeutet dasselbe, der Schalter lässt sich also hin und her stellen, ohne dass ein Wert umgesetzt werden muss. Ein einzelnes Element nimmt sich im Reiter Erscheinungsbild aus. Vier Element-Typen sind ohnehin ausgenommen, weil sie über die ganze Breite gehören: Hintergrund- und Parallax-Wrapper sowie Carousel- und Swiper-Container. Der Schalter contentIndent ist ab Werk aus, contentIndentInherit ab Werk an
Überschrift senkrecht ausgeben. Der Überschriftenblock eines Inhaltselements – Überschrift, Unterzeile und Überzeile – lässt sich um 90 Grad drehen, nach oben oder nach unten gelesen. Das Feld Vertical header steht im Reiter Kopfzeilen, die Drehung gilt ab lg; darunter steht der Text wieder normal. Liegt die Überschrift über Header inside im Hintergrund-Wrapper, wird sie dort senkrecht mittig gesetzt. Das Feld hängt an genau dieser Option, und zwar in beide Richtungen: Es erscheint im Formular nur im Hintergrund-Wrapper und nur, solange Header inside an ist – und gerendert wird die Drehung auch nur dort. Ohne Wrapper gäbe es nichts, worin der herausgelöste Block zentriert werden könnte. Das Häkchen wirkt sofort: headerInside baut das Formular neu auf und trägt dabei die aktuellen Werte, ohne zu speichern. Der Schalter headerVertical ist ab Werk aus
Textfarben als eigenes Dropdown im RTE. Die sechs Bootstrap-Textfarben standen bisher zwölfmal in der Styles-Auswahl: einmal als Text Color * für die Markierung, einmal als Block Color * für den Absatz. Sie haben jetzt ein eigenes Werkzeug in der Toolbar, so wie die Badges seit 5.3.51 – die Styles-Auswahl schrumpft dadurch von 41 auf 29 Einträge. Das Markup ist Zeichen für Zeichen dasselbe, bestehende Inhalte brauchen keine Migration. Im Editor sind die Farben jetzt auch zu sehen; Bootstrap wird dort nicht geladen, deshalb blieb eine gesetzte Textfarbe bisher schwarz. Die Einstellung heißt rteColor statt rteStyleColors, ein Upgrade-Wizard zieht einen gespeicherten Altwert um – CKEditor
Bugfix:
Tabellen im RTE verloren ihre Bootstrap-Klasse. Eine mit Table Striped formatierte Tabelle sah nach Öffnen und Speichern wieder schmucklos aus, und die Styles-Auswahl zeigte den Eintrag nicht mehr als aktiv; dasselbe bei Table Hover und Table. Der Grund steckt in CKEditor selbst: Dessen General-HTML-Support-Integration für Tabellen verbraucht beim Lesen eines <table> zuerst die Klasse table und sammelt erst danach die übrigen ein – eine verbrauchte Klasse wird nicht mehr aufgenommen. CKEditor darf das, weil sein eigenes Tabellen-Markup <figure class="table"> als Hülle benutzt; für Bootstrap ist genau diese Klasse aber die tragende. Aus class="table table-striped" wurde so class="table-striped", und ohne .table greift keine der Bootstrap-Regeln. Ein eigener Konverter legt die Basisklasse jetzt zurück. Er erkennt auch eine table-*-Variante ohne Basisklasse – schon beschädigte Inhalte sind damit beim nächsten Speichern wieder in Ordnung, der Style muss nicht neu zugewiesen werden
„Linie darüber/darunter“ wirkte in Wrappern nicht. Die Rahmen-Option eines Elements (Erscheinungsbild → Rahmen) blieb an einem Wrapper ohne Wirkung: Beim Hintergrund-Wrapper war die Linie nicht zu sehen, beim Parallax-Wrapper und beim Swiper-Container fehlte sie ganz. Bei einem Container druckt das Layout die Klassen nicht an das div mit der ID, sondern reicht sie an das Template weiter, wo sie an einem inneren Element landen – das Pseudoelement der Linie wurde damit innerhalb des Wrappers gezeichnet, beim Hintergrundbild also hinter dem Bild. Klassen, die das Element als Ganzes beschreiben, hängen jetzt am Element mit der ID. Nach dem Update nachsehen: wer die Option an einem Wrapper eingestellt hatte, sieht die Linie ab jetzt zum ersten Mal
Meta-Zeile blieb leer, sobald nur Text hinterlegt war. Ist meta_value leer und meta_text gefüllt, erschien die Meta-Zeile nicht. Die Bedingung <f:if condition="{metaNavigation} || {config.meta.text}"> in Main.fluid.html konnte nie wahr werden, weil beide Werte fehlten: metaNavigation erzeugt der Menü-Prozessor nur aus meta_value, und config.meta wurde im ConfigProcessor überhaupt nicht gebaut. Der Schaden reichte weiter als die Meldung: Partials/Page/Meta liest jeden seiner Werte aus config.meta, also kam auch mit gefülltem meta_value nichts an – {config.meta.container} war leer, blieb damit ungleich none und druckte <div class=" d-flex justify-content-"> um die Zeile. ConfigProcessor::processMeta() baut den Block jetzt: meta_enable trägt die Ausrichtung, so wie navbar_enable das Farbschema trägt, ein nicht gespeicherter Container wird zu none, und die eigene Klasse bekommt ihr führendes Leerzeichen. Der seitenweise Opt-out wirkt unverändert. Dank an den Melder
Fünf Beschriftungen blieben leer.f:translate gibt für einen Schlüssel, den es nicht gibt, den Leerstring aus – man sieht also nichts und bekommt auch keinen Hinweis. Betroffen waren der „Weiterlesen“-Link im Carousel (read-more), Platzhalter und Schaltfläche des Suchfelds (form.search, form.submit) sowie zwei Zeilen in der Container-Vorschau. Die letzten beiden waren keine fehlenden Texte, sondern falsche Referenzen: flexform.cw.equalWidth statt flexform.equalWidth, und die Toast-Vorschau suchte die Platzierung in locallang_be.xlf statt in locallang_db.xlf. Dazu zwei Einträge, die nur auf Englisch vorlagen – beide Sprachdateien tragen jetzt dieselben 841 Schlüssel
Leeres Markup im Kopfblock. Ein Inhaltselement mit Überschrift, aber ohne Unterzeile bekam trotzdem ein <p class="subheader"> – leer. Umgekehrt stand über einem Element, das nur eine Unterzeile, ein Datum oder eine Überzeile trägt, ein leeres <h2>. Am auffälligsten im Hintergrund-Wrapper, wo der Kopfblock über oder auf dem Bild sitzt. Gemessen gibt Partials/Content/Field bei leerem Feld nicht den Leerstring zurück, sondern ein Byte: \n: Fluid entfernt beim Einlesen eines Partials die umschließenden <html>-Tags, behält aber, was dahinter steht – und das ist der Zeilenumbruch am Dateiende. In Fluid ist eine Zeichenkette aus Leerraum TRUE, also griff <f:if condition="{subheader}"> auch ohne Unterzeile. Dieselbe Falle hatte 5.3.52 schon beim Supraheader behoben. Jetzt endet Content/Field ohne abschließenden Zeilenumbruch, und die beiden Partials prüfen auf den getrimmten Wert – damit ein Editor, der den Umbruch wieder einfügt, nichts kaputt macht. Ausgegeben wird weiter der ungetrimmte Wert, denn f:format.trim escaped: ein <br> in der Überschrift käme sonst als Text heraus. Header/Header hatte zusätzlich gar keine Prüfung und druckte das <hN> immer; ein Icon ohne Text zählt dabei als Überschrift und wird weiter ausgegeben
Kein Copyright-Hinweis in Carousel und Swiper. Ein Bild im Carousel zeigte seinen Copyright-Hinweis nicht; dasselbe Bild als normales Inhaltselement schon. Im Swiper fehlte er ebenso. Der Block steht jetzt in einem eigenen Partial und wird von beiden Carousel-Dateien sowie von allen drei Swiper-Varianten eingebunden. Das Galerie-Partial prüfte außerdem allein tx_t3sbootstrap_copyright – ein Bild, bei dem nur das FAL-Feld copyright gefüllt ist, blieb dort ohne Hinweis. Beide Felder werden jetzt überall gleich behandelt, das FAL-Feld gewinnt. Die Toast-Variante (imgCopyright = 2) bleibt den Slidern erspart: Ein geöffneter Toast würde beim nächsten Slide-Wechsel mitsamt seinem Slide weggeschoben
Zwei veraltete Integrity-Hashes blockierten Bootstrap im CDN-Betrieb. Die SRI-Hashes für Bootstrap-CSS und -JS passten nicht mehr zu den ausgelieferten Dateien – der Browser verweigerte beide vollständig. Vier weitere Konstanten standen an zwei Orten mit verschiedenen Werten. Dazu zwei CDN-Versionen nachgezogen (Baguette Box, GLightbox); die Beschreibungen von Jarallax und Swiper behaupteten, ihr gepinnter Major sei der neueste
Backend-Layouts blieben im Workspace leer. Wer eine Seite in einem Workspace bearbeitete, fand die Felder Backend Layout und Backend Layout (Unterseiten) ohne einen einzigen Eintrag – im Live-Workspace dagegen vollständig. BackendLayoutView::determinePageId() nimmt bei pages schlicht $data['uid'], und das ist im Workspace die uid der Version, nicht die der Live-Seite. Der Condition-Provider suchte seine Konfiguration also unter einer uid, zu der es keine T3SB-Konfiguration gibt. Die Live-uid wird jetzt über t3ver_oid aufgelöst, bevor nach der Konfiguration gesucht wird. Dieselbe Stolperstelle traf den Info-Block des Seitenmoduls: PageInfo lief die Rootline über RootlineUtility ab, und die scheitert an einer Seite, die es nur im Workspace gibt – dort steht jetzt BackendUtility::BEgetRootLine()
Toter Rückgriff auf tree in der Rootline-Ermittlung. Derselbe Provider las die übergeordneten Seiten aus $arguments['tree']->rootLineIds. Diese Variable übergibt die PageTsConfigFactory seit TYPO3 v13 nicht mehr – an ihre Stelle ist fullRootLine getreten. Der Zweig lief ins Leere, und eine geerbte Konfiguration von einer höheren Seite wurde nicht mehr gefunden
Ein fehlendes Backend-Layout-Partial riss die ganze Seite ab. Zu einem Backend-Layout ohne passendes Partial gab es keinen weißen Bereich, sondern einen weißen Bildschirm. Jetzt fällt die Seite auf OneCol zurück. Wer noch _Extra-Schlüssel in pages.backend_layout hat, sollte den BackendlayoutUpgradeWizard laufen lassen
Die Dropdown-Animation lief nie. Slide-In und Fade am Dropdown der Navbar waren einstellbar, aber nicht zu sehen – das Markup bekam statt dd-animate-1 immer removed-animate-1. Wer eine Animation eingestellt hatte, sieht sie ab jetzt zum ersten Mal
„Gallery columns“ stand bei jedem Inhaltselement. Das Feld hatte als einziges der Palette T3SB Image Settings keine Bedingung und stand deshalb auch bei Elementen ohne Bilder unter Extended – an einer Stelle, an der nichts sonst wirkungslos ist. Beschriftung und Beschreibung kommen jetzt aus der Sprachdatei und heißen Breite des Bildblocks (Spalten): „Gallery columns“ legte eine Verwandtschaft zu Number of Columns nahe, die es nicht gibt
content_margin_top in Spalten-Containern. Der automatische Abstand galt auch für Inhaltselemente in zwei-, drei-, vier- und sechsspaltigen Containern. Dort regelt die Rinne des Rasters den Abstand; ein Margin darüber schiebt die Spalten gegeneinander aus der Flucht, weil jede Spalte mit einem anderen Element beginnt. Eigene Korrektur-Klassen dafür können weg
Der Container des Seitentitels wirkte nicht im Jumbotron. Steht der Seitentitel im Jumbotron und hat dieses keinen Container, wurde pageTitleSkipContainer trotzdem gesetzt. Der Titel übersprang damit den Container, den die T3SB-Konfiguration für ihn vorsieht, und lief über die volle Breite. Nach dem Update nachsehen: auf Seiten mit Jumbotron ohne Container rückt der Seitentitel jetzt in den konfigurierten Container ein
Abstand unter dem letzten Absatz einer Alert-Box. Die Regel div.alert > *:last-child traf den Wrapper .bodytext, den TYPO3 um den RTE-Inhalt legt – der Absatz darin behielt seine margin-bottom. Unter dem Text standen dadurch 32 px statt 16, oben nur 16: die Box wirkte nach unten verrutscht. Der Selektor reicht jetzt durch den Wrapper hindurch und gilt für jedes letzte Element, auch Listen und Tabellen
Backend-Stylesheet verbog das Karten-Raster aller Module. Gemeldet als Issue #527, betrifft 5.3.30 bis 5.3.53. Bei preview = 1 lädt die Extension bestyles.css als Backend-Stylesheet. Darin stand eine Regel ohne jede Eingrenzung: .card-size-small bekam per !important eine feste Breite. Sie traf jedes Backend-Modul, das die Karten des Cores benutzt – unter Hilfe → Über standen statt vier nur noch zwei Karten je Reihe, und das !important schlug auch .w-100 fremder Extensions. Der Ansatz war dazu von Grund auf falsch: Diese Karten sind Grid-Items, und der Core bemisst sie über grid-template-columns am .card-container, nicht über width – eine feste Breite ändert die Spaltenaufteilung nicht, sie lässt die Karte aus ihrer Zelle laufen. Breiter macht der Core eine Karte mit grid-column, so ist .card-size-medium gebaut. Die Klasse kommt in der gesamten Extension sonst nirgends vor, die Regel konnte also ausschließlich fremde Oberflächen treffen – ersatzlos entfernt. Im selben Zug gelten die beiden Regeln für .settings-category-* nur noch im Site-Settings-Editor und kommen ohne !important aus. Dank an den Melder
Offcanvas-Menü: Klasse undefined, Suchfeld, Ausrichtung. Im Markup des Offcanvas stand eine Klasse namens undefined. Im ausgelieferten HTML steht sie nicht – sie kommt aus t3sbOffcanvas(): Die Funktion setzt zwei Farbklassen, der ConfigProcessor liefert mit 'bg-' . $navbarColor aber nur eine, und classList.add(undefined) schreibt die Zeichenkette ins DOM. Sie arbeitet jetzt über die gefilterte Liste. Dieselbe Datei, zweiter Fund: t3sbNavbarSearchbox() griff unterhalb des Breakpoints ohne Prüfung auf das Formular der Navbar zu, während der Zweig darüber brav if (form) fragt – ohne Suchformular brach die Funktion ab. Panel und Leiste sind dasselbe Markup: unterhalb des Breakpoints ein Panel, darüber die waagerechte Navbar, und in CSS war das bisher nicht zu unterscheiden. t3sbOffcanvas() markiert den Zustand jetzt mit t3sb-offcanvas-panel. Daran hängen zwei Regeln, die nur im Panel gelten: eine Trennlinie mit Luft über dem Suchformular, und die Ausrichtungsoptionen der waagerechten Navbar werden neutralisiert – nav-fill und nav-justified zentrieren dort sonst jede Beschriftung, ms-auto schiebt den Block an den Rand. Das Suchfeld trug in der Variante ohne Schaltfläche ein me-2, den Abstand zu einer Schaltfläche, die es dort nicht gibt; Platzhalter und aria-label kommen jetzt aus der Sprachdatei
Debug-Template entfernt.Resources/Private/Templates/Container/Default.fluid.html enthielt nichts als ein <f:debug> über alle Variablen und wurde von keinem Template referenziert
Hinweis:
5.3.55 trägt den Inhalt von 5.3.54. Der Tag v5.3.54 wurde nach der Veröffentlichung auf den fertigen Stand umgehängt. Packagist hatte den vorherigen Commit zu diesem Zeitpunkt bereits registriert und weist Änderungen an veröffentlichten stabilen Versionen ab – composer require t3sbs/t3sbootstrap:5.3.54 installierte deshalb den Code von 5.3.53, gemeldet als Issue #529. Am Code ändert sich gegenüber 5.3.54 nichts, nur die Versionsnummer ist eine andere. Wer 5.3.54 per Composer geladen hat, aktualisiert auf 5.3.55
ACHTUNG, neue DB-Felder: neun Spalten. Sieben in pages – die sechs Opt-out-Häkchen und tx_t3sbootstrap_indent – sowie zwei in tt_content: tx_t3sbootstrap_no_indent und tx_t3sbootstrap_header_vertical. Nach dem Update also die Datenbankanalyse ausführen (Install-Tool → Analyze Database Structure bzw. vendor/bin/typo3 extension:setup), danach Cache leeren und den Konfigurations-Datensatz einmal speichern – nur beim Speichern wird t3sbconstants.typoscript neu geschrieben
Release notes v5.3.55 - als PDF-Datei
Bugfix:
jQuery ließ sich nicht aktivieren. Im Log stand bei jedem Seitenaufruf TypoScript condition [...] could not be parsed. Die Konstante bootstrap.disable.jquery war dabei nicht unauflösbar, sie löste sich zu einem Leerstring auf: Sie ist als type: bool deklariert, und Site-Einstellungen behalten ihren Datentyp. Eingesetzt wird der Wert als Text – aus true wird 1, aus false wird nichts, und ohne Anführungszeichen blieb dann || == 0 stehen. Der Fehler trat also genau dann auf, wenn jemand jQuery einschaltete. Schwerer als das Log-Rauschen wog die Folge: TYPO3 fängt den Syntaxfehler ab und bewertet die Condition als nicht erfüllt – damit fiel der ganze Block weg, auch der erste Teil, der korrekt zugetroffen hätte. Die Einstellung Disable jQuery war wirkungslos, jQuery wurde nie geladen. Nach dem Update nachsehen: wer jQuery eingeschaltet hatte, bekommt es jetzt tatsächlich – eigene Skripte, die es notgedrungen selbst nachluden, laden sonst doppelt
Vier weitere Conditions derselben Bauart sind mitgezogen: Hintergrundbild, Lightbox-Auswahl und die beiden EXT:news-Blöcke. Im Normalbetrieb waren sie unkritisch – ohne geschriebene Konstantendatei (frische Installation vor dem ersten Speichern des Konfigurations-Datensatzes, Install-Tool im Failsafe-Modus) warfen sie denselben Fehler
content_margin_top im Footer und im Jumbotron. Seit 5.3.52 wirkt der zentral gesetzte Abstand auch in den Spalten der Spalten-Container, innerhalb eines Wrappers bewusst nicht. Zwei Stellen fehlten in dieser Abgrenzung noch: Jumbotron, Footer-Spalte und erweiterter Inhalt fielen schon vorher heraus – sie liegen in eigenen Spalten. Der Footer als eigene Seite nicht, dessen Inhaltselemente stehen in der Hauptspalte wie auf jeder anderen Seite. Verglichen wird jetzt die Seite des Elements mit der Footer-Seite aus der T3SB-Konfiguration. Nach dem Update nachsehen: im Footer fällt der Abstand oben weg – war er eingeplant, gehört er jetzt an das Element selbst
Veraltete TCA-Einstellung im Masonry-FlexForm. Die Kategorieauswahl des Masonry-Filters trug noch enableMultiSelectFilterTextfield. TYPO3 wirft diese Einstellung seit v13 beim Aufbau der TCA selbst wieder weg und schreibt dabei jedes Mal eine Deprecation-Meldung ins Log. Das Suchfeld über der Mehrfachauswahl ist seitdem ohnehin immer da – die Zeile war also schon wirkungslos, als sie geschrieben wurde. Entfernt; am Formular ändert sich nichts
Keine neuen Felder, keine Datenbankänderung.
Nach dem Update genügt Cache leeren – die Bewertung der Conditions und die FlexForm-Struktur liegen im Cache
Release notes v5.3.53 - als PDF-Datei
NEW:
Hintergrundvideo im Jumbotron – liegt in den Medien einer Seite ein Video, läuft es als Hintergrund des Jumbotrons: stumm, formatfüllend beschnitten, mit dem Text darüber. In beiden Varianten, mit Seitenverhältnis (ratio 37x9 und die anderen) und in der Vollbild-Section. Die Quelle bestimmt dasselbe Feld wie beim Bild: Background image muss auf page oder root stehen – der Video-Schalter allein bewirkt nichts. Bei root hat das Video Vorrang vor dem Bild derselben Ebene der Rootline; sonst erbte eine Seite mit Video das Bild ihres Vorfahren. YouTube und Vimeo fallen von selbst heraus: Online-Medien tragen in FAL keinen video/-Typ. Wo die Optionen sitzen, zeigt der Abschnitt Jumbotron im BE-Modul
Vier neue Einstellungen unter Jumbotron → Background: Video as background (Vorgabe aus – ein Video wird übersprungen, es gilt das erste Bild), Autoplay (an; aus bedeutet Standbild, Bedienelemente, Start auf Klick), Loop (an) und Dimming in percent (40) – ein dunkler Schleier zwischen Video und Text
Überzeile (Supraheader) mit eigener Klassenauswahl – das neue Feld tx_t3sbootstrap_supraheader_class steht als Eingabefeld mit Auswahlliste neben dem Textfeld. Die Liste wird von tx_t3sbootstrap_header_class abgeleitet: wer die Klassen dort erweitert, hat sie auch hier. Ausgenommen sind die Linien-Varianten h-line-*, die auf die Größe einer Überschrift abgestimmt sind
Für Integratoren: Steht Background image auf on this and all child pages (slide), sucht t3sbootstrap von der aktuellen Seite aus nach oben und nimmt die Bilder der ersten Seite, die welche im Feld Media hat. Bei manchen Seitentypen ist dieses Feld aber gar kein Hintergrund, sondern ein Teaserbild für eine Übersicht – und genau das landete dann im Jumbotron, statt der Bilder vom Rootbereich. Solche Seitentypen lassen sich jetzt überspringen: Doktypes als Kommaliste in der TypoScript-Konstante bootstrap.image.jumbotronBgimageIgnoreDoktypes. Ab Werk leer, es ändert sich also nichts von allein.
Speaking ID nachträglich erzeugen – der Anker eines Elements entsteht aus der Überschrift, aber nur, wenn das Feld beim Speichern leer ist. Wer kopiert und danach die Überschrift ändert, behält den Anker des Originals. Der Upgrade Wizard Generate the missing „Speaking ID“ of content elements füllt alle leeren Anker – dasselbe wie jedes Element öffnen und speichern, nur ohne die Formulare. Wer auch die nicht mehr passenden neu bauen will, nimmt vendor/bin/typo3 t3sbootstrap:anchor --mode=rebuild; ohne --execute zeigt der Befehl nur eine Tabelle alt/neu. Achtung: dabei werden auch von Hand gesetzte Anker überschrieben, und Links auf den alten Anker laufen ins Leere. Der Wizard läuft nur, wenn die Option Speaking ID eingeschaltet ist
Content Blocks: die Felder von t3sbootstrap mitnutzen – Padding, Margin, „extra class“, Farben und Rahmen hängen an tt_content und stehen im Formular eines Content Blocks ohnehin schon, ausgewertet wurden sie dort aber nie. Das neue Set T3S Bootstrap – CONTENT BLOCKS (optional) hängt den BootstrapProcessor zusätzlich an lib.contentBlock. Im frontend.html gibt es dann {classAttr}, {styleAttr}, {class} und die übrigen aufbereiteten Werte wie in den Templates von t3sbootstrap
Kategorie-Filter im Masonry-Wrapper – trägt der Wrapper die neue Option Filter nach Kategorie (shuffle.js), steht über dem Raster eine Schaltflächenreihe. Die Kategorien wählst du selbst aus; ihre Reihenfolge ist die Reihenfolge der Schaltflächen, und eine Kategorie ohne ein einziges Element im Wrapper entfällt. Gefiltert wird im Browser: shuffle.js ordnet die Kacheln neu an und schließt die Lücken, es ersetzt dabei masonry.js – beide würden um dieselben Positionen streiten. Die Bibliothek liegt in der Extension (Resources/Public/JavaScript/shuffle.mjs) und wird erst beim Aufruf einer Seite mit Filter nachgeladen; schlägt das fehl, bleiben die Schaltflächen bedienbar und blenden nur ein und aus. Die Filterwerte stehen im Markup: data-t3sb-categories an der Zelle, data-t3sb-filter-value an der Schaltfläche – eigenes CSS und eigene Skripte können sich daran halten. Die Kategorie vergibst du am Inhaltselement selbst, Reiter „Kategorien“ – fehlt sie überall, sagt der Wrapper das im Frontend, statt den Filter stillschweigend wegzulassen - hier ein Beispiel
Header im Background-Wrapper – die neue Checkbox Header inside legt Überschrift und Überzeile in die section.background-image hinein statt darüber. Damit liegt der Kopf auf dem Bild. Ohne Haken bleibt alles wie bisher
Anker aufräumen – vendor/bin/typo3 t3sbootstrap:anchor --mode clear leert alle „Speaking IDs“; ohne --execute zeigt der Befehl nur die Tabelle. Gedacht für den Fall, dass die Option Speaking ID abgeschaltet wird – das Abschalten blendet nur das Feld aus, gespeicherte Anker bleiben und werden weiter ausgegeben
Bugfix:
Überzeile (Supraheader) verschwand ohne Überschrift. Blieb das Überschriftenfeld leer, entfiel der ganze Kopf. Der Supraheader steht aber oft allein über einem Element („Schritt 2 von 4“) und zählt jetzt mit – in beiden Header-Partials und in den sieben Container-Templates, die ihre eigene Bedingung mitbringen. Dazu der leere Absatz: Content/Field.fluid.html gab Leerraum aus, wenn ein Feld leer war – in Fluid ist eine Zeichenkette aus Leerzeichen wahr, und es entstand ein leeres <p class="supraheader">
page_titlecontainer wurde nie ausgewertet. Das Feld stand im Formular, im Frontend passierte nichts. Jetzt greift es. Die Stellen, die den Titel bereits in einem Container rendern – Jumbotron, Breadcrumb, ExpandedContent –, setzen pageTitleSkipContainer und vermeiden den zweiten Container. Achtung: ein nie geprüfter Wert ändert die Darstellung sichtbar
page_titlealign kannte right und left, Bootstrap 5 schreibt text-end und text-start – das wird jetzt abgebildet. Eigene Regeln für text-right oder text-left können weg
Bei jumbotron_alignitem wirkt align-items-* auf die Querachse: right bedeutet unten, left oben. Die Beschriftungen sagen das jetzt
Erweiterter Inhalt mit „content slide“ blieb leer. Ob überhaupt etwas auszugeben ist, wurde nur an der aktuellen Seite geprüft – bei aktivem Slide liegt der Inhalt aber womöglich weiter oben in der Rootline. Jetzt zählt die ganze Rootline
Jumbotron-Hintergrund: nur noch echte Bilder. Im Feld „Medien“ darf alles liegen – ein MP4, ein PDF, ein SVG-Logo. Bisher kam stur die erste Datei in Frage: ließ sich daraus kein CSS-Hintergrundbild bauen, brach die Suche dort ab und die Seite blieb ohne Hintergrund, auch wenn dahinter ein Bild lag. Beide Zweige filtern jetzt vor. Dazu: der Slider entsteht nicht mehr, wenn es keine Bilder gibt – vorher stand im Markup ein <div class="jumbotron background-image"> ohne zugehörige CSS-Regel – und der CSS-Selektor passt jetzt auf die aktuelle Seite, auch wenn das Bild von einem Vorfahren stammt; vorher trug er dessen uid und die Regel lief ins Leere
<br> in der Überschrift kam als Text heraus. In einem gewöhnlichen Element funktionierte es, im Accordion oder in den Spalten stand <br> lesbar auf der Seite. t3sbootstrap rendert Überschriften über zwei getrennte Partial-Sätze, und nur einer ließ einfaches Markup durch. Beide verhalten sich jetzt gleich
sticky-top in einer Spalte war wirkungslos, sobald eine vertikale Rinne gesetzt war. Bootstrap baut gy-* aus negativen Margins, was am Seitenende überhängt – die Bootstrap-Doku antwortet darauf mit einem Wrapper mit overflow-hidden. Der macht aus dem Kasten einen Scroll-Container, und position: sticky hängt sich immer an den nächsten. Der Abstand kommt jetzt aus row-gap: keine negative Margin, nichts hängt über, kein Wrapper
gy-4 war nicht auswählbar. Der Eintrag „gy-4 (default)“ trug denselben leeren Wert wie sein waagerechtes Gegenstück. Bei gx ist das richtig, --bs-gutter-x steht ab Werk auf 1.5rem – --bs-gutter-y steht aber auf 0. Gewählt wurde also gy-0. In allen 14 Container-FlexForms korrigiert; der leere Eintrag heißt jetzt default (no vertical gutter), bestehende Elemente ändern sich nicht
JS-Fehler bei der fixierten Button-Gruppe (Cannot read properties of null), sobald ein Button einen Anker trug. t3sbFixedButtons() lief über alle direkten Kinder und erwartete überall ein Symbol – auch auf dem Anker-Span. Geprüft wird jetzt, ob das Kind überhaupt einen Button enthält; und das Iconpack-Symbol darf fehlen, es ist optional
Der erste Button einer Button-Gruppe verlor seine linke Rundung, wenn er einen Anker trug. Bootstrap nimmt jedem .btn, vor dem irgendein Element steht, die linke Rundung – und der Anker-Span ist so ein Element. Repariert für genau diesen Fall, waagerecht wie senkrecht
Sprungmarken landeten zu hoch. Der Abstand wurde aus der Höhe der fixierten Navbar gerechnet – ein zusätzlich am oberen Rand klebender Breadcrumb blieb unberücksichtigt. Gemessen wird jetzt die tiefste Unterkante aller oben fixierten Elemente (position: fixed oder sticky), nicht die Summe ihrer Höhen, und das Ergebnis landet als scroll-padding-top am <html>: damit gilt es für den nativen Sprung, für :target und für das Sektionsmenü gleichermaßen. Einen eigenen Zuschlag gibt es in der T3SB-Konfiguration unter Sectionmenu → anchor offset
content_margin_top wirkte in Containern nicht. Der zentral gesetzte Abstand (z.B. mt-5) galt nur für Elemente der Hauptspalte. Jetzt greift er auch in den Spalten der Spalten-Container – 2, 3, 4, 6 Spalten und Row Columns –, und trägt ein Element bereits eine eigene m*--Klasse, bleibt diese unangetastet. Innerhalb eines Wrappers greift er bewusst nicht: Hintergrund-Wrapper, Accordion, Modal, Card-Wrapper und die übrigen bringen ihren eigenen Innenabstand mit, das erste Element darin schöbe sonst eine Lücke zwischen Wrapperkante und Inhalt. Der Wrapper selbst bekommt den Abstand weiter – und trägt er eine Überschrift, geht er auf die Überschrift statt auf den Wrapper
Container-Vorschau fehlte innerhalb eines Wrappers. Ein 2-Spalter zeigte im Seitenmodul „Gutters / Gleiche Höhe“ – lag er in einem Background-Wrapper, fehlte die Zeile. EXT:container zeichnet verschachtelte Raster mit einem eigenen View, der seine Partial-Pfade aus der Container-Registrierung nimmt; die Vorschau-Templates von t3sbootstrap waren dort nicht angemeldet, sondern nur per TSconfig. Jetzt hängen alle 21 Container ihren Pfad per addGridPartialPath() an
Speaking ID: der Schalter wirkte nur halb. Die Option blendet das Feld im Formular ein und aus – der Upgrade Wizard Generate the missing „Speaking ID“ füllte die Anker aber unabhängig davon, und die Spalte blieb als Slug-Feld registriert, so dass Kopien den Anker des Originals mitnahmen. Beides fragt jetzt die Option ab. Gespeicherte Anker bleiben erhalten und werden weiter ausgegeben – das ist Absicht, sonst brächen bestehende Onepage-Menüs. Zum Leeren gibt es --mode clear. Und der Ersatzwert default-<md5>, den TYPO3 für Elemente ohne Überschrift erzeugt, steht nicht mehr im Quelltext
ACHTUNG, neue DB-Felder: fünf Spalten – tx_t3sbootstrap_supraheader_class in tt_content sowie jumbotron_bgvideo, jumbotron_bgvideo_autoplay, jumbotron_bgvideo_loop und jumbotron_bgvideo_overlay in tx_t3sbootstrap_domain_model_config. Nach dem Update also die Datenbankanalyse ausführen (Install-Tool → Analyze Database Structure bzw. vendor/bin/typo3 extension:setup) und anschließend den Konfigurations-Datensatz einmal speichern – sonst fehlen die vier neuen Konstanten und der Video-Schalter bleibt wirkungslos
Release notes v5.3.52 - als PDF-Datei
NEW:
RTE: drei neue Werkzeuge in der Toolbar – Columns (Bootstrap-Row mit 2, 3 oder 4 Spalten, umwandelbar und wieder entfernbar), Margin (mt-1…mt-5 / mb-1…mb-5, oben und unten unabhängig) und Code-Block mit Sprachauswahl – CKEditor
RTE: Feature-Schalter – in der Extension Configuration entscheidet der neue Reiter RTE, was Redakteuren angeboten wird; per Seiten-TSconfig RTE.t3sbootstrap.features pro Seitenbaum übersteuerbar. Ein abgeschalteter Schalter blendet nur den Button aus, vorhandene Inhalte bleiben unangetastet – Extension Configuration
RTE: Badges als eigenes Toolbar-Dropdown – die 16 Einträge „Badge *“ und „Pill Badge *“ sind aus der Styles-Auswahl ausgezogen und stecken jetzt in einem einzigen Toolbar-Eintrag Badge – acht Farben, jede als Badge und als Pill. Das Styles-Dropdown schrumpft damit von 57 auf 41 Einträge. Das Markup ist unverändert, vorhandene Badges brauchen also keine Migration. Die Einstellung heißt jetzt rteBadge statt rteStyleBadges; ein Upgrade Wizard räumt den alten Schlüssel auf – CKEditor
Neues RTE-Preset t3sbootstrap_extended – derselbe Editor mit breiterer Klassen-Whitelist für <p>, <span>, <a>, Listen und Tabellen
Raus aus einem Container: Ein Alert oder eine Column am Ende des Feldes war eine Sackgasse – dahinter kein Absatz und ohne Quelltext auch keiner zu erzeugen. Enter auf einer leeren letzten Zeile steigt jetzt aus dem Container aus, Backspace auf einer leeren ersten Zeile nach oben – dieselbe Geste wie beim Blockzitat von CKEditor
Links mit class="icon-link" und icon-link icon-link-hover sind im Link-Wizard wählbar
Brand-Logo komplett im Konfigurations-Datensatz: Der Tab Brand (Logo) hat drei neue Felder – Bildbreite, Bildhöhe und Alternativtext. Diese drei Werte kamen bisher ausschließlich aus den Site-Settings, während der Pfad schon im Datensatz stehen konnte; ein abweichendes Logo bekam dadurch die Maße des Site-Logos verpasst. Jetzt gilt für alle vier dieselbe Rangfolge: der Datensatz gewinnt, das Site-Setting bootstrap.navbar.image.* ist der Rückfall für leere Felder. Bestehende Installationen sehen nach dem Update unverändert aus – BE Modul
Bugfix:
Speaking ID: Der Anker-<span> wurde geschrieben, sobald ein Element einen Wert in tx_t3sbootstrap_anchor hatte – unabhängig davon, ob die Option in der Extension Configuration aktiv war. Das TypoScript wertet den Schalter jetzt aus. Außerdem lag der Span innerhalb einer .row als Geschwister neben den Spalten, sodass row-cols-* und das CSS-Grid ihn als Spalte mitgezählt haben; er ist jetzt aus dem Flow genommen.
FlexFormTools::convertFlexFormContentToArray(): Argument #1 ($flexFormContent) must be of type string, null given – und derselbe Fehler im Card-Wrapper im Frontend
Offcanvas-Menü: das geschlossene Dropdown hat seine Höhe reserviert und die Abstände zwischen den Items aufgeblasen
Akkordeon scrollt beim Öffnen wieder sanft an den oberen Bildschirmrand
Leerer Button in der Card – das Label more fehlte in der Sprachdatei
Inline-Button Code im RTE: das zugehörige CKEditor-Plugin wurde nie geladen
Lightbox ignorierte jeden Bildzuschnitt. In der Popup-Konfiguration stand crop = – eine gesetzte, aber leere Eigenschaft. TYPO3 prüft mit isset(), ob TypoScript den Zuschnitt vorgibt, nicht ob dort etwas drinsteht; das leere crop = hat also gereicht, um den Zuschnitt der Dateireferenz zu überspringen. Damit war zugleich die Option „Originalbild für Lightbox verwenden“ (tx_t3sbootstrap_zoom_orig) wirkungslos – sie tat genau das, was ohnehin für alle galt. Achtung, geändertes Verhalten: zugeschnittene Bilder öffnen sich jetzt mit ihrem Ausschnitt; das volle Bild gibt es über die Option – Lightbox
Navbar mit Plus-Icon: Bei aktivem navbar_plusicon rutschte der Plus-Button auf eine eigene Zeile unter den Menüpunkt, blieb ungestylt und trug zusätzlich den Bootstrap-Caret. Die Medienabfrage im Partial suchte den Breakpoint unter seinem Pixelwert statt unter seinem Schlüssel (settings.navbar.992 statt settings.navbar.lg) und lieferte @media (min-width: px) – eine ungültige At-Regel, die der Browser samt ihrem gesamten Inhalt verwirft. Damit fiel die komplette Desktop-Darstellung des Plus-Icons weg
Achtung, neue DB-Felder:navbar_image_width, navbar_image_height und navbar_image_alt in tx_t3sbootstrap_domain_model_config. Nach dem Update also die Datenbankanalyse ausführen (Install-Tool → Analyze Database Structure bzw. vendor/bin/typo3 extension:setup), sonst lässt sich der Konfigurations-Datensatz nicht speichern. Anschließend optional der Upgrade Wizard„Move the navbar brand image settings into the configuration record“, der alle vier Site-Werte – Pfad eingeschlossen – je Siteroot in die Datensätze holt. Die Einstellungen heißen im Settings-Editor jetzt DEPRECATED — ….
Release notes v5.3.51 - als PDF-Datei
Bugfix:
… dazu zahlreiche kleinere Korrekturen im Frontend-Rendering, in den Migrations-Commands und in der TCA.
NEW:
EXT:t3sb_package wird nicht mehr benötigt. Alle generierten Dateien liegen jetzt unter typo3temp/assets/t3sbootstrap/. Fehlendes TypoScript und SCSS wird beim nächsten Frontend-Aufruf aus der Datenbank neu geschrieben – alle Details zum Update
Upgrade-Wizard Move generated assets out of EXT:t3sb_package übernimmt vorhandene Dateien einmalig – Installation
Export & Import der Konfiguration direkt im Backend-Modul – T3SB Config
RTE: Alert-Box als Auswahlliste mit allen acht Bootstrap-Varianten – CKEditor
Neue Einstellung flexformDir für eigene FlexForm-Erweiterungen – Extension Configuration / Extend Flexforms
b13/container jetzt ab ^4.1
Bootstrap Builder 1.0.2 – passend zu t3sbootstrap ab 5.3.50
Release notes v5.3.50 - als PDF-Datei
Bugfix:
Header classes h-line-1 and h-line-2
Error with content_animations 2.7.1
No BS5 news templates available
NEW:
Speaking ID: Human-readable ID for deep links / onepage navigation - Beispiel
Card mit Icon - Beispiel
Bugfix:
T3SBS\T3sbootstrap\UserFunction\ExtensionManagementUtility" not found
NEW:
Bootstrip Builder - ein visueller Bootstrap-5.3-Theme-Builder (Extension)
Bugfix:
BS-Carousel may overlap the following content
New:
Upgarde Wizard: BackendlayoutUpgradeWizard: Migrate backend layout keys
Bugfix:
- Missing bracket and errors in import - behebt ein Backend-Layout Bug
- Dropdown-Menü rechts (“dropdown-menu-end”)
- RTE Block-Style & Text-Style Problem für “lead” u.a.
Bugfix:
- PageInfo Listener tries to call getConfiguration() from NullSite
- containerPre and -Post markup is not rendering if content is included from other pages (with different colPos)
- Navbar breakpoint xxl
- Navbar breakpoint width is not an integer
- Dropdown animation Slide-In
NEW:
- Icon anstatt Bild
- Neue Option Titel-Farbe (Title color) in der EM config
- Deutsche Übersetzung für das Backend
INFO:
Das Site Set “T3S Bootstrap - OTHER SETTINGS” ist in dieser Version obligatorisch!
Bugfix release
Support für TYPO3 v14