Suche
156 Treffer
13.12. - CLI Kommandos
13.12.2025: CLI Kommandos In TYPO3 14.0 gibt es ein paar neue Kommandozeilen-Hilfen ( CLI ), für alle Shell-Liebhabende: Auto-Vervollständigung Eine Symfony-Command "Auto-Vervollständigung" ist nun aktiviert, d.h. man kann einen Shell-Datensatz "aktivieren", so dass dann nach Eingabe von ` bin/typo3 ` mit TAB eine Liste aller verfügbaren Commands angezeigt werden kann, falls man mal wieder vergessen hat ob es nun " flush:cache " oder " cache:flush " heißt. Aktiviert wird das ganze über die eigene Shell-Erweiterung via ` bin/typo3 completion`. Der Befehl liefert dann Code aus, den man in seine eigene .bashrc oder . zshrc einfügen sollte, um dies immer automatisch zur Verfügung zu haben. Damit der Befehl immer up-to-date ist empfiehlt es sich, dass man diese Zeile in seine bash/zshrc einfügt: eval "$(/path/to/typo3/vendor/bin/typo3 completion bash)" Wichtig: Wenn man DDEV/Docker Setups benutzt, muss man dies entsprechend in seinen homeadditions hinterlegen. Auch steht die Argument/Options-Autovervollständigung für Symfony-Commands grundsätzlich zur Verfügung, so dass z.b. bei Eingabe von "pid=" und einem TAB eine Liste von PIDs angezeigt werden könnte. Dies erfordert aber eine Integration in Symfony Commands. Beispielhaft wurde das in die Command von `bin/typo3 redirects:cleanup` und ` bin/typo3 redirects:checkintegrity` eingebaut, so dass dort z.B. verfügbare Sites oder Domains mit “TAB” ausgewählt werden können. Sprach-Helfer Aufgrund der neuen symfony/translate-Integration (siehe Tür 9 ) ist es hilfreich, einen Überblick über seine Sprachdateien und Labels zu erhalten. Dies geht via ` bin/typo3 language:domain:list` und zeigt dann eine Tabelle aller bekannten Sprachdateien und Anzahl der Labels dar. Als Bonus kann mit mit dem “ --deprecated” Argument auch alle Labels anzeigen lassen, die als “veraltet” ausgezeichnet sind. Ein passendes Gegensütck ist ` bin/typo3 language:domain:search` mit dem man gezielt (sogar mit regulären Ausdrücken) nach den Inhalten von Sprachdateien suchen kann (also nicht nur nach den Sprachkeys!). Dafür kann man dann auch gezielt die Sprache festlegen, in der man sucht. In beiden Kommandos kann man auch gezielt nach Extensions filtern. Eine Ausgabe nach JSON rundet das ganze für sehr nette Developer Experience ab. Install-Tool Passwort Das Install-Tool-Password kann jetzt auch unabhängig von der GUI gesetzt werden, was gerade für Continuous Integration / Delivery Pipelines hilfreich ist, oder um automatisiert Instanzen zu provisionieren. Dies geht via bin/typo3 install:password:set - auch automatische Passwörter können erzeugt werden. Cache Mit `bin/typo3/ cache:flushtags` und der `--groups` Option können nun gezielt Cache-Tags gelöscht werden, wie man es schon von der TYPO3 Console Extension von Helmut Hummel kannte. AsNonSchedulableCommand Bisher wurden Symfony Commands entweder in der Service-Definition deklariert, oder mit einem netten `#[AsCommand]` Symfony tag. Sobald man jedoch ein Command erstellen wollte, das NICHT im Task-Planer auswählbar war, konnte man jedes Symfony tag nicht mehr nutzen. Dafür gibt es nun das `#[AsNonSchedulableCommand]` mit dem man ein Command auszeichnen kann, so dass es im Task-Planer nicht ausführbar ist, sondern eben nur auf der Konsole. Fluid Cache Warmup Mit `bin/typo3 fluid:cache:warmup` können nun Fluid-Templates automatisch vorkompiliert werden, was zu einer besser responsivität des TYPO3-Auftritts nach einem Deployment führt. Dies wird auch automatisch im `cache:warmup` mit ausgeführt, jedoch dort mit etwas weniger Optionen/Ausgaben. Debugging-Hilfen Mit dem neuen Command `debug:backend:modules` lässt sich eine Liste aller registrierten Backend-Module, mitsamt Labels und Konfiguration, und in der selben Hierarchie des Backends anzeigen lassen. Und mit `debug:backend:routes` lassen sich alle Routen im TYPO3-Backend mitsamt deren Modul-Abhängigkeiten und Konfiguration anzeigen. Beides hilft sehr, um eine schnelle Übersicht in einer Instanz zu erlangen, ohne in alle Konfigurationsdateien schauen zu müssen. Zurück: Tag 12 Weiter: Tag 14 Zurück: Übersicht
Weiterlesen12.12. - TCADefaults
12.12.2025: TCADefaults mit type-Support Dieses kleine Feature wird keinen Kunden zum Upgrade bewegen, aber dennoch kann es die Redakteurinnen und Redakteure bei ihrer Arbeit unterstützen - sofern es eingesetzt wird. Mit TCAdefaults kann man Felder beim Anlegen von Inhalten & Datensätzen vorbelegen . Ab 14.0 können die Werte abhängig vom Typ (zum Beispiel CType bei Inhaltselementen) gesetzt werden. Vor allem bei Auswahlfeldern wie dem Level der Überschrift ( header_layout ) und der Wiederverwendung von Feldern ist dies nützlich. TCAdefaults { tt_content { # Jede Überschrift ist Wert 2 header_layout = 2 # außer bei meinem Element "tx_my_gallery" die 3 types.tx_my_gallery = 3 } } Ähnliches kennt man bereits von TCEFORM . Hier konnte man schon bisher abhängig vom Typ Felder ausblenden und nun gehts auch mit Default-Werten. Fallbacks Zur Erinnerung die Fallbacks by default-Werten: TCAdefaults pro type TCAdefaults allgemein default definiert im TCA default definiert in ext_tables.sql Zurück: Tag 11 Weiter: Tag 13 Zurück: Übersicht
Weiterlesen15.12. - Login-Sicherheit
15.12.2025: Login-Sicherheit Klein aber fein: Wenn Backend-Redakteure ihre Logins mit MFA (Mehr-Faktor-Authentifizierung) sichern, muss nach einem Login immer noch ein gewisser Token übermittelt werden. Wenn ein Login mit einem Passwort erfolgreich war, aber ein MFA-Token ungültig übertragen wird, dann kann dies darauf hinweisen dass das Passwort geleakt oder gehackt wurde. In so einem Fall informiert TYPO3 nun per E-Mail an die hinterlegte Redakteurs-Adresse, dass ein solcher Login stattgefunden hat. Als weiteres Login-Goddie wurde nun eine “Copy+Paste”-Schutz bei Passworteingabe übermittelt. Diese zeigt ähnlich wie es schon beim “CapsLock”-Hinweis der Fall war eine Warnung an, wenn nach dem Einfügen eines Passworts aus der Zwischenablage evtl Leerzeichen oder Leerzeilen vor oder nach einem Passwort enthalten waren. Denn wer hat nicht schonmal ein Passwort aus einem Passwort-Manager oder einer Mail kopiert und dabei versehentlich einen Zeilenumbruch mitkopiert, und sich dann über einen erfolglosen Login gewundert? Zurück: Tag 14 Weiter: Tag 16 Zurück: Übersicht
Weiterlesen14.12. - QR Codes
14.12.2025: QR Codes Das Modul " Link Management " kann nun genutzt werden, um QR-Codes zu erstellen, die auf definierte Links verweisen. Dazu wurde die Tabelle sys_redirect erweitert, denn technisch werden die QR-Codes als Redirect abgelegt. Nun können Redakteur:innen für Kampagnen usw. direkt im Backend QR-Codes erstellen, herunterladen und pflegen. Der große Vorteil: Der QR-Code enthält nur einen Link auf einen speziellen Endpunkt, von dem aus dann auf die tatsächliche Zielseite weitergeleitet wird. So kann man jederzeit das QR-Code-Linkziel verändern, ohne dass der QR-Code dabei ungültig wird! Listenansicht im Backend, inkl. Link zur Vorschau auf den QR Code und Möglichkeit zum Download Detailansicht des Datensatzes Das Feature ist im nächsten Sprint-Release 14.1. enthalten! Zurück: Tag 13 Weiter: Tag 15 Zurück: Übersicht
Weiterlesen16.12. - Baumfilter
16.12.2025: Suche im Seitenbaum in Übersetzungen Auch dieses Feature wird erst Ende Januar 2026 mit TYPO3 14.1 veröffentlicht werden, aber freuen kann man sich schon jetzt darauf! Die Suche oberhalb des Seitenbaums findet nun auch Begriffe in übersetzten Seiten. Auch die Suche nach IDs von übersetzten Seiten funktioniert nun. Der User kann das Feature deaktivieren bzw. deaktivieren Ein Label zeigt an, warum die Seite gefunden wurde - ob der Suchbegriff in der Standardsprache, einer Übersetzung oder beidem gefunden wurde. Label zur Unterstützung Zurück: Tag 15 Weiter: Tag 17 Zurück: Übersicht
Weiterlesen21.12. - Verschlüsselung
21.12.2025: Verschlüsselung Der TYPO3 “Encryption Key” (` $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] `) wurde bislang nur benutzt, um instanzspezifisch für (Extbase-)Formulare HMAC-Werte , den “ cHash ”-Wert für Caching, für “sys_file” die Checksum-Hashes , für JWT-Tokens (Login/Sessions) die Signing-Keys für CSP-Nonces einen eindeutigen Wert zu erzeugen und zu validieren. Der Key wurde hierbei also nur benutzt, um eindeutige Werte mit geringer Lebenszeit zu erzeugen. Im schlimmsten Fall konnte man einen Encryption Key also ändern, und durch das Leeren der Caches und einem Re-Login/Re-Submit von Formularen wäre dann alles wieder funktional und nutzbar. Sprich, bislang wurde der Encryption Key nur benutzt um Werte zu validieren/hashen, nicht um sie rückwärts wieder zu “entschlüsseln”. Das ändert sich mit einem neuen Feature in TYPO3 v14 deutlich: Einführung einer symmetrischen Verschlüsselung Mit der Einführung einer symmetrischen Verschlüsselung ist es dem TYPO3 Core und auch eigenen Extensions möglich, einen sicheren Key anhand des Encryption Keys zu erzeugen, der dann Werte verschlüsseln und entschlüsseln kann. Wenn der Encryption Key also verloren gehen würde, oder sich ändert, können alle verschlüsselten Werte nicht mehr entschlüsselt werden! Beispielnutzung Aktuell ist diese Verschlüsselung von TYPO3 v14 nur ein “Angebot” an Extensions, dies nutzen zu können. Dies ist relativ einfach: <?php use TYPO3 \ CMS \ Core \ Crypto \ Cipher \ CipherDecryptionFailedException ; use TYPO3 \ CMS \ Core \ Crypto \ Cipher \ CipherService ; use TYPO3 \ CMS \ Core \ Crypto \ Cipher \ KeyFactory ; use TYPO3 \ CMS \ Core \ Crypto \ Cipher \ SharedKey ; final readonly class DerAdventsVerschluesselor { // Dependency Inwichtelung public function __construct ( private CipherService $cipherService , private KeyFactory $keyFactory , ) {} // Liefert den Key für ver/entschlüsselung public function getSecretKey ( ): SharedKey { // In einem beliebigen Namensraum einen "Shared Key" erzeugen, // der TYPO3 Encryption Key wird einbezogen! return $this ->keyFactory-> deriveSharedKeyFromEncryptionKey ( 'weihnachten' ); } public function encrypt ( string $meinGeheimerWunschzettel ): string { $secretKey = $this -> getSecretKey (); // ... und jetzt mit diesem Key den Wert verschlüsseln $cipherValue = $this ->cipherService-> encrypt (meinGeheimerWunschzettel, $secretKey ); // Den verschlüsselten Text (base64url-encoded-json) zurückgeben return ( string ) $cipherValue ; } public function decrypt ( string $meinVerschluesselterWunschzettel ): string { $secretKey = $this -> getSecretKey (); // Aus dem verschlüsselten base64url-encoded-json String den ursprünglichen // Text entschlüsseln: $cipherValue = CipherValue :: fromSerialized ( $meinVerschluesselterWunschzettel ); try { $apiToken = $this ->cipherService-> decrypt ( $cipherValue , $secretKey ); return $apiToken ; } catch (CipherDecryptionFailedException $e ) { // Uppsie! Naughty, not nice! throw new \RuntimeException ( 'Keine Geschenke für Dich: ' . $e -> getMessage (), 1762465682 , $e ); } } } Fazit: Ab TYPO3 v14 den Encryption Key wie ein Passwort behandeln! Ein paar Tipps: Jedes Projekt sollte einen individuellen Key besitzen (keine Mehrfachverwendung unabhängiger Projekte). Der Encryption Key sollte eine gewisse Komplexität besitzen (damit nicht ggf. auf Basis von Hashing gecrackte Encryption Keys daraufhin für die Key-Erzeugung missbraucht werden kann). Kein “foo” als Key! Der Encryption Key sollte bestenfalls nicht in der Versionierung gespeichert werden, sondern nur auf der jeweiligen Instanz. Bei Deployments darauf achten dass falls gehashte Datenbankinhalte und verschlüsselte Werte abgeglichen werden, der Encryption Key ebenfalls gleich sein sollte. Wenn möglich sollte man für Production und Staging eigenständige Encryption Keys haben und die damit erzeugten Werte nicht untereinander teilen. Der Key muss in vollständigen Backups enthalten sein. Gedanke : Encryption Key auf einen Standard-Wert in “settings.php” setzen, und erst in “additional.php” gezielt belegen, ggf. auch abgeleitet von einer ENV-Variable, die wiederum in einer instanz-spezifischen `.env` Datei liegen kann, die dann auch Teil eines System-Backups ist. Zurück: Tag 20 Zurück: Übersicht
Weiterlesen17.12. - TCA-Country
17.12.2025: Neuer TCA Typ "Country" Beispiel der Länderauswahl in Formengine (EXT:styleguide) Dieses neue Feature liegt mir besonders am Herzen , weil ich für einen größeren Teil der Umsetzung verantwortlich bin und damit viel Zeit verbracht habe. Ich hoffe, dass sich die Mühe für den ein oder anderen gelohnt haben könnte ( schreibt mir gern! ). An dieser Stelle auch herzlichen Dank an Georg Ringer , der für eine erste Version dieses Patches bereits viel Mühe investiert hatte, und auf dessen Arbeit ich aufbauen durfte. Bereits mit TYPO3 v12 wurde die “ Country API ” eingefügt. Diese nutzt eine externe Bibliothek, die sämtliche Ländernamen (lokalisiert) und Attribute wie Kurzname, Lang-Name, ISO-Code und Flaggen-Symbol beinhaltet. Auf diese Daten konnte man auf zwei Arten zugreifen: Fluid ViewHelper <f:form.countrySelect> für ein Dropdown mit Länderzuordnung, auch von EXT:form genutzt PHP API um anhand gezielter ISO-Codes Daten auszulesen, oder Datensatzsammlungen ("alle Länder", "alle Flaggen", …) zu erhalten Für TYPO3 v14 war mein Anspruch: Die Country API soll systemweit Unterstützung erfahren . Denn es war bisher nicht möglich, die Country API leicht in TCA/FormEngine oder Extbase zu verwenden. Und es stellt sich heraus, dass so ein ganz neuer “TCA-Typ ‘Country’” eine riesige Menge an Implementations-Details mit sich bringt. Daher wollte ich die Implementation hiervon penibel vollständig durchführen, dass es als künftige Vorlage für andere TCA-Typen dienen könnte. Konkret wurde in meinem Patch folgendes behandelt: TCA FormEngine Rendering über ein eigenes “SelectCountryElement” FormEngine FlexForm Integration Eigenständiger FormEngine JavaScript Picker FormEngine FormData Provider Integration in DataHandler (damit ISO-Codes normalisiert werden) DBAL mapping TCA Schema API integration (eigenständiger FieldType) RecordList Integration (Resolving von Countries) Extbase TypeConverter Extbase DataMapper Integration in EXT:styleguide Integration in den functional Test “blog_example”, eigenständige tests Im Changelog-Link finden sich sehr ausführliche Code-Beispiele, hier nur ein kleines Beispiel, wie man per TCA das Feld definiert. In einem Extbase-Model würde man dann ganz wie von anderen Typen auf ein ausgewähltes Attribut zugreifen können: $GLOBALS [ 'TCA' ][ 'tx_myextension' ][ 'columns' ] [ 'country' => [ 'label' => 'Country' , 'config' => [ 'type' => 'country' , // Mögliche Label: name, localizedName, officialName, localizedOfficialName, iso2, iso3 'labelField' => 'localizedName' , // Länder die als erstes erscheinen: 'prioritizedCountries' => [ 'AT' , 'CH' ], // Weitere Sortierung... 'sortItems' => [ 'label' => 'asc' ], // etwaige Filter auf nur gewisse Länder 'filter' => [ 'onlyCountries' => [ 'DE' , 'AT' , 'CH' , 'FR' , 'IT' , 'HU' , 'US' , 'GR' , 'ES' ], 'excludeCountries' => [ 'DE' , 'ES' ], ], // Vorauswahl wenn leer 'default' => 'HU' , 'required' => false , ], ]], Zurück: Tag 16 Weiter: Tag 18 Zurück: Übersicht
Weiterlesen23.12. - Module und Button API
23.12.2025: Module und Button API Wer schonmal ein eigenes TYPO3-Backendmodul geschrieben hat ist sicherlich über die “ Module API ” gestolpert. Diese ermöglicht es unter anderem im sogenannten “Doc-Header” Dinge anzupassen. In Adventstür Nr. 4 wurde hier auch über die Neuerungen der Breadcrump API berichtet, und im neuen Design hat sich die Platzierung auch schon leicht verändert. Parallel dazu gab es die “ Button API ” die jedoch mit einer eher unkonventionellen API Buttons für diesen Modul-Bereich erzeugen ließ. In der Datensatz-Ansicht und der Dateiliste vom TYPO3-Backend kamen auch immer zahlreiche Buttons pro Zeile zum Einsatz, die im TYPO3-Kern mit rohem HTML ausgegeben wurden, und auch in PSR-14-Eventlistenern ( ModifyRecordListRecordActionsEvent und ProcessFileListActionsEvent ) so angesprochen wurden. Mit der neuen “ Button Component Factory API ” wird nun beides geändert: Zum einen gibt es hübsche Factory-Methoden zur Erzeugung von HTML-Buttons und Menü-Komponenten (im PHP-Scope, mit Definition als Dropdown, große Buttons, kleine Buttons usw.) mit einfachen Standard-Buttons (Vor/Zurück, Reload, Sharing, …). Auch die DocHeader-Komponenten nutzen nun diese Button Component API, so dass man die alten Methoden `ButtonBar::make…` und `Menu::makeMenuItem` nicht mehr verwenden sollte. Die neue API unterstützt ein fluent Interface, hier ein Code-Beispiel: <?php use Psr \ Http \ Message \ ResponseInterface ; use TYPO3 \ CMS \ Backend \ Template \ Components \ ButtonBar ; use TYPO3 \ CMS \ Backend \ Template \ Components \ ComponentFactory ; final readonly class MeinBackwerkController { public function __construct ( private ComponentFactory $componentFactory , ) {} public function editAction ( ): ResponseInterface { // Kontext beziehen $buttonBar = $this ->moduleTemplate-> getDocHeaderComponent ()-> getButtonBar (); // "Zurück"-Button $backButton = $this ->componentFactory-> createBackButton ( $returnUrl ); $buttonBar -> addButton ( $backButton , ButtonBar :: BUTTON_POSITION_LEFT , 1 ); // Eigener Button $linkButton = $this ->componentFactory-> createLinkButton () -> setHref ( $url ) -> setTitle ( 'Adventstür öffnen' ) -> setIcon ( 'weihnachtsbaum' ); $buttonBar -> addButton ( $linkButton , ButtonBar :: BUTTON_POSITION_LEFT , 2 ); } } Viele weitere Informationen finden sich in den Changelog-Einträgen dazu: Breadcrumb Änderungen ComponentFactory Einführung Breaking Changes für Buttons API Breaking Changes für Module API Zurück: Tag 22 Weiter: Tag 24 Zurück: Übersicht
WeiterlesenAdventskalender
Jeden Tag ein neues v14-Highlight Jeden Tag öffnet die TYPO3-Community ein Türchen und stellt ein neues Feature oder eine spannende Neuerung aus TYPO3 v14 vor. 🚀 Damit verkürzen wir gemeinsam die Wartezeit – auf das Christkind und das kommende TYPO3 LTS Release. 💫 Wir freuen uns über fleißiges Teilen, Liken & Weitererzählen, damit möglichst viele TYPO3-Menschen mitfeiern können und stellen auf dieser Übersichtsseite alle Links und Artikel dar! Hash-Tags auf Social Media: #TYPO3 #typo3advent #techadvent #adventskalender #NeuesJahrNeueFeatures Adventstürchen Tag 1: Neue ViewHelper (Georg Ringer) Tag 2: Der neue Task-Planer Tag 3: Verbessere Breadcrumb-Navigation (Georg Ringer) Tag 4: Konfigurierbare Thumbnail-Formate Tag 5: Überarbeitete Modulnamen (Georg Ringer) Tag 6: "Zuletzt benutzt" in Wizards (Georg Ringer) Tag 7: Symfony Validatoren Tag 8: Konfigurierbare Dashboard Widgets (Georg Ringer) Tag 9: Neues XLIFF-Sprachlabel-Parsing Tag 10: Verbesserte TCA Subtypes (Georg Ringer) Tag 11: Extensions für 14.0 Tag 12: TCADefaults (Georg Ringer) Tag 13: CLI Kommandos Tag 14: QR Codes (Georg Ringer) Tag 15: Login-Sicherheit Tag 16: Suche im Seitenbaum in Übersetzungen (Georg Ringer) Tag 17: TCA-Typ Country Tag 18: Sprachfilter in Modulen (Georg Ringer) Tag 19: Symfony Service Locators Tag 20: Übersetzungsworkflow (Georg Ringer) Tag 21: Verschlüsselung Tag 22: Verbesserungen im Modul "Users" (Georg Ringer) Tag 23: Module und Button API
Weiterlesen19.12. - Symfony Service Locators
19.12.2025: Symfony Service Locators und AutoWiring TYPO3 liebt Symfony : Dieses Komponenten-Framework bietet auf qualitativ höchster Ebene eine Abstraktion für sehr viele Räder, die man nicht neu erfinden muss. Von der Symfony “ Dependency Injection ” ( DI ) Implementation profitieren TYPO3 und unser Extensions in höchstem Maße. Als Komfort-Maßnahme wurde in TYPO3 14.0 die Nutzung DI in großem Maße vorangetrieben, was vor allem in stateless Services resultiert, und der Nutzung von Attributen wie `#[AsCommand]`, `#[AsAlias] und `#[AsEventListener]` zur schnelleren Deklaration von wiederkehrenden Services. TYPO3 bietet intern noch diverse “alte” Registries an, die man heutzutage aber mit Symfony Service Locators umsetzen kann, bzw. auto-wiring/auto-configuration. Daher wurde folgendes umgebaut: Statt `AvatarProviderInterface` nun `#[AsAvatarProvider]` Statt Registrierung von Metadata Extraktoren in der `ext_localconf` passiert dies nun automatisch durch ServiceLocator Iteration von implementierten `ExtractorInterface`-Klassen Statt Registrierung von BackendLayout Data Providern in `ext_localconf` nun `DataProviderInterface`-Locator RouterConfigurator DI via Autoconfigure Auch für eigenen Code lohnt es sich sehr, diese Patterns zu adaptieren. Die oben aufgeführten Links zu den TYPO3-Core Changes zeigen sehr schön auf, welche Umstellungen nötig sind. Zurück: Tag 18 Weiter: Tag 20 Zurück: Übersicht
Weiterlesen