Tipps und Tricks Filter

API Hooks für Module (Frontend)

Ein damals noch nicht dokumentierter API Hook ermöglicht es, dass ein Modul für das Frontend ein eigenes Javascript und eine eigene Stylesheet Datei für das Frontend bekommen kann. Dazu in die Modul- oder Contentelement Class folgendes einfügen:

$GLOBALS['TL_CSS'][] = 'path/to/my.css';
$GLOBALS['TL_JAVASCRIPT'][] = 'path/to/my.js';

$GLOBALS['TL_HEAD'][] = '<!--[if lte IE 7]><link rel="stylesheet" href="..." type="text/css" media="all" /><![endif]-->';

Mit der letzten Anweisung kann man so auch einen beliebigen Medientyp verwenden.

Ab Contao 2.9 gibt es auch die Möglichkeit über $GLOBALS['TL_MOOTOOLS '] ein Script ans Ende einer Seite einzubauen, hier wieder in der Art von $GLOBALS['TL_HEAD']:

$GLOBALS['TL_MOOTOOLS '][] = "<script type='text/javascript'>....  "

Statisches und asynchrones einbinden

Statisches einbinden bedeutet, das diese optional auch in die kombinierte JS/CSS-Datei eingefügt werden. Ab Contao 3.4 ist es auch möglich ein Javascript asynchon zu laden. Beispiele für Javascript:

// Normale Einbindung
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/script/script.js';

// Statische Einbindung
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/script/script.js|static';

// Asynchrones Laden
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/script/script.js|async';

API Hooks für Module (Backend)

Der Vollständigkeitshalber hier ein Auszug der config.php eines Moduls. Darin erkennbar wie man u.a. CSS und JavaScript einbindet. Letzteres kam erst später auf Wunsch hinzu.

$GLOBALS['BE_MOD']['content']['example'] = array
(
    'tables'     => array('tl_example'),
    'icon'       => 'system/modules/example/html/icon.gif',
    'stylesheet' => 'system/modules/example/html/style.css',
    'javascript' => 'system/modules/example/html/javascript.js'
);

Im Backend Modul selbst geht auch diese Angabe wie beim Frontend Modul:

$GLOBALS['TL_JAVASCRIPT'][] = 'path/to/my.js';

Was nicht geht ist die TL_HEAD Verwendung. Als Alternative bietet sich da die Art der Einbindung von Mootools Scripten an:

$GLOBALS['TL_MOOTOOLS '][] = "<script type='text/javascript'>....  "

Das Script würde dann am Ende der Seite eingebunden werden wie bei Mootools Scripten üblich. Für das Backend geht das allerdings erst ab Contao 2.10.