blog.bartlweb - a technologist's external brain

Thema: TYPO3

tt_content Standardausgabe formatieren

Die Standardausgabe von Content-Elementen innerhalb von TYPO3 lässt sich mittels Typoscript beeinflussen. Dabei ist die Ausgabe immer nach dem folgenden Schema aufgebaut:

tt_content.<contentelement>.10 - Header
tt_content.<contentelement>.20 - Content

Um die Standardkonfiguration für die einzelnen Elemente herauszufinden ist es am Einfachsten in der Typoscript-Setup-Datei /typo3/sysext/css_styled_content/static/setup.txt der Systemextension css_styled_content nachzusehen.

Die folgenden Content-Elemente stehen zur Konfiguration zu Verfügung:

  • header
  • text
  • image
  • textpic
  • bullet
  • table
  • multimedia
  • swfobject
  • qtobject
  • media
  • mailform
  • search
  • login
  • menu
  • list

Die Reihenfolge der wichtigsten Wraps in TYPO3

Die Konfigurationssprache Typoscript bietet unter TYPO3 die Möglichkeit komplexe Ausgaben zu erzeugen. Eines der größten Misterien dabei sind die Wraps, representiert durch die Konfigurations-Option stdWrap. Im folgenden möchte ich die Verschachtelung hinter den einzelnen Optionen des stdWraps auflösen (Im Folgenden sind nicht alle verfügbaren Wraps dargestellt, sondern nur jende die ich des öfteren selbst nutze). Genaue Infos finden sich unter http://www.typo3.net/tsref/functions/stdwrap/ und http://www.typo3.net/tsref/menu_objects/tmenuitem/.

TEXT/HTML

Auf die Objekte TEXT und HTML lässt sich die Funktion stdWrap anwenden. Diese vereint neben den reinen Wraps auch weitere Möglichkeiten wie das Einbinden von Datenquellen oder Bedingungen.

Typoscript in einer Extension ausführen

Typoscript ist mehr als mächtig und erledigt viele Dinge schneller und komfortabler als selbstgeschriebender PHP-Code. Daher gibt es auch die Möglichkeit Typoscript in einer Extension auszuführen und das Ergebnis dann über diese auszugeben. Denkbar ist z.B.: eine Extension die per Flexform Typoscript entgegen nimmt und diesen dann ausführt und ausgibt. Damit lässt sich eine Extension für das Einfügen von Typoscript als Content-Element im Backend realisieren.

Typoscript direkt im Code

$typoscript['conf'] = 'TEXT';
$typoscript['conf.']['data'] = 'date:U';
$typoscript['conf.']['strftime'] = '%Y';
$typoscript['conf.']['noTrimWrap'] = '|(c) | www.domain.com|';
 
$content = $this->cObj->cObjGetSingle($typoscript['conf'], $typoscript['conf.']);

Typoscript aus Flexform oder Datei auslesen

/* get typoscript code */
$typescript = ...
 
/* parse typoscript code */
$tsParser = t3lib_div::makeInstance('t3lib_TSparser');
$tsParser->parse(trim($typoscript));      
$tsArray = $tsParser->setup;
 
/* generate content */
$time = time();
      
$code = array(
  'ts_' . $time => 'COA_INT',
  'ts_' . $time . '.' => $tsArray
);
 
$content = $this->cObj->cObjGetSingle($code['ts_' . $time], $code['ts_' . $time . '.']);

Extension in einer TYPO3-Extension einbinden

Der folgende Code ermöglicht es in TYPO3 die Ausgabe einer fremden Extension per Marker in einer Extension auszugeben.

require_once(t3lib_extMgm::extPath("myext", "pi1/class.tx_myext_pi1.php");
$tx_myext_pi1 =& new tx_myext_pi1();
$tx_myext_pi1->cObj = t3lib_div::makeInstance('tslib_cObj');
$tx_myext_pi1->conf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_myext_pi1.'] ;
$markerArray['###EXTMARKER###'] = $tx_myext_pi1->main (&$this->content, $tx_myext_pi1->conf);

SQL-Funktionen des TYPO3-PHP-Frameworks

Das PHP-Framework von TYPO3 bietet einfache Funktionen für das Ausführen von SQL-Kommandos, die den Zusammenbau der einzelnen SQL-Statements übernehmen. Nähere Informationen und weitere nützliche Funktionen, wie z.B.: searchQuery() finden sich in der offiziellen TYPO3-Klassen-Dokumentation api.typo3.org/typo3cms/47/html/classt3lib___d_b.html.

Funktionen

insert

$result = exec_INSERTquery(
  'table',
  array('field' => 'value')
);

update

$result = exec_UPDATEquery(
  'table',
  'where',
  array('field' => 'value')
);

delete

$result = exec_DELETEquery(
  'table',
  'where'
);

select

$result = exec_SELECTquery(
  'fields',
  'table',
  'where',
  'groupBy (optional)',
  'orderBy (optional)',
  'limit (optional)'
);

SELECTgetRows

Liefert anstelle eines Result-Pointers ein Array mit den angeforderten Werten zurück.

Datei und Ordnerstruktur einer TYPO3-Extension

Auf den ersten Blick erscheint der Umfang der verschiedenen Dateien in einer TYPO3-Extension etwas verwirrend. Die folgende Auflistung erklärt kurz den Nutzen der einzelnen Dateien und Ordner. Beachten Sie, dass nicht jede Extension immer alle dieser Dateien und Ordner benötigt bzw. enthält.

Ordner

doc

Der Ordner doc enthält die Dokumentation der TYPO3-Extension. Üblich ist es dabei die von TYPO3 gelieferte OpenOffice-Vorlage manual.sxw zu nutzen. Wurde die Extension mit Hilfe des Kickstarters erstellt, speichert dieser hier seine Konfiguration in den Dateien wizard_form.dat und wizard_form.html.

pi* (z.B.: pi1, pi2, ...)

Alle für die Extension erstellten Plugins befinden sich in den pi1 bis piX - Ordnern, wobei die Nummerierung im Normalfall aber nicht zwingend fortlaufend ist.

Extension-Pfad ermitteln

Gelegentlich ist es von Nutzen den Pfad zu seiner eigenen TYPO3-Extension zu ermitteln, um z.B. Grafiken oder CSS-Dateien aus diesem Verzeichnis einzubinden. Die folgenden 3 Methoden liefern den für das jeweilige Einsatzgebiet passenden Pfad zurück.

t3lib_extMgm::extPath($extName)

Liefert den absoluten Pfad zum Extension-Verzeichnis zurück.

t3lib_extMgm::extRelPath($extName)

Liefert den relativen Pfad zum Extension-Verzeichnis für den Einsatz im TYPO3-Backend zurück.

t3lib_extMgm::siteRelPath($extName)

Liefert den relatien Pfad zum Extension-Verzeichnis für den Einsatz im Frontend zurück.

Hilfsfunktionen der TYPO3-Klasse t3lib_div

Die TYPO3 Klasse t3lib_div bietet viele für die Extension-Entwicklung hilfreiche Funktionen. Die Interessantesten daraus sind unten kurz vorgestellt.

Post und Get

t3lib_div::_GP($var)

Gibt den Wert der GET oder POST Variable zurück.

t3lib_div::_GET($var)

Gibt den Wert der GET Variable zurück. Ohne Übergabeparameter wird ein Array aller Variablen zurückgegeben.

t3lib_div::_POST($var)

Gibt den Wert der POST Variable zurück. Ohne Übergabeparameter wird ein Array aller Variablen zurückgegeben.

XML

t3lib_div::array2xml($array)

Konvertiert ein PHP-Array in eine XML-Struktur.

t3lib_div::xml2array($xml)

Konvertiert eine XML-Struktur in ein PHP-Array.

Dateien

t3lib_div::getURL($file)

Liefert den Inhalt einer als absoluter Pfad oder als URL angegebenen Datei zurück.

PHP-Konstanten in TYPO3

Die folgenden Konstanten stehen in PHP für die Entwicklung von TYPO3-Extensions zu Verfügung.

TYPO3_MODE - liefert FE für Frontend bzw. BE für Backend zurück
PATH_site - absoluter Pfad zum Hauptverzeichnis der TYPO3-Installation
PATH_typo3 - absoluter Pfad zum Verzeichnis typo3
PATH_t3lib - absoluter Pfad zum Verzeichnis t3lib
PATH_typo3conf - absoluter Pfad zum Verzeichnis typo3conf
TYPO3_db - Name der verwendeten TYPO3-Datenbank
TYPO3_db_host - Host der verwendeten TYPO3-Datenbank
TYPO3_db_username - Benutzername zur TYPO3-Datenbank
TYPO3_db_password - Passwort zur TYPO3-Datenbank

Seitentitel aus einer Extension heraus verändern

Um den Seitentitel aus einer Extension heraus zu verändern, gibt es eigentlich eine ganz einfache Methode:

$GLOBALS['TSFE']->page['title'] = 'Neuer Seitentitel';

Diese Methode greift allerdings nur dann, wenn es sich beim Plugin um eine gecachte Extension (also nicht vom Typ USER_INT) handelt und der Seitentitel per Typoscript nicht manuell verändert wurde (config.disableAllHeaderCode).

Ansonsten muss mann sich leider manuell um die Änderung des Seitentitels kömmen. Dafür gibt es 2 Ansätze die sich im Einsatz bewährt haben.