- Hinzufügen von Frontend-Plug-ins jeglicher Art
Mit dem Befehl "addPlugin" in der Extension "t3lib_extMgm" lassen sich Frontend-Plug-ins hinzufügen.
Darüber hinaus stellt TYPO3 für Frontend-Plug-ins zahlreiche weitere Funktionalitäten zur Verfügung wie beispielsweise das Rendern von Inhalten mit tslib_content.php.
- Hinzufügen von Backend-Modulen jeder Art
Mittels dem Befehl "addModule" lassen sich in der Extension "t3lib_extMgm" Module hinzufügen. Der passende Code dafür sieht so aus:
<?php
t3lib_extMgm::addModule('tools', 'txaoeanalyseM1', '',
t3lib_extMgm::extPath($_EXTKEY) . 'mod1/');
?>
- Hinzufügen von Datenbank-Tabellen und Feldern in bestehende Tabellen
TYPO3 hat ein mächtiges Konzept zum Konfigurieren von Datentabellen: TCA (TYPO3 Configuration Array). Damit wird u.a. das Verhalten der Eingabefelder im Backend konfiguriert. In extensions kann man mit Hilfe der Dateien ext_tables.sql, ext_tables.php und tca.php flexibel die Struktur von TYPO3 Datentabellen sowie deren TCA-Konfiguration anpassen.
- Datenbank-Abstraktion
Mit der PHP-Klasse t3lib_DB, der Database Abstraction Base API, kann die verwendete MySQL-Datenbank angesprochen werden. Die Klasse selber beinhaltet bereits gekapselte MySQL-Anweisungen, die angepasst werden können. Aber nicht nur MySQL-Datenbanken lassen sich über diesen Weg ansprechen, sondern auch proprietäre Datenbanken wie beispielsweise von Oracle.
- Datenbanktabellen mit statischen Informationen ergänzen
In dem Extension-Verzeichnis muss folgende Datei erstellt werden: „ext_tables_static+adt.sql“. In dieser Datei werden dann die „CREATE TABLE“ und auch „INSERT“ Befehle ausgeführt.
- Hinzufügen von TypoScript statischen Template-Dateien oder "adhoc snippets"
Um statische Templates hinzuzufügen, werden in der „ext_tables.php“ -Systemextension mittels der "t3lib_extMgm::addStaticFile()" -Methode Pfade registriert, unter denen die „setup.txt“- und „constants.txt“ zu finden sind.
Ein Beispiel für die Registrierung der Pfade lautet:
<?php
t3lib_extMgm::addStaticFile($_EXTKEY,
'configuration/typoscript/default/',
'Default configuration of Extension XY');
?>
Um "adhoc snippets" anzulegen, wählt man folgende Methode:
In seinem Extension-Verzeichnis (Root) legt man folgende Dateien an:
ext_typoscript_setup.txt und ext_typoscript_constants.txt.
Diese Dateien werden dann jederzeit automatisch im System geladen.
Der Unterschied zwischen den beiden Einbindungsvarianten liegt darin, dass beim Anlegen von Pfaden in der Datenbank-Tabelle die Konfiguration nur dort geladen wird, wo man sie auch bewusst einbindet. Bei der adhoc-Methode dagegen ist die Konfiguration immer in der gesamten TYPO3-Installation verfügbar.
- Hinzufügen von Backend skins
In der Datenbank-(System-) Extension "ext_tables.php" fügt man die passenden PHP-Befehle ein:
Um beispielsweise ein Logo im Backend-Skin neu zu definieren, trägt man folgenden Code ein:
<?php
$TBE_STYLES['logo'] = t3lib_extMgm::extRelPath($_EXTKEY)
. 'img/aoe_backend_logo.gif';
?>
Um neue Style-Anweisungen im Backend hinzuzufügen, verwendet man diesen Befehl:
<?php
$TBE_STYLES['inDocStyles_TBEstyle'] .= "\n" . $styles;
?>
- Hinzufügen von Klick-menu Items über die "ext_tables.php" (Zur Verwendung bei kontext- sensitiven Menus)
<?php
$GLOBALS['TBE_MODULES_EXT']['xMOD_alt_clickmenu']
['extendCMclasses'][] = array (
'name' => 'tx_aoepublish_cm1',
'path' => t3lib_extMgm::extPath($_EXTKEY) . `
'class.tx_aoepublish_cm1.php'
);
?>
- Hinzufügen von Page und User-Konfigurationen mit TSconfig
Mittels des TypoScript-Wizards können die Konfigurationseinstellungen des TYPO3-Kerns einfach geändert werden. So lassen sich mit den TSconfig-Befehlen die Seiteneigenschaften des Backend-Moduls und die Benutzerrechte für Gruppen oder einzelne Nutzer definieren.
Hierzu nutzt man die localconf.php des Extension Managers (t3lib_extMgm) und ändert mit Hilfe des Befehls "addPageTSConfig" beispielsweise einfach die Seitenanzahl im Backend-Modul. Über das Modul Tools>Benutzer/Administrator können die individuellen Nutzer-Konfigurationen im Bereich "TSConfig" eingesehen und editiert werden.
Ein Beispiel dafür wäre:
<?php
t3lib_extMgm::addUserTSConfig ('
options.saveDocNew {
tx_aoetirepresenter_property = 1
}
');
?>
- Erweiterung jeder Klasse im System mit XCLASS(es)
Bei der Programmierung von Extensions oder bei Core-Änderungen bietet TYPO3 eine unkomplizierte Möglichkeit zur Änderung oder Ergänzung von verwendeten PHP-Klassen an. Wenn man diese Änderungen im Core selbst durchführen würde, sind diese im Falle eines Updates verloren. Zudem ist eine Erweiterung auch dann nicht sinnvoll, wenn mehrere Projekte gleichzeitig auf den Core zugreifen. Deshalb wurde die PHP-Anweisung "class...extends" geschaffen. In TYPO3 werden erweiterte Klassen als XCLASS(es) bezeichnet.
Ein Beispiel für die Bereitstellung einer XCLASS in einer vorhandenen Extension-Klasse würde man beispielsweise wie folgt definieren:
<?php
if (defined('TYPO3_MODE') &&
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']
['ext/aoe_tirepresenter/controller/class
.tx_aoetirepresenter_controller_tireFinder.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]
['XCLASS']['ext/aoe_tirepresenter/controller
/class.tx_aoetirepresenter_
controller_tireFinder.php']);
}
?>
Das Registrieren einer Klasse, die eine bereits vorhandene mittels XCLASS in der „ext_localconf.php“ erweitert, wird wie folgt realisiert:
<?php
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea
mod3/class.tx_rtehtmlarea_browse_links.php']
= t3lib_extMgm::extPath($_EXTKEY) .
'patch/4.1/
class.ux_tx_rtehtmlarea_browse_links.php';
?>
- Erweiterung jeder Klasse im System mit Hooks
Da jede Klasse durch die Verwendung von XCLASS(es) nur ein einziges Mal erweitert werden kann, sollte diese Programmiertechnik nur in lokalen Projekten eingesetzt werden. Bei Extensions, die veröffentlicht werden sollen oder bei Core-Änderungen, die viele Erweiterungen aufweisen, ist die "Hook"-Technik vorzuziehen.
Hooks erweitern Funktionen im Core oder in Extensions und führen an definierten Stellen im Quellcode mit ihnen verknüpfte, beliebig viele User-Funktionen durch.
Zunächst muss man sich einen Überblick über alle vorhandenen Hook-Schnittstellen verschaffen. Dazu benutzt man die folgende Extension:
http://typo3.org/extensions/repository/view/dmc_hooklist/current/
Einen Hook stellt man mit dem folgenden Code zur Verfügung:
<?php
// First prepare user defined objects (if any)
// for hooks which extend this function:
$hookObjectsArr = array();
if (is_array ($TYPO3_CONF_VARS
['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']
['processDatamapClass'])) {
foreach ($TYPO3_CONF_VARS['SC_OPTIONS']
['t3lib/class.t3lib_tcemain.php']
['processDatamapClass']
as $classRef) {
$hookObjectsArr[] = &t3lib_div::getUserObj
($classRef);
}
}
?>
Außerdem muss man den eingesetzten Hook dem TYPO3 Core auch bekannt machen. Das geschieht in der "ext_localconf.php" mit folgendem Befehl:
<?php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']
['t3lib/class.t3lib_tcemain.php']
'processDatamapClass']['exportchecker']
= 'EXT:aoe_exportchecker/controller
class.tx_aoeexportchecker_
exportCheckerHookController.php:
tx_aoeexportchecker_exportCheckerHookController';
?>
Die Beispiele zeigen, dass TYPO3 dem PHP-Entwickler eine Vielzahl von Möglichkeiten bietet, den T3-Core an seine Wünsche anzupassen oder Extensions zu optimieren.