Kategorie: Extensionentwicklung

0

Caching Framework: automatisch Cache leeren bei Datensatzänderung

Das Caching Framework lässt sich gut verwenden, um aufwändig generierte/abgefragte Daten zur Wiederverwendung schneller parat zu haben. Die prinzipielle Funktionsweise haben wir in „Caching Framework nutzen“ erklärt und findet sich auch in der Doku sowie in zahlreichen anderen Blogs. Was aber oftmals fehlt: wie aktualisiert man den Cache bzw. invalidert ihn bei Veränderung der Daten? Häufig hängt der Inhalt des Caches von Datensätzen ab. D.h. der Cache-Inhalt veraltet, wenn sich ein Datensatz verändert. Und damit ist auch der Ansatzpunkt für die Invalidierung klar: der processDatamap_afterDatabaseOperations-Hook im DataHandler. Er wird immer nach Datenbankoperationen („new“ bzw. „update“) aufgerufen und bekommt auch den...

0

realURL: optimierte Multi-Domain-Konfiguration

Ausgangssituation In einem Projekt waren in einer TYPO3-Instanz über den Seitenbaum mehrere Marken in verschiedenen Ländern mit jeweils eigenen (Teil-)Seitenbaum abgebildet. Die einzelnen Websites waren inhaltlich-strukturell sehr ähnlich, und es waren viele spezifische Plugins im Einsatz. Insgesamt entstand so für die rund 100 Einstiegseiten eine (via realURL-Autoconfiguration erzeugte) rund 4,5 MB große Konfiguration. Die war uns ein Dorn im Auge.

1

locallang-Einträge werden nicht übernommen

Manchmal könnte man fast verzweifeln. Die neue Extension für den Kunden ist endlich fertig, es soll nur noch schnell ein Textchen mehr an einer Stelle rein. Kein Problem, locallang.xml ergänzt und im Fluidtemplate auch noch eine Zeile ergänzt – im Frontend bleibt die Stelle jedoch leer. Eine Überprüfung, ob der Key denn auch korrekt ist, bestätigt: ja, ist korrekt 🙁 Ursache ist (wie leider so oft) der Cache, der es (zu) gut meint. Lösung: Seit TYPO3 4.6 cacht der l10n-Parser (basierend auf dem Caching Framework) die Übersetzungen. Ein Löschen dieses Caches bringt dann den neu hinzugekommenen Wert auch zum Vorschein....

12

Typolink + realurl in Scheduler-Tasks

Anforderung war, dass aus einem Scheduler-Task heraus korrekte sprechende URLs erzeugt werden. Der einfachste Weg hierfür ist eine der typolink-Methode des cObjects. Leider steht ein solches aber in Tasks von Haus aus nicht zur Verfügung. Anleitung, wie man sich ein solches erzeugen kann, finden sich im Internet viele – leider aber auch zahlreiche, die nicht (mehr) funktionieren oder riesen woodoo treiben. Nach einigen Recherchen und Tests kann ich nun einen Weg zur Problemlösung festhalten.

0

PHP array_merge_recursive() + realurl „fixedPostVars“

Einige Zeit hat es mich heute gekostet, um festzustellen, warum meine Erweiterung der realurl-Konfiguration via Hook zur Autoconfiguration fehlerhaft in der Konfiguration ankommt. Ursache ist ein Fehlverhalten der PHP-Funktion array_merge_recursive(). array_merge_recursive() Zunächst, die Beschreibung der Funktion aus der Dokumentation: array_merge_recursive() merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. If the input arrays have the same string keys, then the values for these keys are merged together into an array, and this is done recursively, so that if one of...

1

TYPO3 – Suche erweitern

Wer des öfteren mal die Funktionalität von TYPO3 mit eigenen Extensions erweitert, wird des Öfteren auf das Problem stoßen, dass bei der Erweiterung von Tabellen oder beim anlegen von Extension-spezifischen Datenbanktabellen bei der hauseigenen Suche außen vor bleiben. Hier ist es sinnvoll, der Suche mitzuteilen, es möge doch bei der Suche auch zusätzliche Felder berücksichtigen. Dies lässt sich einfach und – im Gegensatz zu IF-Abfragen – einfach über TypoScript lösen. Um der Suche die neuen Datenbank-Tabellen und/oder Felder mitzuteilen, geht man folgendermaßen vor. Standard-Wert für „Überschriften und Schlagwörter“: tt_content.search.30.dataArray.20.valueArray.10.value = pages.title-subtitle-keywords-description Standard-Wert für „Seiteninhalt“: tt_content.search.30.dataArray.20.valueArray.20.value = pages.title-subtitle-keywords-description : tt_content.header-bodytext-imagecaption Zur...

1

TYPO3 Autoload

Seit TYPO3 4.3 können Klassen automatisch beim Laden einer Extension eingebunden werden (z.B. rund um die Scheduler Tasks nützlich). Eigentlich kein Hexenwerk, aber als kleine Gedankenstütze trotzdem ein paar Zeilen Code und die Rahmenbedingungen: ext_autoload.php: <?php $extensionPath = t3lib_extMgm::extPath(‚myext‘); return array( ‚tx_myext_myclass‘ => $extensionPath . ‚Classes/class.tx_myext_myclass.php‘, ); ?> Rahmenbedingungen der Key muss immer kleingeschrieben sein, auch wenn die Klasse im CamelCase-Stil benamt ist der Key muss mit tx_ (oder ux_) beginnen bzw. derart sein, dass mittels t3lib_extMgm::getExtensionKeyByPrefix($prefix) der Extension-Key ermittelbar ist ($prefix ist hierbei der Substring des Keys bis zum zweiten Unterstrich) die Datei ext_autoload.php liegt im Hauptverzeichnis der Extension...

1

Caching Framework nutzen

Für umfangreichere Datenkonstrukte, die häufig verwendet werden oder aber aufwändig zu erzeugen sind, ist ein Cache nützlich. Ein typischer Fall sind Dateilisten, die sich auf Verzeichnissen generieren (z.B. für eine einfache Bildergalerie). Die Inhalte der Verzeichnisse ändern sich meist nur extrem selten – wozu also immer wieder aufs Neue via Dateisystem auslesen, welche Dateien existieren? Hier ist es doch naheliegender, die Liste zu cachen und nur selten oder gar nur via gezielter Anforderung zu aktalisieren. Einen von vielen Fällen, wo das Caching Framework in einer eigenen Extension zum Einsatz kommen kann…

0

(zu) viele Bilder in einem Verzeichnis

Zuviele Dateien in einem einzelnen Verzeichnis können zu einem Flaschenhals werden, der in seltenen Fälle auftritt, und schwer zu aufzuspüren ist. Eintreten kann dies durch sehr große Fotogalerien (z.B. Disco-/Szene-Websites mit hunderten Fotos pro Abend), große Shops mit zig Varianten pro Bild – oder durch Programmierfehler/Logikfehler. TYPO3 generiert hier brav die skalierten Bilder und speichert sie defaultmäßig in typo3temp/pics/. Sind hier irgendwann sehr viele Dateien gespeichert – in einem Fall bei uns ca. 500.000 – leidet das Betriebssystem darunter und baucht ggf. etwas länger, um einen Dateiaufruf beantworten zu können, da die zu durchsuchende Menge (zu) groß ist. Weiß man...

2

tt_news: Defaultwert für Archivierungsdatum

Newsmeldungen werden mit tt_news wunderbar kategorisiert, verwaltet,… – aber auch archiviert??? Meine Antwort ist: Jain. Eine Archivierungsfunktion hat die Extension, doch so ganz wunderbar ist diese leider nicht. So wird das gesetzte Archivierungsdatum ignoriert, falls es größer als das aus datetimeDaysToArchive errechnete Datum ist. Für eine Verkürzung der Archivierungszeit funktioniert es hingegen. Eine Lösung lässt sich jedoch über das User TSconfg bauen.