[Typo3-german] HOWTO .js JavaScript-Dateien als Template-Resources erlauben

Johannes Vockeroth jv525052 at inf.tu-dresden.de
Tue Aug 30 19:41:22 CEST 2005


Boah, was für eine Geburt, aber ich habe es doch irgendwie herausgefunden:

Ich fand es immer blöd, dass sich JavaScript-Dateien nicht so einfach 
nutzen lassen wie CSS-Stylesheets. Für das Einbinden ins TypoScript 
vermisse ich z.B. neben page.includeCSS auch page.includeJS. Als 
Workaround funktioniert es ja recht einfach, diese mit page.headerData 
direkt als HTML einzubinden. z.B:

page.headerData.10 = TEXT
page.headerData.10.value = <script language="JavaScript" 
type="text/javascript" src="fileadmin/template/meinJScript.js"></script>

Zweites Problem. Im Template-Modul lassen sich prima einfach CSS und 
andere Dateien zu den Resourcen hochladen oder neu erstellen. So habe 
ich all meine Dateien für das Template fein säuberlich direkt beim 
Template (bzw. im uploads/tf-Ordner). Leider lassen sich JS-Dateien 
weder hochladen, noch erstellen oder bearbeiten. Wie im Beispiel muss 
man meinJScript.js dann irgendwo im fileadmin ablegen (und beim Export 
der Seite vergessen bzw. nicht wiederfinden)

Deshalb habe ich nach einer Möglichkeit gesucht, die Liste der erlaubten 
Erweiterungen zu erweitern - gar nicht so einfach. Aber Schlussendlich 
kann ich jetzt .JS-Dateien hochladen, erstellen und bearbeiten.

Die Möglichkeit die Dateien hochzuladen lässt sich am einfachsten und 
saubersten schaffen:

Im Konfigurations-Modul findet man im Typo3-Configuration-Array TCA 
(tables.php) den Eintrag
$TCA['sys_template']['columns']['resources']['config']['allowed'] = 
'gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai,html,htm,ttf,pfb,pfm,txt,css,tmpl,inc,ico';

der soll um den Wert "js" erweitert werden. Dafür bearbeitet man die 
Datei typo3conf/extTables.php und fügt folgende Zeile ein:
$GLOBALS['TCA']['sys_template']['columns']['resources']['config']['allowed'] 
= 
'gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai,html,htm,ttf,pfb,pfm,txt,css,tmpl,inc,ico,js';

Falls extTables.php noch komplett auskommentiert ist, muss sie, wie 
darin beschrieben, noch von der typo3conf/localconf.php eingebunden 
werden, indem die Zeile
$typo_db_extTableDef_script = 'extTables.php';  
angehängt wird.

Damit ist es nun möglich, auch JS-Dateien im Template-Modul hochzuladen. 
Man kann sie aber weder bearbeiten noch erstellen. Das liegt daran, weil 
"irgendjemand" quick'n'dirty die Variable
$textExtensions = "html,htm,txt,css,tmpl,inc";  direkt im Quellcode 
definiert hat.

Also sollte das gleich verbessert werden und in der TCA ein neuer 
Eintrag für erlaubte Text-Erweiterungen erstellt werden, also in die 
typo3conf/extTables.php insgesamt:
$GLOBALS['TCA']['sys_template']['columns']['resources']['config']['allowed'] 
= 
'gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai,html,htm,ttf,pfb,pfm,txt,css,tmpl,inc,ico,js';
$GLOBALS['TCA']['sys_template']['columns']['resources']['config']['textExtensions'] 
= 'html,htm,txt,css,tmpl,inc,js';

Letztlich muss noch die Wurzel allen Übels bearbeitet werden, die Datei 
typo3/ext/tstemplate/ts/index.php. Dort findet sich auch die böse Zeile 
$textExtensions = "html,htm,txt,css,tmpl,inc";, die aber erstmal so 
stehen bleiben kann, denn man überschreibt sie einfach in der darauf 
folgenden init()-Funktion, irgendwo hinter parent::init(); (Zeile 70) mit

$this->textExtensions = 
$TCA["sys_template"]["columns"]["resources"]["config"]["textExtensions"];

Fertig. Jetzt können JS-Dateien einfach mit im Template erstellt und 
bearbeitet werden. Und falls mal irgendwann eine Erweiterung dazu kommt, 
braucht nur noch die TCA entsprechend geändert werden.

Legt man jetzt eine Datei "meinJScript.js" an, muss diese im TypoScript 
dann mit
page.headerData.10.value = <script language="JavaScript" 
type="text/javascript" src="uploads/tf/meinJScript.js"></script>
eingebunden werden, sie liegt also in dem Pfad, der in der TCA als 
uploadfolder angegeben ist.

Ein Joker wie bei CSS-Dateien, also etwa meinJScript*.js funktioniert so 
natürlich noch nicht. Auch die Reihenfolge von möglichen Duplikaten 
spielt noch keine Rolle. Das kommt dann hoffentlich mit page.includeJS :)

Ich hoffe, das nutzt jetzt jemanden etwas. Vielleicht gibt es ja auch 
Leute die so lange danach suchen mussten wie ich. Ich freue mich dann 
aber immer, wenn ich solche Texte im Listenarchiv finde. Und wenn jetzt 
noch jemand darauf antwortet, damit der Text nicht durch den "Only 
answered or rated posts."-Filter fliegt, würde ich mich freuen. 
Natürlich auch darüber, wenn jemand das mal ausprobiert und ggf. berichtigt.

Johannes





More information about the TYPO3-german mailing list