Caching kurzlebiger Inhalte (z.B. News)

Ein typischer Fall, in dem Kunden und Entwickler das Caching von TYPO3 bisher verfluchten, war die Nutzung eines Plugins wie tt_news, bei dem sich die anzuzeigenden Datensätze zwar geändert hatten, die Aktualisierung des Caches aber erst nach Ablauf dessen Gültigkeitszeitraums  erfolgte. (Die Möglichkeit, generell den Cache zu deaktivieren, ist böse und wir daher nicht näher betrachtet). Über die Einstellung TCEMAIN.clearCacheCmd auf der Seite, die die Datensätze enthält, ließ sich zwar der Cache einzelner (oder aller) Seiten bei Änderungen invalidieren, jedoch ist dies nicht wirklich sinnvoll und praktikabel:

  • Man muss entweder die Liste der Seiten-IDs pflegen oder mittels “all” den Cache aller Seiten lsöchen, unahängig davon, ob das Plugin dort überhaupt eingesetzt ist.
  • Man löscht stets den Cache der gesamten Seite, obwohl sich ja nur ein Inhaltselement aktualisieren soll.

Ende Februar hatte Fabrizio in seinem Blog eine Idee vorgestellt, wie auf Contentelement-Ebene ein individuelleres Caching ermöglicht werden könnte. Diese stieß auf viel Interesse und schaffte es schnell in den TYPO3-Core (4.7), auch ein Backport in 4.5 und 4.6 ist vorgesehen.

(weiterlesen …)

TYPO3 Core Dokumentation

Mit dem neuen Release haben sich auch wieder ein paar Dinge geändert bzw. kamen neue Dinge hinzu. Folglich wurden auch einige der Core-Dokumentationen aktualisiert. Nachdem die PDFs davon nicht mehr ganz so schnell und einfach aus dem Repository runtergeladen werden können, habe ich mal eine Liste der Dokumente samt PDF-Verlinkung zusammengestellt.

Kurz noch die Erklärung von typo3.org, wie die Dokumente allgemein einzusortieren sind:

These documents are related to the core of TYPO3 and address the built in functionality of TYPO3. They are designed to provide you with in-depth information. Each Core Manual addresses a particular process or function and how it is implemented within the TYPO3 source code. These may include information on available APIs, specific configuration options, etc. The Core Manuals are written as reference manuals. You should rely on the Table of Contents to identify what particular section will best address the task at hand.

Alle Core-Dokumentationen als PDF (ZIP)

(weiterlesen …)

TYPO3-Scheduler integrieren

Die Integration des integrierten Schedulers in TYPO3 ist denkbar einfach.

Zu allererst benötigt der Scheduler einen Benutzer, als der er seiner Aufgabe nachgehen kann. Der Benutzername ist hartcodiert und TYPO3-weit als

_cli_scheduler

vorgegeben. Dieser Benutzer braucht (in der Regel) keine besonderen Berechtigungen, er muss schlicht und ergreifend existieren (auch das vergebene Passwort ist dahingehend irrelevant). Er darf NICHT mit Administrator-Rechten arbeiten.

Ist der Benutzer angelegt, ist die TYPO3-seitige Arbeit schon erledigt. Was nun noch fehlt, ist der Cronjob selbst. Für Linux (ob und wie dies auch mit anderen Betriebssystemen realisierbar ist, gilt es zu prüfen) ist das Vorgehen zum Anlegen des Crons wie folgt:

Man öffnet die Konsole des Servers, auf dem die TYPO3-Installation läuft und wechselt zum entsprechenden Benutzer. Dies kann zum Beispiel folgendermaßen aussehen:

su -s /bin/bash - user32

Um herauszufinden, welcher Benutzer der Richtige ist, bietet es sich an, ins Wurzelverzeichnis der Seite, für die der Scheduler installiert werden soll, zu wechseln und sich dort über

ls -la

den Verzeichnisinhalt anzeigen zu lassen. Das Resultat dürfte dann in etwa folgendermaßen aussehen:

  4 drwxrwx---  2 vu2113   www-data   4096  2. Dez 12:21 backups
  4 drwxr-xr-x  2 user32   gruppe32   4096  2. Dez 12:21 cgi-bin
  4 drwxr-xr-x  3 www-data www-data   4096  2. Dez 12:21 disabled
  4 drwxrwxr-x  3 user32   gruppe32   4096  2. Dez 12:21 errors
  4 drwxrwxr-x 23 user32   gruppe32   4096 24. Apr 13:32 htdocs
  4 drwxrwx---  2 user32   www-data   4096  7. Mär 02:41 logs
120 drwxrwx---  2 user32   www-data 118784 24. Apr 13:32 phptmp
  4 drwxr-xr-x  5 user32   gruppe32   4096  5. Mär 13:23 relaunch

Die vierte Spalte ist von Interesse, in diesem Fall wäre daher der Benutzer “user32″ die Richtige Wahl.

Hat man nun die Rolle des richtigen Systembenutzers angenommen, ermittelt man, wo sich die PHP-Binary befindet. Dies ist am einfachsten über

which php

oder

which php5

herauszufinden.
In der Regel bekommt man hier etwas in der Form

/usr/bin/php5

zurück.
Nun öffnet man über

crontab -e

die Cronjob-Tabelle.

Jetzt geht es ans Eingemachte:
In die Crontab fügt man nun die folgende Zeile ein:

*/5   *    *    *    *    test -x ~/htdocs/typo3/cli_dispatch.phpsh && /usr/bin/php5 ~/htdocs/typo3/cli_dispatch.phpsh scheduler > /dev/null 2>&1

Zur Erklärung:
*/5 sagt dem Cron, er möge alle fünf Minuten laufen (in jeder Minute, die durch 5 ohne Rest teilbar ist, selbstverständlich kann man hier auch andere Intervalle definieren)
* jede Stunde
* jeden Tag des Monats
* jeden Monat
* jeden Tag der Woche

Zur näheren Erläuterung möglicher Interval-Einstellungen siehe bspw. http://wiki.ubuntuusers.de/Cron

Die vorangestellte Prüfung

test -x ~/htdocs/typo3/cli_dispatch.phpsh

stellt sicher, dass das aufzurufende Skript existiert und über CLI ausführbar ist. Nur bei positiver Prüfung wird das Script mit

/usr/bin/php5 ~/htdocs/typo3/cli_dispatch.phpsh scheduler

gestartet. Mit

> /dev/null 2>&1

leiten wir sämtliche Ausgaben nach /dev/null um (so stellt man sicher, dass Fehler im Cron keine Mailflut verursachen).

Wichtig: Vor dem Abspeichern der geänderten Crontab muss sichergestellt sein, dass die Datei mit einer leeren Zeile endet.

Damit wäre der Scheduler eingerichtet und bereit. Neuere TYPO3-Versionen von TYPO3 bringen bereits einen Task "Update Extension List (em)" mit. Mit diesem kann man die Funktionstüchtigkeit des Crons testen.

Wer es eilig hat, kann auch gerne mal die Extension "ml_autoinstall_scheduler" (verfügbar übers TER) ausprobieren. Diese versucht, die selben Schritte automatisiert auszuführen.

Colspan/Rowspan in CType: table

Das Problem Tabellenzellen kommt nicht mehr allzu häufig vor aber hin und wieder doch. Mit der RTE Tabelle nicht das Problem aber die Tabelle an sich nicht sehr gut zum bearbeiten.
In der contenttable ist dies so gut wie unmöglich. Aber es gibt eine funktionierende Lösung:

Man nehme die Extension th_exttableservice und aoe_advancedtable. 

Da aoe_advancedtable die eigene CSS-Klasse nicht mit übernimmt muss noch folgendes Snippet eingefügt werden.

$acctables_class = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_tableclass');

$tableClass = 'contenttable contenttable-'.$type;

if ($acctables_class) {
   $tableClass.= ' '.$acctables_class;
}

$table->setTableAttribute('class',$tableClass);

Und schon kann man Tabellen zusammenfassen. Auf dieser Seite ist noch eine Beschreibung wie es funktioniert.

Automatische Silbentrennung

Lange durfte/musste Kunden erklärt werden, dass der Textfluss in HTML nicht so schön flüssig sein kann wie in Word & Co, weil es keinen automatischen Zeilenumbruch gibt – entweder man setzt händisch Umbrüche (oder mögliche Umbruchsstellen) oder man überlässt es rein den Gegebenheiten. Zusätzlich verkompliziert hat diese Lage, dass Textbreiten von Browsern, Betriebsystemen, Schriftarten usw. abhängig waren, wodurch es nahezu unmöglich war, passende Umbrüche zu setzen.

CSS3 bringt nun endlich die lang ersehnte Lösung – zumindest weitgehend:

body {
	 -webkit-hyphens: auto;
	 -moz-hyphens: auto;
	 -ms-hyphens: auto;
	 hyphens: auto;
}

Damit wird – richtigen HTML-Language Code vorausgesetzt – die Silbentrennung des Browsers aktiv.

Leider haben Browser aber noch immer kein Gefühl für Schönes, für Harmonie, sodass die Trennungen oft sehr stur gesetzt wirken. Es wird getrennt, was trennbar ist – egal, ob es wirklich Sinn macht.
Rein mit Technik kommt man also weiterhin nicht aus. Auch in Zukunft braucht es Leute mit Gespür für Ästhetik, sodass automatische Trennungen nur in Bereichen mit umfangreichen Texten gesetzt werden, ansonsten aber doch lieber weiterhin von Hand an den richtigen, den schönen, den notwendigen Stellen.

Quellen

  1. http://kulturbanause.de/2012/02/silbentrennung-im-browser-css-eigenschaft-hyphens/
  2. http://scheible.eu/automatische-umbruche-mit-css3/