1 Überblick

TYPO3 unterscheidet sich in einem Punkt besonders von vielen anderen Content Management Systemen auf dem Markt. Es ist fast grenzenlos erweiterbar - an jeder Stelle des Systems. Das macht es möglich, nur mit wenigen Handgriffen, sowohl das Kern-System, als auch die eingesetzten Extensions um neue Funktionalitäten zu erweitern.

2 Extensions

Extensions fügen dem TYPO3-Kernsystem neue Funktionen hinzu, wie zum Beispiel die Fähigkeit News anzuzeigen. Allerdings stößt man dabei manchmal an die Grenzen der Extensions, da sie nicht immer genau die gewünschten Anforderungen abdecken. Daher ist es möglich eine eigene Extension zu schreiben. Die Erweiterung "kickstarter" dient dabei als Assistent und hilft auf den ersten Schritten zum fertigen Frontend-Plugin oder Backend-Modul.

Da der Weg zur ersten Extension nicht ganz einfach ist und TYPO3 viele Funktionen bereitstellt, von denen Sie dabei profitieren können, finden Sie hier eine detaillierte Anleitung zum Thema Extension-Entwicklung.

2.1 Frontend Plugins

Ein Frontend-Plugin wird fast immer von der PHP-Klasse "tslib_pibase" abgeleitet. Diese Klasse enthält grundlegende Methoden um Label in verschiedenen Sprachen zu laden, Typolinks zu erstellen und vieles mehr.

Abgerundet wird die Funktionalität durch die statischen Methoden der Klasse "t3lib_div", welche Sie sich als Schweizer Taschenmesser von TYPO3 vorstellen können. Dies ist eine der ältesten Klassen von TYPO3 und enthält alle Methoden, die nicht unbedingt TYPO3-spezifisch sind.

Geladen wird ein Frontend-Plugin mit Hilfe der Klasse "t3lib_extMgm". Sie stellt die erforderlichen Methoden bereit um statische TypoScript-Dateien zu laden, Flexforms oder TCA-Felder zu definieren, oder um das Plugin zu Registrieren.

Initialisiert wird das Plugin mit folgendem Aufruf in der Datei "ext_tables.php" im Extension-Verzeichnis:

<?php
  t3lib_extMgm::addPlugin(
    array(
      'LLL:EXT:myplugin/locallang_db.xml:tt_content.list_type_pi1',
      $_EXTKEY.'_pi1'
    ),
    'list_type'
  );
?>

2.2 Backend Module

Die Klasse "t3lib_BEfunc" enthält eine Sammlung vieler wichtiger Methoden für das TYPO3-Backend. Für Datenbankoperationen steht zudem noch die Klasse "t3lib_DB" zur Verfügung.

Das fertige Modul wird anschließend mit der Klasse "t3lib_extMgm" geladen. Die Backend-Extension wird folgendermaßen initialisiert:

<?php
  t3lib_extMgm::addModule(
    'web',
    'txmymoduleM1',
    '',
    t3lib_extMgm::extPath($_EXTKEY) . 'mod1/'
  );
?>

2.3 Table Configuration Array (TCA)

Beim TCA (Table Configuration Array) handelt es sich um das Herzstück von TYPO3. Er enthält den gesamten Aufbau der Datenbanktabellen, ihrer Beziehungen untereinander und Informationen über die Darstellung der Tabellenfelder in Backend-Formularen. Fast das gesamte Backend ist mit diesem Array verbunden. Selbst die Art und Weise, wie Seiten und Datensätze im Backend angezeigt werden, ist im TCA hinterlegt.

Mit Extensions kann man diesen TCA erweitern und manipulieren. Dies geschieht über die zwei Dateien "ext_tables.sql" und "ext_tables.php". Der Extension-Kickstarter erzeugt zudem die Datei "tca.php", welche die gesamte Beschreibung der einzelnen Tabellenfelder aus der "ext_tables.php" auslagert. Allerdings macht dieses Vorgehen Probleme beim Erweitern der Extension durch andere Extensions.

Benötigt eine Extension eigene Datenbank-Tabellen, muss lediglich das passende SQL-Statement in der Datei "ext_tables.sql" erstellt werden. TYPO3 parst diese Datei und erzeugt die Tabellen automatisch. Auch bestehende Tabellen können auf diese Weise erweitert werden. Mit folgendem Statement wird zum Beispiel die Tabelle "tt_news" um das Feld "new_field" erweitert:

CREATE TABLE tt_news (
  new_field varchar(255) DEFAULT '' NOT NULL
);

Das neue Feld wird anschließend in der Datei "ext_tables.php" konfiguriert und dem TCA hinzugefügt:

<?php
  $fields = array(
    'new_field' => array(
      'exclude' => 0,
      'label' => 'LLL:EXT:' . $_EXTKEY . 'locallang_db.php:tt_news.new_field',
      'config' => array (
        'type' => 'input',
        'size' => 40,
        'max' => 255,
        'eval' => 'trim',
      )
    ),
  );

  t3lib_div::loadTCA('tt_news');
  t3lib_extMgm::addTCAcolumns('tt_news', $fields, 1);
?>

Beim Installieren der Extension wird der Benutzer gefragt, ob die Änderungen in der Datenbank vorgenommen werden sollen. In der Datei "ext_tables_static+adt.sql" können Inhalte für die neuen Tabellen definiert werden. Auch hier gilt wieder der SQL-Syntax. Die Inhalte werden anschließend auch beim Installieren erzeugt. Ein gutes Beispiel dafür ist die Extension "static_info_tables".

2.4 Statische TypoScript-Dateien

Einbinden eines statischen Templates

Sie können die Frontend-Ausgabe von TYPO3 auf zwei verschiedene Arten mit TypoScript beeinflussen:

  • TypoScript Setup
  • TypoScript Constants

Jede dieser Konfigurationen kann in eine statische Datei ausgelagert und in einer Extension abgelegt werden. Diese Dateien werden anschließend in der Datei "ext_tables.php" eingebunden.

Mit folgendem Aufruf werden die Dateien für TypoScript Setup und Constants wie in der Abbildung zu sehen für ein manuelles Einbinden bereitgestellt:

<?php
  t3lib_extMgm::addStaticFile(
    $_EXTKEY,
    'pi1/static/',
    'Default configuration for my extension'
  );
?>

Die Dateien müssen in dem angegebenen Verzeichnis liegen und wie folgt benannt werden:

  • setup.txt
  • constants.txt

Sollen die Dateien gleich beim Installieren der Extension geladen werden, müssen sie folgendermaßen benannt und einfach in das Hauptverzeichnis der Extension gelegt werden:

  • ext_typoscript_setup.txt
  • ext_typoscript_constants.txt

Die beiden Varianten unterscheiden sich lediglich dadurch, dass die Textdateien im Hauptverzeichnis automatisch für die gesamte TYPO3-Installation geladen werden, während die anderen nur dort im System geladen werden, wo sie im Backend aktiviert werden.

3 PHP-Scripte

Mit Hilfe von PHP-Scripten ist es recht einfach möglich, die Klassen des Kern-Systems zu erweitern. So kann man neue Methoden implementieren oder bestehende überschreiben. Die Erweiterung kann auf verschiedenen Wegen geschehen. Nachfolgend werden die drei wichtigsten vorgestellt.

3.1 Einsatz einer "userFunc"

Eine "userFunc" ist nichts anderes als eine Klasse mit einer Methode, welche direkt im TypoScript-Setup eingebunden wird. Dieser Methode werden grundsätzlich immer zwei Parameter übergeben. Einer mit dem derzeitigen Content und eine mit der Konfiguration der userFunc.

Der Aufruf einer userFunc im TypoScript sieht zum Beispiel folgendermaßen aus:

includeLibs.myClass = fileadmin/user_myClass.php

temp.myClass = USER
temp.myClass {
  userFunc = user_myClass->myMethod
  option1 = abc
  option2 = def
}

Im Quellcode der PHP-Datei würden zum Beispiel folgende Zeilen stehen:

<?php
  class user_myClass {
    public $cObj = NULL; // Reference to parent object - will be set automatically
   
    function myMethod($content, $conf) {
      return $content . $conf['option1'] . $conf['option2'];
    }
  }
?>

Hierbei zu beachten ist, welchen Rückgabewert die userFunc hat, wenn sie im TypoScript aufgerufen wurde. Oft ist es nur möglich, einen String zurück zu liefern - kein Array oder Objekt.

3.2 Hooks

Viele Entwickler implementieren in ihren Extensions sogenannte Hooks. Das sind ein paar Zeilen Code, die es ermöglichen, dass man die Funktionsweise der Extension mit eigenen PHP-Dateien erweitern kann. Auch im TYPO3-Kern, welcher zum größten Teil auch aus Extensions besteht, sind solche Hooks verbaut.

Ein Hook sieht zum Beispiel so aus (Datei: class.tslib_fe.php):

<?php
  // Hook for post-processing of page content cached/non-cached:
  if (is_array($this->TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-all'])) {
    $_params = array('pObj' => &$this);
    foreach($this->TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-all'] as $_funcRef) {
      t3lib_div::callUserFunction($_funcRef,$_params,$this);
    }
  }
?>

Als Faustregel kann man sagen, dass Hooks überall dort Sinn machen, wo wichtige Prozesse in der Extension ausgeführt werden. Außerdem vor und nach dem Laden von Konfigurationen, Templates, usw, sowie vor der Ausgabe des erzeugten Contents.

3.3 XCLASS-Methode

Jede Extension sollte eine Schnittstelle zum Überschreiben von vorhanden oder hinzufügen von neuen Methoden besitzen. Am Besten jede die gleiche. Daher sind in fast jeder Extension die folgenden Zeilen in der Plugin-Datei zu finden:

<?php
  if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/myext/pi1/class.tx_myext_pi1.php']) {
    include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/myext/pi1/class.tx_myext_pi1.php']);
  }
?>

Um auf die XCLASS-Methode zuzugreifen, müssen Sie folgende Zeilen in Ihre localconf.php schreiben:

<?php
  $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/myext/pi1/class.tx_myext_pi1.php'] =
    PATH_site . 'fileadmin/myhooks/class.ux_tx_myext_pi1.php'
?>

Nun legen Sie eine Datei mit folgendem Inhalt in dem Verzeichnis "fileadmin/myhooks/" an und nennen sie "class.ux_tx_myext_pi1.php". Wichtig ist, dass sowohl die Datei, als auch die enthaltene Klasse den Namen der zu erweiternden Klasse mit dem Prefix "ux_" bekommen.

<?php
  class ux_tx_myext_pi1 extends tx_myext_pi1 {

    public function myNewFunc() {
      // do something...
    }
  }
?>

Bitte implementieren Sie diese Zeilen in jeder Datei Ihres Plugins oder Moduls. Nur so können andere Entwickler auch dann von Ihrer Extension profitieren, wenn diese nicht alle gewünschten Anforderungen erfüllt.

4 Backend anpassen

Nachdem Sie nun alle Möglichkeiten zur Erweiterung von Extensions und dem TYPO3-Frontend kennen gelernt haben, widmen wir uns doch mal dem Backend. Denn auch die Verwaltungsoberfläche eines Internetauftritts sollte aufgeräumt und intuitiv sein, damit sich zum Beispiel Redakteure gut darin zurecht finden. Für diesen Zweck gibt es mehrere Möglichkeiten, das Backend anzupassen.

4.1 TSConfig

Anders als bei den unter Kapitel 2.4 genannten Möglichkeiten können Sie mit TypoScript in der Page bzw. User TSConfig in das Backend-Verhalten und -Aussehen eingreifen. Dazu legen Sie einfach die folgenden zwei Dateien an:

  • page.ts
  • user.ts

Diese Dateien werden anschließend mit folgendem Aufruf in der "ext_localconf.php" eingebunden:

<?php
  // Page TSConfig
  t3lib_extMgm::addPageTSConfig(
    '<INCLUDE_TYPOSCRIPT: source="FILE:EXT:' . $_EXTKEY . '/ts_config/page.ts">'
  );
 
  // User TSConfig
  t3lib_extMgm::addUserTSConfig(
    '<INCLUDE_TYPOSCRIPT: source="FILE:EXT:' . $_EXTKEY . '/ts_config/user.ts">'
  );
?>

Durch diesen Aufruf werden die Dateien automatisch systemweit geladen, wenn die Extension installiert wird. Dabei ist zu beachten, dass die User TSConfig hauptsächlich nur für die Benutzer- oder Gruppen-Konfiguration genutzt wird, während die Page TSConfig für die Konfiguration der Module oder des TCA zuständig ist.

4.2 Backend Theme

Um das Backend-Theme anzupassen reichen meist schon wenige Zeilen PHP-Code in der Datei "ext_tables.php" der eigenen Extension aus. So ist zum Beispiel mit folgendem Code möglich, das Login-Bild zu ändern. Existieren mehr als ein Bild in dem angegebenen Verzeichnis, so wird bei jedem Laden des Logins ein anderes angezeigt.

<?php
  $GLOBALS['TBE_STYLES']['loginBoxImage_rotationFolder'] = '../fileadmin/myloginpics/';
?>

Im Backend selbst kann zum Beispiel die Breite des Menüs auf der linken Seite mit folgendem Aufruf geändert werden:

<?php
  $TBE_STYLES['dims']['leftMenuFrameW'] = 200;
?>

Mehr dazu finden Sie in der Core Documentation.

Natürlich können Sie auch auf die CSS-Definitionen des Backends zugreifen. Dazu legen Sie eine neue Stylesheet-Datei an, in welcher sie die definierten Anweisungen überschreiben und fügen diese mit folgendem Aufruf dem Header der Backend-Seiten hinzu:

<?php
  $TBE_STYLES['styleSheetFile_post'] = t3lib_extMgm::extRelPath($_EXTKEY).'res/be.css';
?>

TYPO3 ist offen für jegliche Anpassung. Ob im Frontend oder im Backend, mit den oben genannten Möglichkeiten können Sie sich Ihr ganz persönliches TYPO3 entwickeln. Machen Sie davon Gebrauch...


Copyright © 2005 - 2010 | Speedprogs.de
RSS | Sitemap | Datenschutz | Seite als PDF herunterladen