Codelistings
Seite 37/38
Installation unter Linux mit einem Paket Ihrer Wahl
user@domain:~$ cd /var/www user@domain:/var/www$ wget [URL zum TYPO3-Kern] user@domain:/var/www$ wget [URL zum dummy-Paket] user@domain:/var/www$ tar xfz typo3_src-X.X.tar.gz user@domain:/var/www$ tar xfz dummy-X.X.tar.gz user@domain:/var/www$ mv dummy-X.X t3site user@domain:/var/www$ chgrp -R www-data typo3_src-X.X/ t3site/ user@domain:/var/www$ chmod -R g+w,o-rwx typo3_src-X.X/ t3site/ user@domain:/var/www$ rm typo3_src-X.X.tar.gz user@domain:/var/www$ rm dummy-X.X.tar.gz
Seite 39
Benutzer des Webservers herausfinden
<?php passthru("whoami"); ?>
Seite 46/47
Installation über Absetzen von Systemkommandos mittels PHP
<?php //~ Geben Sie hier den Namen Ihres Projektes an. $project = 't3site'; //~ Geben Sie hier den sf.net Mirrors an. Z.B.: mesh, switch, ovh etc. $mirror = 'mesh'; //~ Geben Sie hier die gewünschte Version an $version = '4.0'; //~ --- ENDE DER KONFIGURATION --- //~ Benutzereingaben sichern $project = escapeshellarg(escapeshellcmd($project)); $mirror = escapeshellcmd($mirror); //~ Zu ladende Dateien definieren. $files = array( 'dummy' => 'dummy-'.$version, 'src' => 'typo3_src-'.$version); //~ Endungen der zu ladenden Dateien definieren $ext = '.tar.gz'; //~ URL zu sf.net mit dem gewählten Mirror erzeugen $uri = "http://$mirror.dl.sourceforge.net/sourceforge/typo3/"; //~ Fehler umleiten. Wichtig: String beginnt mit Leerzeichen $stderr = ' 2>&1'; //~ Trenner zwischen den verschiedenen Ausgaben $divider= str_pad('',100,'-')."\n"; //~ Ausgabe von der Kommandozeile kommt als Plain-Text. header('Content-Type: text/plain'); foreach($files as $file) { //~ Download. Wiederaufnehmen (-c) und mehrfach versuchen (--tries=5) system('wget -c --tries=5 '.escapeshellarg($uri.$file.$ext).$stderr); echo $divider; //~ Datei schreibbar für alle machen (o+rw). //~ Andernfalls wäre sie per FTP nicht mehr löschbar. system('chmod o+rw ./'.$file.$ext.$stderr); echo $divider; //~ extrahiere (-x) Dateien aus den mit //~ gzip-gepackten (-z) Archiven (-f) und //~ liefere erweiterte Ausgabe (-v). system('tar -zxvf ./'.$file.$ext.$stderr); echo $divider; //~ Entpacktes Verzeichnis und Inhalt (-R) //~ lesbar und schreibbar für alle machen (o+rw). system('chmod o+rw -R ./'.$file.$stderr); echo $divider; } //~ dummy-$version in den gewünschten Namen ($project) umbenennen. system("mv ./{$files['dummy']} $project"); ?>
Seite 52-54
Ubuntu Komplett-Installationsanleitung
user@domain:~$ wget http://typo3.sunsite.dk/software/linux/graphicsmagick-X.X.X_i386-static-2.tar.gz user@domain:~$ tar xfz graphicsmagick-X.X.X_i386-static-2.tar.gz user@domain:~$ chmod 0755 graphicsmagick-X.X.X/bin/gm user@domain:~$ sudo mv graphicsmagick-X.X.X/ /usr/bin/graphicsmagick user@domain:~$ sudo mysqladmin -u root password geheim user@domain:~$ cd /etc/php5/apache2 user@domain:/etc/php5/apache2$ sudo cp php.ini php.ini~ user@domain:/etc/php5/apache2$ sudo gedit php.ini [...Änderungen an der php.ini vornehmen] user@domain:~$ sudo apache2ctl restart user@domain:~$ sudo su user@domain:~$ cd /var/www [...normale Installation...]
Seite 256
Seitenhintergrund abhängig vom Layout schwarz einfärben
[globalVar = TSFE:page|layout = 1] page.bodyTag = <body bgcolor="#000000"> [end]
Seite 257
Inhalt des Feldes newUntil verwenden und formatieren
temp.mindesthaltbarkeit = TEXT temp.mindesthaltbarkeit { // nur, wenn das Feld einen Eintrag enthält fieldRequired = newUntil field = newUntil strftime = bis %d.%m.%Y zum Verzehr geeignet }
Tag der Woche ausgeben (mit/ohne Lokalisierung)
// ohne Lokalisierung temp.zeita = TEXT temp.zeita.field = tstamp temp.zeita.date = l // mit Lokalisierung temp.zeitb = TEXT temp.zeitb.field = tstamp temp.zeitb.strftime = Heute haben wir %A
Seite 289/290
Inhaltselement "Table" benutzerdefiniert formatieren
/* Tabelle mit rotem Rand versehen */ table.contenttable-0 { border: 1px Solid red; } /* Hintergrund der Tabellenzeilen alternierend dunkelrot und grau einfärben */ table.contenttable tr.tr-even { background: crimson; } table.contenttable tr.tr-odd { background: gray; } /* Erste Zeile und erste Spalte der Tabelle dunkelrot einfärben */ table.contenttable tr.tr-0, table.contenttable tr td.td-0 { background: crimson; } /* Letzte Zeile und letzte Spalte der Tabelle dunkelrot einfärben */ table.contenttable tr.tr-last, table.contenttable tr td.td-last { background: crimson; }
Seite 296
Beispiel eines Kontaktformulars
Name: | *name=input,40,40 | [Name oder Firma] E-Mail: | *email=input,40 Adresse: | address=textarea,40,10 Kontaktaufnahme: | *contact_by=radio | E-Mail=email, Rückruf=phon Produkt: | *product=select,1 | Bitte wählen=, A, B, C Datei: | attachment=file Datenspeicherung: | save=check | 1 | formtype_mail=submit | Abschicken | html_enabled=hidden | 1 | subject=hidden | Nachricht über Webseite
Seite 316
Benutzerdef. Fkt.: Name des angemeldeten Benutzers ausgeben
<?php function user_print_name() { $TSconfig = $GLOBALS["TSFE"]->fe_user->getUserTSconf(); if (!empty($TSconfig["user."]["printName"])) { return $GLOBALS["TSFE"]->fe_user->user["name"]; } } ?>
Seite 317
Benutzerdefinierte Funktion (Seite 316) laden und ausführen
temp.userName = USER_INT temp.userName { includeLibs = fileadmin/scripts/user_print_name.inc.php userFunc = user_print_name }
Seite 338
Standardsprache auf Deutsch (Deutschland) festlegen
config { sys_language_uid = 0 language = de locale_all = german htmlTag_langKey = de-DE }
Seite 347
Konfiguration für Formatierung
//~ Definition der zur Auswahl stehenden Klassen //~ Diese müssen auch in der Stylesheet-Datei existieren RTE.classes { wichtig { //~ Name, der die Klasse im Auswahlfeld repräsentiert name = Wichtig //~ Anzeige der Klasse im Dropdown value = border: 1px Solid red; } } //~ Konfiguration des RTE RTE.default { //~ Stylesheet-Datei, die die Klassendefinitionen enthält contentCSS = fileadmin/test.css //~ Klassen, die in der Datenbank gespeichert werden dürfen proc.allowedClasses = wichtig //~ Klassen, die bei Absätzen zur Verfügung stehen classesParagraph = wichtig }
Inhalt von fileadmin/test.css
p.wichtig { border: 1px Solid red; }
Seite 348
Konfiguration für Formatierung
//~ Definition der zur Auswahl stehenden Klassen //~ Diese müssen auch in der Stylesheet-Datei existieren RTE.classes { beispiel { //~ Name, der die Klasse im Auswahlfeld repräsentiert name = Beispiel //~ Anzeige der Klasse im Dropdown value = color: blue; } } //~ Konfiguration des RTE RTE.default { //~ Stylesheet-Datei, die die Klassendefinitionen enthält contentCSS = fileadmin/test.css //~ Klassen, die in der Datenbank gespeichert werden dürfen proc.allowedClasses = beispiel //~ Klassen, die bei Absätzen zur Verfügung stehen classesCharacter = beispiel }
Inhalt von fileadmin/test.css
span.beispiel { color: blue; }
Seite 359/360
Benutzerdefinierte Elemente im RTE verwenden
RTE.default.userElements { 10 = Verschiedenes 10 { 1 = TYPO3 Logo 1.description = Das TYPO3 Logo wird eingefügt. 1.content = <img src="###_URL###typo3/gfx/loginlogo_transp.gif"> 2 = Text hochstellen 2.description = Markierter Text wird als Code ausgezeichnet. 2.mode = wrap 2.content = <code>|</code> 3 = In Großbuchstaben umwandeln 3.description = Markierter Text wird in GB umgewandelt. 3.mode = processor 3.submitToScript = fileadmin/toUpper.php } }
Inhalt von fileadmin/toUpper.php
<?php ?>
Seite 367
Admin Panel konfigurieren
admPanel { enable.edit = 1 module.edit.forceDisplayFieldIcons = 1 module.edit.forceDisplayIcons = 1 hide = 1 }
Seite 381
Schritt 4, Formular
Name: |*name=input,40 |Geben Sie Ihren Namen ein! E-Mail: |email=input,40 Nachricht: |*message=textarea,30,5 |Geben Sie Ihre Nachricht ein! |formtype_mail=submit |Abschicken |subject=hidden |Nachricht von der Webseite XY
Seite 383
Beispiel-CSS für das im Kapitel gezeigte Formular
fieldset.csc-mailform { border: 0; } fieldset.csc-mailform .csc-mailform-field label { display: block; font-weight: bold; } fieldset.csc-mailform #mailformname, fieldset.csc-mailform #mailformmessage { color: red; }
Seite 404
Inhalt von fileadmin/test.css
* { font-family: sans-serif; } * BODY { background-color: Silver; } * A { color: Red; } * A:hover { font-weight: bold; }
Seite 405
CSS Editor Konfiguration
CSS_editor = Template Stile CSS_editor.ch { /* Kindelemente */ alle = Alle Elemente alle.selector = * alle.attribs = font-family,font-size,color alle.example = Dies ist Beispieltext alle.ch { /* Kindelemente */ koerper = Seitenkörper koerper.selector = BODY koerper.attribs = background-color koerper.example = Hintergrundfarbe-Test links = Links links.selector = A links.attribs = LINKS links.example = Hallo <a href= "# ">Welt</a> links.exampleStop = 1 links.ch { /* Kindelemente */ ueber = Über dem Link ueber.selector = +:hover ueber.attribs = LINKS,font-weight } } }
Seite 409
Marker-Beispiel
<html> <body> <h1>###SEITENTITEL###</h1> <!-- ###INHALT### begin --> Dieser Bereich wird komplett ersetzt. Anders als der Seitentitel, dürfen diese Marker daher in Kommentaren stehen. <!-- ###INHALT### end --> </body> </html>
Seite 410
Inhalt von fileadmin/template.html (I)
<html> <head> <title>Template XYZ</title> </head> <body> <!-- ###MY_BODY### begin --> <h1>###MY_HEADLINE###</h1> <div class="content"> <!-- ###MY_CONTENT### begin --> Inhalt Inhalt Inhalt Inhalt Inhalt Inhalt <!-- ###MY_CONTENT### end --> </div> <!-- ###MY_BODY### end --> </body> </html>
Seite 411
Verarbeitung des Templates fileadmin/template.html (I)
temp.myTemplate = TEMPLATE temp.myTemplate { template = FILE template.file = fileadmin/template.html workOnSubpart = MY_BODY marks { MY_HEADLINE = TEXT MY_HEADLINE.field = title } subparts { MY_CONTENT < styles.content.get } } page.10 < temp.myTemplate
Seite 414
Inhalt von fileadmin/template.html (II)
<html> <head> <title>Template</title> <meta name="author" content="Joscha Feth"> </head> <body> <div class="headline">Titel</div> <div class="menu">Menü</div> <div class="content">Inhalt</div> </body> </html>
Seite 414/415
Verarbeitung des Templates fileadmin/template.html (II)
plugin.tx_automaketemplate_pi1 { content = FILE content.file = fileadmin/template.html relPathPrefix = fileadmin/ elements { BODY.all = 1 BODY.all.subpartMarker = DOCUMENT_BODY HEAD.all = 1 HEAD.all.subpartMarker = DOCUMENT_HEADER HEAD.rmTagSections = title DIV.all = 1 } }
Seite 417
Erweitertes Template-Parsing
# temporäres Template-Objekt für den body-Bereich erstellen temp.myTemplate = TEMPLATE temp.myTemplate { # Das Template-Objekt mit Template Code füllen template =< plugin.tx_automaketemplate_pi1 # nur auf dem Bereich DOCUMENT_BODY arbeiten workOnSubpart = DOCUMENT_BODY subparts { # Den headline-Bereich durch ein TEXT-Objekt ersetzen headline = TEXT # Das TEXT-Objekt soll den Seitentitel beinhalten headline.field = title # Den menu-Bereich durch ein HMENU-Objekt ersetzen menu = HMENU menu.1 = TMENU menu.1.NO = 1 # Inhaltselemente in den content-Bereich einfügen content < styles.content.get } } # temporäres Template-Objekt für den head-Bereich erstellen temp.headTemplate = TEMPLATE temp.headTemplate { # Das Template-Objekt mit Template Code füllen template =< plugin.tx_automaketemplate_pi1 # nur auf dem Bereich DOCUMENT_HEADER arbeiten workOnSubpart = DOCUMENT_HEADER } # PAGE-Objekt erstellen page = PAGE # Temporäres Template-Objekt des body-Bereichs in <body>einfügen page.10 < temp.myTemplate # Temporäres Template-Objekt des head-Bereichs in <head> einfügen page.headerData.10 < temp.headTemplate
Seite 422
Inhalt von fileadmin/templates/template.html
<html> <head> <title>TemplaVoila Template</title> <meta name="author" content="Joscha Feth"> </head> <body> <div id="menu" class="menu"> <div class="act"><a href="#">A</a></div> <div class="no"><a href="#">B</a></div> <div class="no"><a href="#">C</a></div> </div> <div id="content" class="content">Inhalt</div> </body> </html>
Seite 436
Inhalt von fileadmin/templates/tld.domain/main.html
<html> <head> <title>Example</title> <link rel="stylesheet" type="text/css" href="styles/web.css"> <script src="scripts/test.js" type="text/javascript"></script> </head> <body onload="test();"> <div id="n" class="navigation"> Navigation </div> <div class="cbody"> <div id="h" class="header">Header</div> <div id="c" class="content">Inhalt</div> <div class="footer"> Last change: <span id="d" class="yyyy_mm_dd">YYYY-MM-DD</span> – <a id="p" href="#">Print this page</a> </div> </div> </body> </html>
Seite 437
Inhalt von fileadmin/templates/tld.domain/styles/web.css
div { border: 1px Dashed grey; margin: 5px; } div.navigation, div.cbody { float: left; }
Inhalt von fileadmin/templates/tld.domain/scripts/test.js
function test() { alert("Hallo Welt!"); }
Seite 458
TemplaVoilà-Objekt auf der Seite einbinden
page = PAGE page.10 = USER page.10.userFunc = tx_templavoila_pi1->main_page
Seite 459
Menü-Code für Feld field_navigation
temp.myNavigation = HMENU temp.myNavigation.1 = TMENU temp.myNavigation.1 { NO = 1 NO.after = <br /> }
Seite 463
Local Processing für Feld field_header
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3DataStructure> <ROOT type="array"> <el type="array"> <field_header type="array"> <tx_templavoila type="array"> <TypoScript> 10 = IMAGE 10.file = GIFBUILDER 10.file { XY = 200,20 10 = TEXT 10.text.current = 1 10.text.ifEmpty = TEXT 10.text.ifEmpty.data = page:subtitle // page:title 10.text.case = upper 10.niceText = 1 10.offset = 0,14 10.fontSize = 14 } </TypoScript> </tx_templavoila> </field_header> </el> </ROOT> </T3DataStructure>
Seite 470
Datum der letzten Änderung der Seite
temp.lastChange = TEXT temp.lastChange { data = register : SYS_LASTCHANGED date = Y-m-d }
Seite 472
Link zur Druckversion generieren
temp.printLink = TEXT temp.printLink.typolink { parameter.data = page:uid returnLast = url additionalParams = &print=1 additionalParams.htmlSpecialChars = 1 } [globalVar = GP:print > 0] temp.printLink.typolink.additionalParams > [global]
Seite 474
Inhalt von fileadmin/templates/tld.domain/print.html
<html> <head> <title>Example (Print)</title> </head> <body onload="print();"> <div class="header">Header</div> <hr/> <div class="content">Inhalt</div> <hr/> <div class="footer"> Last change: <span class="yyyy_mm_dd">YYYY-MM-DD</span> - <a href="#">Back to web version</a> </div> </body> </html>
Seite 475
Local Processing für Feld field_header (Print-Version)
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3DataStructure> <ROOT type="array"> <el type="array"> <field_header type="array"> <tx_templavoila type="array"> <TypoScript> <![CDATA[ 10 = TEXT 10 { current = 1 ifEmpty = TEXT ifEmpty.data = page:subtitle // page:title case = upper wrap = <h1>|</h1> } ]]> </TypoScript> </tx_templavoila> </field_header> </el> </ROOT> </T3DataStructure>
Seite 478
Inhalt von fileadmin/templates/tld.domain/flexgrid.html