In einem Projekt wurden die Elemente in der Header-Spalte immer als Slideshow ausgegeben – auch wenn nur ein Element in dieser Spalte sichtbar war. Ich habe nach einer Möglichkeit gesucht, im Template abzufragen, wie viele Elemente dargestellt werden müssen und dann statt Slideshow einfach nur das Bild auszugeben. Mit diesem TypoScript wird die Anzahl der Elemente korrekt ermittelt und kann dann an das Fluid Template übergeben werden. Es funktionert sogar mit Workspaces.
countHeaderElements =CONTENT
countHeaderElements {
table =tt_contentselect{
selectFields = count(uid) AS count
pidInList = this
where ={#colPos}=1
andWhere =(deleted =0 AND hidden =0)}
renderObj =COA
renderObj {10=TEXT10{
data =field:count
}}}
Trotz der vielen Anleitungen, ist es jedesmal ein Try and Error das TCA für einen bestimmten Typ zu überschreiben. In diesem Fall sollte für das Element ‚video‘ die Auswahl der Dateitypen eingeschränkt werden.
Um ein Feld für alle Typen zu überschreiben, packt man folgenden Block in my_ext/Configuration/TCA/Overrides/tt_content.php
Um die News-Ausgabe mit weiteren Daten anzureichern, stellt News Events bereit, auf die reagiert werden kann. Das Event wird dabei in Configuration/Services.yaml registiert. In meinem Fall brauche ich in dem EventListener den Zugriff auf ein Repository. ObjectManager->get gilt seit TYPO3 10 als veraltet, injectXXX-Funktionen werden nicht ausgeführt. Was nun? Ein Fall für Dependancy Injection!
Der Basis Event-Listener sieht so aus und wird (in meinem Fall) in Classes/Event abgelegt:
In Configuration/Services.yaml wird der Event-Listener registriert. Gleichzeitig wird definiert, welchen Typ die Variable $fooRepository beim Erstellen des Listeners haben muss. Wichtig sind dabei die letzten zwei Zeilen: dabei wird die Klasse FooRepository als public definiert, damit sie per Depencancy Injection in einem Listener instanziiert werden kann.
Beim Erstellen von Mask Inhaltslementen kann man als Typ „Inhalte“ wählen. In der Anleitung fehlt die Angabe, wie man diese Inhaltselemente im Frontend ausgegeben bekommt. Dabei ist es so einfach:
Ich brauche die Settings eines Plugins im Scheduler. Es gibt zwar zahlreiche Snippets und Hinweise, wie es gehen soll, die alle nicht funktioniert haben. Dieses Snippet ist getestet unter TYPO3 10.
Da man sich im Backend befindet, müssen die Settings von plugin nach module kopiert werden:
module.tx_myextension <plugin.tx_myextension
Meine Extension heißt beispielhaft my_extension und ich habe im TypoScript die Konfiguration für alle Plugins gesetzt.
Im Scheduler-Task kann man auf die Settings dann wie folgt zugreifen. Zu beachten dabei die Schreibweise des Extensionnames, es ist CamelCase.
use TYPO3\CMS\Core\Utility\GeneralUtility;use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;$configurationManager= GeneralUtility::makeInstance(ConfigurationManager::class);$configuration=$configurationManager->getConfiguration(
ConfigurationManager::CONFIGURATION_TYPE_SETTINGS,'MyExtension');
Es gibt ein paar Beispiele im Netz, wie man Bild-Manipuation für tt_content aktiviert und Crop-Varianten (cropVariants) definiert. Ich habe kein Beispiel gefunden, wie man in seiner eigenen Extension direkt einem Bild-Feld Crop-Eigenschaften mitgeben kann. Nach langer Suche und viel rumprobieren ist das mein Ergebnis, das funktioniert.
Ich habe lange gesucht und kein Beispiel gefunden, daher hoffe ich, dass ich damit jemandem die Sucherei und das Quellcode-Lesen ersparen kann.
Möchte man eine Property als Boolean validieren, dann lautet die Annotation wie folgt:
use TYPO3\CMS\Extbase\Annotation as Extbase;/**
* @var boolean
* @Extbase\Validate(validator="Boolean", options={"is": "1"})
* @Extbase\ORM\Transient
*/protected$privacy;
Die Begründung ist, dass für die Abwärtskompabitilität nicht per Default validiert werden kann. Denn alle Properties vom Typ Boolean werden damit validiert.
Neueste Kommentare