Dokumentenkorb
  • Der Dokumentenkorb ist leer.

    Um ein Dokument in den Korb zu legen können Sie es per Drag'n'Drop von der Seite in den Korb ziehen

Systemfunktionen direkt im Core anpassen

TYPO3 besteht aus einem Systemkern, dem T3 Core, und den Erweiterungen, den sogenannten Extensions. Der Core beinhaltet bereits von Haus aus grundlegende Funktionen zur Datenbank-, Datei und Benutzerverwaltung, die man nutzen kann, um umfangreiche Websiten aufzusetzen, zu editieren und zu verwalten. Wie nahezu jede Funktion in TYPO3 können auch diese - genug Fachwissen vorausgesetzt - beliebig angepasst werden. Dazu stellt TYPO3 Programmierschnittstellen zur Verfügung - die Core APIs. Diese sind in den Systemextensions (Core Extensions) angelegt und können dort bearbeitet werden. Die Core APIs bieten so umfangreiche Möglichkeiten auch die Systemeigenschaften des TYPO3-Frameworks an die konkreten Projektanforderungen anzupassen. 

Die nachfolgende Liste bietet einen kleinen Überblick, welche System-Funktionen über die verschiedenen Core APIs veränderbar sind.

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.

 

Wer durch die oben angeführten Beispiele auf den Geschmack gekommen ist, seine eigenen Anpassungen zu realisieren, findet hier weitere Informationen
Core Documentation

zu den TYPO3 Core APIs in der umfangreichen englischsprachigen Dokumentation

TYPO3.org

zu dem Thema "PHP-Klassen in TYPO3 erweitern" finden sich hier weitere passenden Antworten

Case Study

congstar GmbH

  • 1Hochflexibles Templating System für maximale Designflexibilität.
  • 2Abstraktion der Shop Logik zur direkten Verzahnung mit dem CMS.
  • 3Umfangreiche Google Maps Integration im congstar Aufladefinder.

Lesen Sie die Case Study:

Besucher Historie