To the menu


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
  1. <?php
  2. echo strtoupper($_POST['processContent']);
  3. ?>

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
<html>
	<head>
		<title>Example (FlexGrid)</title>
	</head>
	
	<body>
		<table class="flexsquare">
			<tr class="upper">
				<td class="left">Oben links</td>
				<td class="right">
					<img width="200" height="200"