TYPO3 Development

typo3_flow
TYPO3 Flow im Live-Einsatz

Da TYPO3 Flow bereits seit längerem live ist, folgt heute ein Beitrag zu Erfahrungen in der Praxis mit Flow von Gast-Autor David Sporer, Gründer von Passcreator.

Mehr lesen
t3
TYPO3 einfach erklärt

Jeder musste sicherlich schon mal erklären: Was ist ein CMS, was ist TYPO3? Ein nettes Video habe ich grad im Netz gefunden – von unseren Mitbewerbern in Schweden, aber einfach gut gemacht! So gut, dass das Video es hier in den Blog geschafft hat! Viel Spaß beim ansehen…

Mehr lesen
t3
TYPO3 4.6 Beta – Änderungen

Wenn alles nach Plan läuft, wird am 25. Oktober eine neue Major-Version von TYPO3, nämlich TYPO3 4.6.0 alias „Rebase“ erscheinen. Die erste Beta erblickte bereits am 30. August 2011 das Licht der Welt.

Mehr lesen
t3
Expires Header mit TYPO3

Kommunikation zwischen User und Server – und der Browsercache

Wenn man eine Webseite besucht, dann wird nicht nur der Quelltext (HTML) der Seite selbst herunter geladen. Auf nahezu jeder Webseite lassen sich eine Vielzahl weiterer Ressourcen finden, die mit jedem Seitenaufruf vom Browser beim Server angefragt werden. Beispiele hierfür sind Bilder, Grafiken, JavaScript und CSS-Dateien.

Mehr lesen
TemplaVoila: Element UNmappen

Heute hatte ich das Problem das ich ein Element, welches bereits gemappt war in dem entsprechenden Template Objekt nicht mehr mappen wollte. Es stellte sich also die Frage: Wie kann man unmappen? Die Lösung ist ganz einfach:

Mehr lesen
Sicherheitslücken in TYPO3 Extensions

Heute morgen wurden gleich mehrere Sicherheitslücken in verschiedenen TYPO3-Extensions veröffentlicht. Auf der TYPO3-announce Mailingliste wurde eine  „Collective Security Bulletin“ Mail (TYPO3-20080619-1) veröffentlicht, wo in gesammelter Form vor den gefundenen Sicherheitslücken in weniger populären Extensions gewarnt wird. Lars Houmark, der Author, weist aber darauf hin, dass es bei relevanteren Sicherheitslücken in weit verbreiteten Extensions oder gar der TYPO3-Core weiterhin eine Mail pro Sicherheitslücke geben wird.

Folgende Dritt-Anbieter-Extensions sind betroffen:

  • Frontend Filemanager (air_filemanager) <=0.6.1
    Typ: Schadcodeausführung auf dem Apache Webserver
    Gewichtung: hoch
    Lösung: Updade auf Version 0.6.2
  • CoolURI (cooluri) <= 1.0.11
    Typ: SQL-Injection
    Gewichtung: hoch
    Lösung: Update auf Version 1.0.12
  • DCD GoogleMap (dcdgooglemap) <= 1.1.0
    Typ: Cross Site Scripting (XSS)
    Gewichtung: mittel
    Lösung: Update auf Version 1.1.1
  • JobControl (dmmjobcontrol)  <= 1.15.0
    Typ: SQL Injection, Cross Site Scripting
    Gewichtung: hoch
    Lösung: Update auf Version 1.15.1
  • nepa-design.de Spam Protection (nd_antispam) <= 1.0.3
    Typ: Einstellungen von extern änderbar
    Gewichtung: niedirg
    Lösung: keine, Extension deinstallieren oder Schwachstelle selbst beheben. Die Extension wurde aus dem TYPO3 Extension Repository entfernt.
  • Diocese of Portsmouth Calendar Today (pd_calendar_today) <= 0.0.3
    Typ: SQL Injection
    Gewichtung: hoch
    Lösung: keine, Extension deinstallieren oder Schwachstelle selbst beheben. Die Extension wurde aus dem TYPO3 Extension Repository entfernt.
  • Diocese of Portsmouth Training Courses (pd_trainingcourses) <= 0.1.1
    Typ: SQL Injection
    Gewichtung: hoch
    Lösung: keine, Extension deinstallieren oder Schwachstelle selbst beheben. Die Extension wurde aus dem TYPO3 Extension Repository entfernt.
  • Download system (sb_downloader) <= 0.1.4
    Typ: SQL Injection
    Gewichtung: hoch
    Lösung: Update auf Version 0.1.5
  • Random Prayer (ste_prayer) <= 0.0.2
    Typ: SQL Injection
    Gewichtung: hoch
    Lösung: keine, Extension deinstallieren oder Schwachstelle selbst beheben. Die Extension wurde aus dem TYPO3 Extension Repository entfernt.
  • TIMTAB – social bookmark icons (timtab_sociable) <= 2.0.4
    Typ: SQL Injection
    Gewichtung: hoch
    Lösung: Update auf Version 2.0.5
  • Resource Library (tjs_reslib) <= 0.1.0
    Typ: Cross Site Scripting (XSS)
    Gewichtung: mittel
    Lösung: keine, Extension deinstallieren oder Schwachstelle selbst beheben. Die Extension wurde aus dem TYPO3 Extension Repository entfernt.
  • Fussballtippspiel (toto) <= 0.1.1
    Typ: SQL Injection
    Gewichtung: hoch
    Lösung: Update auf Version 0.1.2
  • TARGET-E WorldCup Bets (worldcup) <= 2.0.0
    Typ: SQL Injection, Cross Site Scripting (XSS)
    Gewichtung: hoch
    Lösung: Update auf Version 2.0.1
Mehr lesen
Firefox 3.0 und TYPO3

Firefox 3.0 ist heute Abend in der finalen Version erschienen. Ganz abgesehen davon, dass euphorisch die neue Version runter geladen wird und versucht wird, einen neuen Rekord an Downloads aufzustellen, kann man auch schon die ersten Probleme feststellen.

Mit dem Firefox 3.0 gibt es Probleme im TYPO3 Backend. Ein Programmierfehler im Backend, welcher sich in vorherigen Firefox-Versionen nicht ausgewirkt hat, führt nun zu Problemen beim Framehandling im Backend. Das TYPO3-Team hat deswegen auch neue Versionen des Content Mangement Systems veröffentlicht. Selbst für den üblicherweise nicht mehr weiter gepflegten 4.0.* Baum gibt es Updates.

In den TYPO3-Versionen 4.2.1, 4.1.7 und 4.0.9 sollten die Fehler behoben sein. Einem Update ist ohnehin anzuraten, da in allen Vorgängerversionen zwei Sicherheitslücken enthalten sind, von denen eine vom TYPO3-Security-Team als kritisch (high) eingestuft wird.

Mehr lesen
TemplaVoila! – Backenddesign

Sicher wünschte sich jeder TYPO3 Admin schon einmal, die Darstellung des TemplaVoila! Backends mehr an das Design im Frontend anpassen zu können. Redakteure finden sich dadurch leichter zurecht. Häufig werden hierfür Extensions wie me_templavoilalayout oder me_pagelayout eingesetzt. Meinem Eindruck nach wissen viele Admins nicht, dass TemplaVoila! seit Version 1.3 eine Möglichkeit bietet dies ohne zusäztliche Extensions zu bewerkstelligen.

Hier eine Lösung ohne zusätzliche Extension:

Über das XML der TemplaVoila!-Datenstruktur ist dies schnell und einfach möglich. Hier ein Beispiel:


		1
	                        
	                                 


                            


###field_boxrow###




###field_content###








	            ]]>        
	        			
	
	
		
			
			Wählen Sie das HTML-Element der Seite, das Sie als übergeordnetes Container-Element der Vorlage möchten.
		
		array
		
			
				[...]
			
			
				[...]
			
		
	

Das Ganze sieht dann so aus:

Dies ist sehr einfach. Bei beLayout das gewünschte HTML eingeben und Platzhalter wie ###field_boxrow### für die Feldnamen, welche auch im XML definiert sind, an den gewünschten Stellen platzieren.

Mehr lesen
Caching in TYPO3-Extensions

Wer einmal einen genaueren Blick auf die Abläufe im TYPO3-Frontend-Rendering geworfen hat, weiß, wie viele komplexe Vorgänge an der Ausgabe der TYPO3-Seiten beteiligt sind. Diese Komplexität steigt weiter, je mehr Extensions installiert sind. Würden TYPO3 Seiten bei jedem Aufruf neu aufgebaut, würde die Performance der Seiten erheblich Leiden und die Server hätten damit eher ihre Probleme. Außerdem funktioniert die Such-Indexierung nur dann, wenn die Inhalte zwischengespeichert werden.

Leider scheint das Caching an sich etwas zu wenig dokumentiert zu sein. Es finden sich immer wieder neue Extensions, welche die Caching-Mechanismen von TYPO3 nicht richtig einzusetzen verstehen. Dies liegt wahrscheinlich nicht zuletzt daran, dass die Schalter zum Aktivieren der Caching-Funktionalitäten recht gut versteckt und leicht zu übersehen sind.

Um die Performance von statischen Seiten zu verbessern, wird der fertig gerenderte HTML Code in der Datenbank abgelegt, um beim nächsten Abruf der Seite direkt aus der Datenbank geladen zu werden. Bei Extensions unterscheiden sich zwei verschiedene Vorgehensweisen:

  1. Ein Großteil der Frontend-Plugins liefert bei gleichen Parametern immer gleiche Ergebnisse. Dies kennt man von News oder Shop-Systemen. Dies bedeutet, dass man die Ausgabe für verschiedene Parameter-Kombinationen jeweils im Cache ablegen kann, um sie bei der nächsten Anfrage beschleunigt ausgeben zu können.
  2. Darüber hinaus existieren jedoch Erweiterungen, deren Ausgaben hochdynamisch sind. Zu dieser Gruppe zählen unter anderem Community-Features, deren Ausgabe minütlich wechseln kann, obwohl die Parameter gleich bleiben (oder gar keine Parameter angegeben werden). Hier würde Cache verhindern, dass der Benutzer alle neuen Informationen geliefert bekommt

Die Cache-Mechanismen werden zum an zwei verschiedenen Stellen der Extension ein- und ausgeschaltet. Dies ist zum Einen die Datei ext_localconf.php und zum anderen die Datei des Plugins selbst, die die Plugin-Base-Klasse enthält (welche in der Regel auf piX.php endet)

ext_localconf.php

t3lib_extMgm::addPItoST43($_EXTKEY,'piX/class.tx_extensionname_piX.php','_piX','list_type',1);

Der entscheidende Punkt in dieser Anweisung ist der letzte Parameter. Dieser wird im angegebenen Beispiel auf true gesetzt und das System somit angewiesen, die Ausgabe der Extension zu cachen.

t3lib_extMgm::addPItoST43($_EXTKEY,'piX/class.tx_extensionname_piX.php','_piX','list_type',0);

Im zweiten Fall wurde nun die Variable auf false gesetzt und die Ausgabe daher nicht zwischengespeichert.

class.extensionname_piX.php

Innerhalb der Extension kann nun noch festgelegt werden, ob das Plugin cHashing-Mechanismen zum Identifizieren gleicher Parameter-Kombinationen nutzen soll. cHashs werden durch den Typolink-Mechanismus erstellt, wobei die eingehenden Parametern zusammen mit dem geheimen internen Schlüssel zu einem Hash-Wert zusammengefasst werden. Dieser Mechanismus wird über das Setzen einer Klassenvariable erreicht:

var $pi_checkCHash = true;

Alternativ kann ein Plugin explizit als USER_INT Objekt ausgewiesen werden. Für diese wird in den gecachten Seiten ein Platzhalter hinterlegt, während die eigentliche Ausgabe der Extension erst zur Laufzeit der Webseite eingesetzt wird.

function main($content,$conf) {
    [...]
    $this->pi_USER_INT_obj = 1;
    [...]
  }

Ein häufig auftretender Fehler hierbei ist die Kombination der beiden letztgenannten Optionen. Allerdings widersprechen sich die beiden Konzepte, da beispielweise bei der Link-Generierung keine Cache Hashes gebildet werden, wenn ein Plugin einem USER_INT-Objekt entspricht. Um an dieser Stelle dynamische Ausgaben zu generieren, behelfen sich viele Entwickler mit der no_cache-Anweisung, die das Caching für die gesamte Seite deaktiviert. Dies bedeutet, dass die gesamte Seite von einer Indizierung ausgeschlossen wird und das Rendern der Seite erschwert wird. Von der Anweisung

$GLOBALS['TSFE']->set_no_cache();

sollte in einer Live-Seite prinzipiell Abstand genommen werden.

Wie man sieht, sind die Anweisungen für Caching-Mechanismen eher übersichtlich, so dass die fachgerechte Einstellung des eigenen Frontend-Plugins keine allzu große Hürde darstellen sollte. In der Praxis gestaltet sich dies bisher leider noch zu oft als eine Hürde für Extensions mit viel Potential.

Mehr lesen
CObject im Backend

Wer häufiger mal Module für das TYPO3-Backend entwickelt, hat sich sicherlich auch schonmal daran gestoßen, dass es im Backend keinen Zugriff auf das cObject gibt, wie man es beispielsweise aus dem Frontend kennt.

$this->cObj->HMENU($this->conf['menu']);

Im Folgendem beschreibe ich kurz, wie man ein Objekt der Klasse tslib_cObj im Backend erstellt.

Mehr lesen
1 2