<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.47.50.37</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.47.50.37"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/91.47.50.37"/>
	<updated>2026-05-06T16:45:36Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Update&amp;diff=1938</id>
		<title>Typo3 - Update</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Update&amp;diff=1938"/>
		<updated>2009-03-12T16:23:11Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: /* Mass Update Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update alter Typo3 Installationen (&amp;lt;V.3.8)==&lt;br /&gt;
Aus der Mailing Liste Östereich:&lt;br /&gt;
- der Core ist relativ easy (fast) immer zu upgraden (muesst&amp;#039; eigentlich von&lt;br /&gt;
v3.3 auch gehen ;-) )&lt;br /&gt;
- Achte immer auf installierte Extensions&lt;br /&gt;
* wenn etwas nicht geht, mal soweit wie moeglich alle Extensions wegschalten (nicht loeschen!).&lt;br /&gt;
* dann zuschalten; wenns dann hakt, dann sieht man gleich welche ext &amp;quot;boese&amp;quot; ist.&lt;br /&gt;
* dann diese ext updaten, wenns keine updates gibt, mal danach googlen.&lt;br /&gt;
* wenns dann net geht, debuggen..&lt;br /&gt;
&lt;br /&gt;
Weitere Probleme:&lt;br /&gt;
&lt;br /&gt;
Alte TS Templates arbeiten noch mit CSet und Content als default Template. Nach umstellen auf css-styled-content muß evt. einiges angepasst werden:&lt;br /&gt;
&lt;br /&gt;
== Update auf 4.1 ==&lt;br /&gt;
Unbedingt im Install Tool Compare ausführen und Tabellen aktualisieren. Sonst kann es Probleme mit verschiedenen Extensions geben (z.B. Login..)&lt;br /&gt;
&lt;br /&gt;
== Release Notes Version 4.1 ==&lt;br /&gt;
Die wichtigsten Neuerungen&lt;br /&gt;
* IRRE (Inline Relational Record Editing)&lt;br /&gt;
* AJAX Page and File Tree&lt;br /&gt;
* Clean-up functions (command line scripts)(Über Extension lowlevel)&lt;br /&gt;
* Improved Extension Manager (less memory, stored extension list)&lt;br /&gt;
* UTF-8 for filenames&lt;br /&gt;
* Backend &amp;quot;Who is online&amp;quot;&lt;br /&gt;
* Frontend &amp;quot;Stay logged in&amp;quot; (Konfiguration mit new login box)&lt;br /&gt;
* MySQL InnoDB (Wird automatisch bei Neuinstallation zur Verfügung gestellt, wenn es in mySQL aktiviert ist)&lt;br /&gt;
* Speed up Backend with .htaccess http://typo3.org/development/articles/release-notes-41/page/4/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles ändern der Tabellen auf InnoDB ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alter table cache_hash ENGINE = INNODB;&lt;br /&gt;
alter table cache_imagesizes ENGINE = INNODB;&lt;br /&gt;
alter table cache_md5params ENGINE = INNODB;&lt;br /&gt;
alter table cache_pages ENGINE = INNODB;&lt;br /&gt;
alter table cache_pagesection ENGINE = INNODB;&lt;br /&gt;
alter table cache_typo3temp_log ENGINE = INNODB;&lt;br /&gt;
alter table fe_sessions ENGINE = INNODB;&lt;br /&gt;
alter table fe_session_data ENGINE = INNODB;&lt;br /&gt;
alter table index_fulltext ENGINE = INNODB;&lt;br /&gt;
alter table index_grlist ENGINE = INNODB;&lt;br /&gt;
alter table index_phash ENGINE = INNODB;&lt;br /&gt;
alter table index_rel ENGINE = INNODB;&lt;br /&gt;
alter table index_section ENGINE = INNODB;&lt;br /&gt;
alter table index_stat_search ENGINE = INNODB;&lt;br /&gt;
alter table index_stat_word ENGINE = INNODB;&lt;br /&gt;
alter table index_words ENGINE = INNODB;&lt;br /&gt;
alter table sys_log ENGINE = INNODB;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generelle Informationen zum Update unter Linux ==&lt;br /&gt;
Quelle: typo3.net Mai 2006&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Typo3 ist normalerweise sehr einfach upzudaten - allerdings müssen ein paar Dinge beachtet werden, um updatefähig zu bleiben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Es dürfen keine Änderungen an dem Typo3-Sourcecode gemacht worden sein. Falls dieses doch gemacht wurde, müssen natürlich diese Änderungen erst in die neue Version eingearbeitet werden.&lt;br /&gt;
* Installierte Extensions sollten möglichst immer LOCAL installiert worden sein. So bleiben diese nach dem Tausch des Typo3-Sourcecodes unberührt und funktionieren nach dem Update (meist) wie gewohnt. Es gibt nur selten den Fall, daß eine Typo3-Version eine Funktion nicht mehr verwendet, die es in der alten Version noch gab.&lt;br /&gt;
* Wenn sie HTML-Templates von GLOBAL installierten Erweiterungen direkt im Extensionordner modifiziert haben sollten, müssen diese erst z.B. in den fileadmin kopiert werden. Dann können Sie den Pfad zu dieser Datei im TypoScript anpassen.&lt;br /&gt;
&lt;br /&gt;
Den Pfad finden Sie überigens mithilfe des TypoScript-Object-Browsers schnell. Meist ist er an der Stelle plugin.extensionname.templateFile zu finden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:T3_wichtigeVerzeichnisse.gif]]&lt;br /&gt;
&lt;br /&gt;
Einige der wichtigsten Verzeichnisse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Das Update für mittwaldmedien Kunden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Für unsere Kunden ist es nun besonders einfach, die vorhandene Installation auf die aktuelle Version zu bringen. Sie müssen sich nur auf der Webseite http://www.typo3server.com einloggen. Nach dem Login finden Sie ein Menü mit einem Link zu dem Typo3-Versionsmanager. Dort können Sie mit einem Klick Ihren Account auf die neue Version updaten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ToDo Versionsmanager für Geo-bit&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manuelles Update&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Für diejenigen, die dieses Update manuell machen wollen oder müssen, sind die folgenden Schrittenötig. Die Beispiele - vor allem die Pfade - müssen natürlich angepasst werden. Die Beispiele gehen davon aus, daß Sie eine Verzeichnisstruktur angelegt haben, die dem obigen Bild entspricht.&lt;br /&gt;
&lt;br /&gt;
1. Machen Sie zuerst eine Datensicherung von dem Typo3-Sourcen und Ihrem html-Ordner! Die Datenbank können Sie nun über diesen Befehl sichern:&lt;br /&gt;
&lt;br /&gt;
 mysqldump -u benutzername -p -B --add-drop-table datenbank &amp;gt; typo3DBSicherung.sql&lt;br /&gt;
&lt;br /&gt;
Notfalls könnte auch ein Dump mit phpMyAdmin erstellt werden.&lt;br /&gt;
&lt;br /&gt;
2. Verbinden Sie sich mit Ihrem Server über SSH.&lt;br /&gt;
&lt;br /&gt;
3. Wechseln Sie das Verzeichnis auf einer Ebene über dem Rootverzeichnis Ihres Webservers.&lt;br /&gt;
z.B.: cd /home/www/p1234/&lt;br /&gt;
&lt;br /&gt;
4. Laden Sie sich die neuen Typo3-Sourcen auf ihren Linuxrechner. Die aktuellen Sourcen finden Sie unter: http://typo3.org/download/packages/.&lt;br /&gt;
&lt;br /&gt;
Die benötigte Datei hat das Format typo3_src-3.x.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
      &lt;br /&gt;
 wget belnet.dl.sourceforge.net/sourceforge/typo3/typo3_src-3.7.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
5. Entpacken Sie die Datei mit dem Kommando:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 tar -xzvf typo3_src-3.x.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
6. Ändern Sie nun die Rechte so, wie der bisherige Typo3-Sourcecode-Ordner sie hatte.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 chown p1234.ftponly typo3_src-3.7.0 -R&lt;br /&gt;
&lt;br /&gt;
7. Entfernen Sie den alten symbolischen Link mit:&lt;br /&gt;
&lt;br /&gt;
 rm typo3_src&lt;br /&gt;
&lt;br /&gt;
8. Legen Sie nun einen neuen Link an mit:&lt;br /&gt;
&lt;br /&gt;
 ln -s typo3_src-3.x.x typo3_src&lt;br /&gt;
&lt;br /&gt;
(Die Versionsnummer müssen Sie natürlich noch anpassen.)&lt;br /&gt;
&lt;br /&gt;
9. Nun muss die Datenbank noch aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
Gehen Sie hierzu in das Typo3-Installtool und klicken Sie auf den 2. Menüpunkt Database Analyser. Mit einem Klick auf Compare werden die zu ändernden oder zu ergänzenden Datenbankfelder angezeigt. Mit einem Klick auf &amp;quot;Write to database&amp;quot; wird die Datenbank an die neue Typo3-Version angepasst.&lt;br /&gt;
&lt;br /&gt;
10. Loggen Sie sich nun als Admin im Backend an und löschen Sie alle Caches.&lt;br /&gt;
&lt;br /&gt;
== Neu in Version 4 ==&lt;br /&gt;
* Conditions mit AND und OR (|| &amp;amp;&amp;amp;)&lt;br /&gt;
&lt;br /&gt;
== Neu in 4.2 ==&lt;br /&gt;
Viele Usability Verbesserungen im Backend&lt;br /&gt;
== Update auf 4.2 ==&lt;br /&gt;
=== Extensions Updaten ===&lt;br /&gt;
* dam 1.0.11 ist nicht kompatibel Update auf min. 1.0.13&lt;br /&gt;
* date2cal auf &amp;gt;= 7.1.0&lt;br /&gt;
* Kickstarter 0.3.8 ist nicht kompatibel&lt;br /&gt;
* Developer tools gehen nicht mehr (wg. Frame oben)&lt;br /&gt;
&lt;br /&gt;
=== Ablauf ===&lt;br /&gt;
* Backend Benutzer sperren (only Admins)&lt;br /&gt;
* Sicherung der Datenbank&lt;br /&gt;
* neue Source + Symlink&lt;br /&gt;
* Update Wizard&lt;br /&gt;
* Compare&lt;br /&gt;
&lt;br /&gt;
=== Probleme ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DAM Upload geht für Benutzer&amp;#039;&amp;#039;&amp;#039; nicht mehr (Fehler Meta Daten können nicht geschrieben werden)&lt;br /&gt;
Beim neu indizieren geht dem dam der Media Ordner verloren. Er legt dann einen neuen an, in den er scheiben möchte. Die Benutzer sind abe noch auf den alten eingestellt. D.h. die Benutzergruppen m´üssen auf den neuen eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Im Dam stehen im IE7 die Benutzerwerkzeuge nicht zur verfügung (löschen etc.) nur der Stift ist noch da.&lt;br /&gt;
&lt;br /&gt;
Lösung: Das Problem ist das CSS für das Fenster. Es verdeckt die restlichen Symbole&lt;br /&gt;
Forum: 24.7.&lt;br /&gt;
&lt;br /&gt;
Ich hatte das gleiche Problem bis vor 5 Minuten auch,&lt;br /&gt;
gelöst habe ich es so:&lt;br /&gt;
- Datei: class.tx_dam_listbase.php im Ordner DAM\lib\&lt;br /&gt;
Unter der Zeile 256 (&amp;#039;itemTD&amp;#039; =&amp;gt; &amp;#039; class=&amp;quot;typo3-dblist-item&amp;quot;&amp;#039;,)&lt;br /&gt;
ist in 3 Werten als Breite 1% angegeben. Das auskommentieren&lt;br /&gt;
&lt;br /&gt;
- Datei: stylesheet.cdd in typo3_src\typo3\&lt;br /&gt;
table.typo3-dblist width: 98%; durch width: auto; ersetzen und in&lt;br /&gt;
table.typo3-dblist tr td {width: auto;} einsetzen,&lt;br /&gt;
&lt;br /&gt;
damit hats bei mir im IE 7, Firefox, safari für Win und Opera alles richtig angezeigt :-)&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, geholrfen zu haben,&lt;br /&gt;
Schmoozer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bug in Mount Points&lt;br /&gt;
&lt;br /&gt;
== Datenbank über Root Shell sichern (mysql backup) ==&lt;br /&gt;
&lt;br /&gt;
mysqldump -opt ...&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
Die häufigste Anwendung von mysqldump ist wahrscheinlich die &amp;#039;&amp;#039;&amp;#039;Erstellung eines Backups einer vollständigen Datenbank&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --opt db_name &amp;gt; backup-file.sql&lt;br /&gt;
&lt;br /&gt;
oder mit User und Passwortangabe:&lt;br /&gt;
 mysqldump -u meinDBUser -pGEHEIM db_name &amp;gt; backup.sql&lt;br /&gt;
&lt;br /&gt;
--opt ist in neueren MySQL Versionen Standardmäßig an deshalb lassen wir es mal weg.&lt;br /&gt;
&lt;br /&gt;
Die Speicherauszugsdatei können Sie wie folgt &amp;#039;&amp;#039;&amp;#039;wieder einspielen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysql db_name &amp;lt; backup-file.sql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oder aber so:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysql -e &amp;quot;source /path-to-backup/backup-file.sql&amp;quot; db_name&lt;br /&gt;
&lt;br /&gt;
mysqldump ist ferner sehr nützlich zum Ausfüllen von Datenbanken durch Kopieren von Daten von einem MySQL Server auf einen anderen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --opt db_name | mysql --host=remote_host -C db_name&lt;br /&gt;
&lt;br /&gt;
Sie können mit einem einzigen Befehl einen Speicherauszug mehrerer Datenbanken erstellen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --databases db_name1 [db_name2 ...] &amp;gt; my_databases.sql&lt;br /&gt;
&lt;br /&gt;
Um einen Speicherauszug aller Datenbanken zu erstellen, verwenden Sie die Option --all-databases:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Bei InnoDB-Tabellen bietet mysqldump die Möglichkeit, eine Online-Sicherung zu erstellen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --single-transaction &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Diese Datensicherung muss vor Beginn des Speicherauszugsvorgangs lediglich (mit FLUSH TABLES WITH READ LOCK) eine globale Lesesperre für alle Tabellen erwirken. Sobald diese Sperre aktiv ist, werden die Koordinaten des Binärlogs ausgelesen, und die Sperre wird aufgehoben. Wenn beim Absetzen der FLUSH-Anweisung gerade eine umfangreiche Änderungsanweisung ausgeführt wird, dann – und nur dann! – kann der MySQL Server stehen bleiben, bis diese lange Anweisung ausgeführt ist; danach ist der Server sperrfrei. Wenn die vom MySQL Server empfangenen Änderungsanweisungen (in Bezug auf ihre Ausführungsdauer) kurz sind, sollte die anfängliche Sperrperiode auch bei vielen Änderungen nicht spürbar sein.&lt;br /&gt;
&lt;br /&gt;
Bei der Point-in-Time-Wiederherstellung (die auch als „Roll-Forward“ bezeichnet wird, wenn Sie ein altes Backup wiederherstellen und die seitdem durchgeführten Änderungen neu aufspielen müssen) ist es häufig nützlich, das Binärlog zu rotieren (siehe Abschnitt 5.12.3, „Die binäre Update-Logdatei“) oder zumindest die Binärlogkoordinaten zu kennen, denen der Speicherauszug entspricht:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --master-data=2 &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Oder:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --flush-logs --master-data=2&lt;br /&gt;
              &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
== Mass Update Script ==&lt;br /&gt;
&lt;br /&gt;
Yesterday some updates came out for TYPO3. These updates fixed certain issues and we needed to update all of our excellent shared hosting environments.&lt;br /&gt;
&lt;br /&gt;
We already have a script (which is more elaborate now) that checks all our TYPO3 installations and sends the sysadmins a nice report about its findings. We use part of that report (list of paths to Document Roots) to feed the updater script.&lt;br /&gt;
&lt;br /&gt;
The TYPO3 update requires you to do the followi&lt;br /&gt;
&lt;br /&gt;
    * update encryption key&lt;br /&gt;
    * clear configuration cache&lt;br /&gt;
    * clear page cache&lt;br /&gt;
&lt;br /&gt;
We do not want to go into 200+ TYPO3 backends and do those tasks manually. We are lazy and we will write a script to automagically do the boring tasks for us.&lt;br /&gt;
&lt;br /&gt;
This script is not perfect but it works well on Debian systems. You can modify it to fit your needs. It was just a quick hack to ease the upgrade pain. Take care to switch the symlink part for upgrade runs of different versions of TYPO3.&lt;br /&gt;
&lt;br /&gt;
I am not responsible for any damage to your system that may occur to misuse of this script. Make sure you understand it before you run it. Run it with a single URI before attempting a whole ist of URI&amp;#039;s. &lt;br /&gt;
&lt;br /&gt;
Ein Massen Update Script von:&lt;br /&gt;
&lt;br /&gt;
http://typofree.org/article/archive/2009/january/title/typo3-mass-upgrade-script/&lt;br /&gt;
Zugriff am 12.3.2009&lt;br /&gt;
&lt;br /&gt;
http://typofree.org/article/archive/2009/january/title/typo3-mass-upgrade-script/&lt;br /&gt;
&lt;br /&gt;
TYPO3 mass update script&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
   2.&lt;br /&gt;
      binDir=/usr/bin/&lt;br /&gt;
   3.&lt;br /&gt;
      sleep=2&lt;br /&gt;
   4.&lt;br /&gt;
       &lt;br /&gt;
   5.&lt;br /&gt;
      pageCacheTables=(&lt;br /&gt;
   6.&lt;br /&gt;
              cache_pages&lt;br /&gt;
   7.&lt;br /&gt;
              cache_pagesection&lt;br /&gt;
   8.&lt;br /&gt;
      )&lt;br /&gt;
   9.&lt;br /&gt;
       &lt;br /&gt;
  10.&lt;br /&gt;
      sites=(&lt;br /&gt;
  11.&lt;br /&gt;
              /var/www/sites/live/www.somedomain.tld&lt;br /&gt;
  12.&lt;br /&gt;
              /var/www/sites/live/www.someotherdomain.tld&lt;br /&gt;
  13.&lt;br /&gt;
              /var/www/sites/live/www.yetsomeotherdomain.tld&lt;br /&gt;
  14.&lt;br /&gt;
      )&lt;br /&gt;
  15.&lt;br /&gt;
       &lt;br /&gt;
  16.&lt;br /&gt;
      len=${#sites[*]}&lt;br /&gt;
  17.&lt;br /&gt;
      pageCacheTablesLength=${#pageCacheTables[*]}&lt;br /&gt;
  18.&lt;br /&gt;
      i=0&lt;br /&gt;
  19.&lt;br /&gt;
      while [ $i -lt $len ]; do&lt;br /&gt;
  20.&lt;br /&gt;
              echo updating: ${sites[$i]}&lt;br /&gt;
  21.&lt;br /&gt;
                      cd ${sites[$i]}&lt;br /&gt;
  22.&lt;br /&gt;
                      rm typo3_src&lt;br /&gt;
  23.&lt;br /&gt;
                      ln -s ../../sources/typo3_src-4.2.5 typo3_src&lt;br /&gt;
  24.&lt;br /&gt;
       &lt;br /&gt;
  25.&lt;br /&gt;
              echo generating new key&lt;br /&gt;
  26.&lt;br /&gt;
                      k=0&lt;br /&gt;
  27.&lt;br /&gt;
                      key=&amp;#039;&amp;#039;&lt;br /&gt;
  28.&lt;br /&gt;
                      while [ $k -lt 96 ]; do&lt;br /&gt;
  29.&lt;br /&gt;
                              key=$key$(head -100 /dev/urandom | md5sum | cut -c1)&lt;br /&gt;
  30.&lt;br /&gt;
                              let k++&lt;br /&gt;
  31.&lt;br /&gt;
                      done&lt;br /&gt;
  32.&lt;br /&gt;
                      echo key: $key&lt;br /&gt;
  33.&lt;br /&gt;
                      sed -i &amp;quot;s/\(\$TYPO3_CONF_VARS\[&amp;#039;SYS&amp;#039;]\[&amp;#039;encryptionKey&amp;#039;] = \).*/\1&amp;#039;$key&amp;#039;;/g&amp;quot; typo3conf/localconf.php&lt;br /&gt;
  34.&lt;br /&gt;
             &lt;br /&gt;
  35.&lt;br /&gt;
              echo removing configuration cache&lt;br /&gt;
  36.&lt;br /&gt;
                      rm -f typo3conf/temp_CACHED*&lt;br /&gt;
  37.&lt;br /&gt;
       &lt;br /&gt;
  38.&lt;br /&gt;
              echo clearing page cache&lt;br /&gt;
  39.&lt;br /&gt;
                      # For some insane reason some values are enclosed in double qotes&lt;br /&gt;
  40.&lt;br /&gt;
                      database=$(grep &amp;quot;typo_db &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot; | grep &amp;#039;$typo_db =&amp;#039;)&lt;br /&gt;
  41.&lt;br /&gt;
                      if [ -z &amp;quot;$database&amp;quot; ] ; then&lt;br /&gt;
  42.&lt;br /&gt;
                              database=$(grep &amp;quot;typo_db &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot;)&lt;br /&gt;
  43.&lt;br /&gt;
                      else&lt;br /&gt;
  44.&lt;br /&gt;
                              database=$(grep &amp;quot;typo_db &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^\&amp;quot;]*\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/&amp;quot;)&lt;br /&gt;
  45.&lt;br /&gt;
                      fi&lt;br /&gt;
  46.&lt;br /&gt;
                      username=$(grep &amp;quot;typo_db_username &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot; | grep &amp;#039;$typo_db_username =&amp;#039;)&lt;br /&gt;
  47.&lt;br /&gt;
                      if [ -z &amp;quot;$username&amp;quot; ] ; then&lt;br /&gt;
  48.&lt;br /&gt;
                              username=$(grep &amp;quot;typo_db_username &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot;)&lt;br /&gt;
  49.&lt;br /&gt;
                      else&lt;br /&gt;
  50.&lt;br /&gt;
                              username=$(grep &amp;quot;typo_db_username &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^\&amp;quot;]*\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/&amp;quot;)&lt;br /&gt;
  51.&lt;br /&gt;
                      fi&lt;br /&gt;
  52.&lt;br /&gt;
                      password=$(grep &amp;quot;typo_db_password &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot; | grep &amp;#039;$typo_db_password =&amp;#039;)&lt;br /&gt;
  53.&lt;br /&gt;
                      if [ -z &amp;quot;$password&amp;quot; ] ; then&lt;br /&gt;
  54.&lt;br /&gt;
                              password=$(grep &amp;quot;typo_db_password &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot;)&lt;br /&gt;
  55.&lt;br /&gt;
                      else&lt;br /&gt;
  56.&lt;br /&gt;
                              password=$(grep &amp;quot;typo_db_password &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^\&amp;quot;]*\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/&amp;quot;)&lt;br /&gt;
  57.&lt;br /&gt;
                      fi&lt;br /&gt;
  58.&lt;br /&gt;
                      j=0&lt;br /&gt;
  59.&lt;br /&gt;
                      while [ $j -lt $pageCacheTablesLength ];&lt;br /&gt;
  60.&lt;br /&gt;
                      do&lt;br /&gt;
  61.&lt;br /&gt;
                              nice -n 19 ${binDir}mysql --batch -u$username -p&amp;quot;$password&amp;quot; -D$database -e &amp;quot;TRUNCATE ${pageCacheTables[$j]}&amp;quot;&lt;br /&gt;
  62.&lt;br /&gt;
                              nice -n 19 ${binDir}mysql --batch -u$username -p&amp;quot;$password&amp;quot; -D$database -e &amp;quot;ALTER TABLE ${pageCacheTables[$j]} auto_increment=1&amp;quot;&lt;br /&gt;
  63.&lt;br /&gt;
                              let j++&lt;br /&gt;
  64.&lt;br /&gt;
                      done&lt;br /&gt;
  65.&lt;br /&gt;
       &lt;br /&gt;
  66.&lt;br /&gt;
              echo &amp;quot;done! Sleeping $sleep seconds . . .&amp;quot;&lt;br /&gt;
  67.&lt;br /&gt;
                      sleep $sleep&lt;br /&gt;
  68.&lt;br /&gt;
       &lt;br /&gt;
  69.&lt;br /&gt;
              echo&lt;br /&gt;
  70.&lt;br /&gt;
        let i++&lt;br /&gt;
  71.&lt;br /&gt;
      done&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Update&amp;diff=1637</id>
		<title>Typo3 - Update</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Update&amp;diff=1637"/>
		<updated>2009-03-12T16:22:24Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: /* Mass Update Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update alter Typo3 Installationen (&amp;lt;V.3.8)==&lt;br /&gt;
Aus der Mailing Liste Östereich:&lt;br /&gt;
- der Core ist relativ easy (fast) immer zu upgraden (muesst&amp;#039; eigentlich von&lt;br /&gt;
v3.3 auch gehen ;-) )&lt;br /&gt;
- Achte immer auf installierte Extensions&lt;br /&gt;
* wenn etwas nicht geht, mal soweit wie moeglich alle Extensions wegschalten (nicht loeschen!).&lt;br /&gt;
* dann zuschalten; wenns dann hakt, dann sieht man gleich welche ext &amp;quot;boese&amp;quot; ist.&lt;br /&gt;
* dann diese ext updaten, wenns keine updates gibt, mal danach googlen.&lt;br /&gt;
* wenns dann net geht, debuggen..&lt;br /&gt;
&lt;br /&gt;
Weitere Probleme:&lt;br /&gt;
&lt;br /&gt;
Alte TS Templates arbeiten noch mit CSet und Content als default Template. Nach umstellen auf css-styled-content muß evt. einiges angepasst werden:&lt;br /&gt;
&lt;br /&gt;
== Update auf 4.1 ==&lt;br /&gt;
Unbedingt im Install Tool Compare ausführen und Tabellen aktualisieren. Sonst kann es Probleme mit verschiedenen Extensions geben (z.B. Login..)&lt;br /&gt;
&lt;br /&gt;
== Release Notes Version 4.1 ==&lt;br /&gt;
Die wichtigsten Neuerungen&lt;br /&gt;
* IRRE (Inline Relational Record Editing)&lt;br /&gt;
* AJAX Page and File Tree&lt;br /&gt;
* Clean-up functions (command line scripts)(Über Extension lowlevel)&lt;br /&gt;
* Improved Extension Manager (less memory, stored extension list)&lt;br /&gt;
* UTF-8 for filenames&lt;br /&gt;
* Backend &amp;quot;Who is online&amp;quot;&lt;br /&gt;
* Frontend &amp;quot;Stay logged in&amp;quot; (Konfiguration mit new login box)&lt;br /&gt;
* MySQL InnoDB (Wird automatisch bei Neuinstallation zur Verfügung gestellt, wenn es in mySQL aktiviert ist)&lt;br /&gt;
* Speed up Backend with .htaccess http://typo3.org/development/articles/release-notes-41/page/4/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles ändern der Tabellen auf InnoDB ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alter table cache_hash ENGINE = INNODB;&lt;br /&gt;
alter table cache_imagesizes ENGINE = INNODB;&lt;br /&gt;
alter table cache_md5params ENGINE = INNODB;&lt;br /&gt;
alter table cache_pages ENGINE = INNODB;&lt;br /&gt;
alter table cache_pagesection ENGINE = INNODB;&lt;br /&gt;
alter table cache_typo3temp_log ENGINE = INNODB;&lt;br /&gt;
alter table fe_sessions ENGINE = INNODB;&lt;br /&gt;
alter table fe_session_data ENGINE = INNODB;&lt;br /&gt;
alter table index_fulltext ENGINE = INNODB;&lt;br /&gt;
alter table index_grlist ENGINE = INNODB;&lt;br /&gt;
alter table index_phash ENGINE = INNODB;&lt;br /&gt;
alter table index_rel ENGINE = INNODB;&lt;br /&gt;
alter table index_section ENGINE = INNODB;&lt;br /&gt;
alter table index_stat_search ENGINE = INNODB;&lt;br /&gt;
alter table index_stat_word ENGINE = INNODB;&lt;br /&gt;
alter table index_words ENGINE = INNODB;&lt;br /&gt;
alter table sys_log ENGINE = INNODB;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generelle Informationen zum Update unter Linux ==&lt;br /&gt;
Quelle: typo3.net Mai 2006&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Typo3 ist normalerweise sehr einfach upzudaten - allerdings müssen ein paar Dinge beachtet werden, um updatefähig zu bleiben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Es dürfen keine Änderungen an dem Typo3-Sourcecode gemacht worden sein. Falls dieses doch gemacht wurde, müssen natürlich diese Änderungen erst in die neue Version eingearbeitet werden.&lt;br /&gt;
* Installierte Extensions sollten möglichst immer LOCAL installiert worden sein. So bleiben diese nach dem Tausch des Typo3-Sourcecodes unberührt und funktionieren nach dem Update (meist) wie gewohnt. Es gibt nur selten den Fall, daß eine Typo3-Version eine Funktion nicht mehr verwendet, die es in der alten Version noch gab.&lt;br /&gt;
* Wenn sie HTML-Templates von GLOBAL installierten Erweiterungen direkt im Extensionordner modifiziert haben sollten, müssen diese erst z.B. in den fileadmin kopiert werden. Dann können Sie den Pfad zu dieser Datei im TypoScript anpassen.&lt;br /&gt;
&lt;br /&gt;
Den Pfad finden Sie überigens mithilfe des TypoScript-Object-Browsers schnell. Meist ist er an der Stelle plugin.extensionname.templateFile zu finden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:T3_wichtigeVerzeichnisse.gif]]&lt;br /&gt;
&lt;br /&gt;
Einige der wichtigsten Verzeichnisse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Das Update für mittwaldmedien Kunden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Für unsere Kunden ist es nun besonders einfach, die vorhandene Installation auf die aktuelle Version zu bringen. Sie müssen sich nur auf der Webseite http://www.typo3server.com einloggen. Nach dem Login finden Sie ein Menü mit einem Link zu dem Typo3-Versionsmanager. Dort können Sie mit einem Klick Ihren Account auf die neue Version updaten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ToDo Versionsmanager für Geo-bit&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manuelles Update&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Für diejenigen, die dieses Update manuell machen wollen oder müssen, sind die folgenden Schrittenötig. Die Beispiele - vor allem die Pfade - müssen natürlich angepasst werden. Die Beispiele gehen davon aus, daß Sie eine Verzeichnisstruktur angelegt haben, die dem obigen Bild entspricht.&lt;br /&gt;
&lt;br /&gt;
1. Machen Sie zuerst eine Datensicherung von dem Typo3-Sourcen und Ihrem html-Ordner! Die Datenbank können Sie nun über diesen Befehl sichern:&lt;br /&gt;
&lt;br /&gt;
 mysqldump -u benutzername -p -B --add-drop-table datenbank &amp;gt; typo3DBSicherung.sql&lt;br /&gt;
&lt;br /&gt;
Notfalls könnte auch ein Dump mit phpMyAdmin erstellt werden.&lt;br /&gt;
&lt;br /&gt;
2. Verbinden Sie sich mit Ihrem Server über SSH.&lt;br /&gt;
&lt;br /&gt;
3. Wechseln Sie das Verzeichnis auf einer Ebene über dem Rootverzeichnis Ihres Webservers.&lt;br /&gt;
z.B.: cd /home/www/p1234/&lt;br /&gt;
&lt;br /&gt;
4. Laden Sie sich die neuen Typo3-Sourcen auf ihren Linuxrechner. Die aktuellen Sourcen finden Sie unter: http://typo3.org/download/packages/.&lt;br /&gt;
&lt;br /&gt;
Die benötigte Datei hat das Format typo3_src-3.x.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
      &lt;br /&gt;
 wget belnet.dl.sourceforge.net/sourceforge/typo3/typo3_src-3.7.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
5. Entpacken Sie die Datei mit dem Kommando:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 tar -xzvf typo3_src-3.x.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
6. Ändern Sie nun die Rechte so, wie der bisherige Typo3-Sourcecode-Ordner sie hatte.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 chown p1234.ftponly typo3_src-3.7.0 -R&lt;br /&gt;
&lt;br /&gt;
7. Entfernen Sie den alten symbolischen Link mit:&lt;br /&gt;
&lt;br /&gt;
 rm typo3_src&lt;br /&gt;
&lt;br /&gt;
8. Legen Sie nun einen neuen Link an mit:&lt;br /&gt;
&lt;br /&gt;
 ln -s typo3_src-3.x.x typo3_src&lt;br /&gt;
&lt;br /&gt;
(Die Versionsnummer müssen Sie natürlich noch anpassen.)&lt;br /&gt;
&lt;br /&gt;
9. Nun muss die Datenbank noch aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
Gehen Sie hierzu in das Typo3-Installtool und klicken Sie auf den 2. Menüpunkt Database Analyser. Mit einem Klick auf Compare werden die zu ändernden oder zu ergänzenden Datenbankfelder angezeigt. Mit einem Klick auf &amp;quot;Write to database&amp;quot; wird die Datenbank an die neue Typo3-Version angepasst.&lt;br /&gt;
&lt;br /&gt;
10. Loggen Sie sich nun als Admin im Backend an und löschen Sie alle Caches.&lt;br /&gt;
&lt;br /&gt;
== Neu in Version 4 ==&lt;br /&gt;
* Conditions mit AND und OR (|| &amp;amp;&amp;amp;)&lt;br /&gt;
&lt;br /&gt;
== Neu in 4.2 ==&lt;br /&gt;
Viele Usability Verbesserungen im Backend&lt;br /&gt;
== Update auf 4.2 ==&lt;br /&gt;
=== Extensions Updaten ===&lt;br /&gt;
* dam 1.0.11 ist nicht kompatibel Update auf min. 1.0.13&lt;br /&gt;
* date2cal auf &amp;gt;= 7.1.0&lt;br /&gt;
* Kickstarter 0.3.8 ist nicht kompatibel&lt;br /&gt;
* Developer tools gehen nicht mehr (wg. Frame oben)&lt;br /&gt;
&lt;br /&gt;
=== Ablauf ===&lt;br /&gt;
* Backend Benutzer sperren (only Admins)&lt;br /&gt;
* Sicherung der Datenbank&lt;br /&gt;
* neue Source + Symlink&lt;br /&gt;
* Update Wizard&lt;br /&gt;
* Compare&lt;br /&gt;
&lt;br /&gt;
=== Probleme ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DAM Upload geht für Benutzer&amp;#039;&amp;#039;&amp;#039; nicht mehr (Fehler Meta Daten können nicht geschrieben werden)&lt;br /&gt;
Beim neu indizieren geht dem dam der Media Ordner verloren. Er legt dann einen neuen an, in den er scheiben möchte. Die Benutzer sind abe noch auf den alten eingestellt. D.h. die Benutzergruppen m´üssen auf den neuen eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Im Dam stehen im IE7 die Benutzerwerkzeuge nicht zur verfügung (löschen etc.) nur der Stift ist noch da.&lt;br /&gt;
&lt;br /&gt;
Lösung: Das Problem ist das CSS für das Fenster. Es verdeckt die restlichen Symbole&lt;br /&gt;
Forum: 24.7.&lt;br /&gt;
&lt;br /&gt;
Ich hatte das gleiche Problem bis vor 5 Minuten auch,&lt;br /&gt;
gelöst habe ich es so:&lt;br /&gt;
- Datei: class.tx_dam_listbase.php im Ordner DAM\lib\&lt;br /&gt;
Unter der Zeile 256 (&amp;#039;itemTD&amp;#039; =&amp;gt; &amp;#039; class=&amp;quot;typo3-dblist-item&amp;quot;&amp;#039;,)&lt;br /&gt;
ist in 3 Werten als Breite 1% angegeben. Das auskommentieren&lt;br /&gt;
&lt;br /&gt;
- Datei: stylesheet.cdd in typo3_src\typo3\&lt;br /&gt;
table.typo3-dblist width: 98%; durch width: auto; ersetzen und in&lt;br /&gt;
table.typo3-dblist tr td {width: auto;} einsetzen,&lt;br /&gt;
&lt;br /&gt;
damit hats bei mir im IE 7, Firefox, safari für Win und Opera alles richtig angezeigt :-)&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, geholrfen zu haben,&lt;br /&gt;
Schmoozer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bug in Mount Points&lt;br /&gt;
&lt;br /&gt;
== Datenbank über Root Shell sichern (mysql backup) ==&lt;br /&gt;
&lt;br /&gt;
mysqldump -opt ...&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
Die häufigste Anwendung von mysqldump ist wahrscheinlich die &amp;#039;&amp;#039;&amp;#039;Erstellung eines Backups einer vollständigen Datenbank&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --opt db_name &amp;gt; backup-file.sql&lt;br /&gt;
&lt;br /&gt;
oder mit User und Passwortangabe:&lt;br /&gt;
 mysqldump -u meinDBUser -pGEHEIM db_name &amp;gt; backup.sql&lt;br /&gt;
&lt;br /&gt;
--opt ist in neueren MySQL Versionen Standardmäßig an deshalb lassen wir es mal weg.&lt;br /&gt;
&lt;br /&gt;
Die Speicherauszugsdatei können Sie wie folgt &amp;#039;&amp;#039;&amp;#039;wieder einspielen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysql db_name &amp;lt; backup-file.sql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oder aber so:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysql -e &amp;quot;source /path-to-backup/backup-file.sql&amp;quot; db_name&lt;br /&gt;
&lt;br /&gt;
mysqldump ist ferner sehr nützlich zum Ausfüllen von Datenbanken durch Kopieren von Daten von einem MySQL Server auf einen anderen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --opt db_name | mysql --host=remote_host -C db_name&lt;br /&gt;
&lt;br /&gt;
Sie können mit einem einzigen Befehl einen Speicherauszug mehrerer Datenbanken erstellen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --databases db_name1 [db_name2 ...] &amp;gt; my_databases.sql&lt;br /&gt;
&lt;br /&gt;
Um einen Speicherauszug aller Datenbanken zu erstellen, verwenden Sie die Option --all-databases:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Bei InnoDB-Tabellen bietet mysqldump die Möglichkeit, eine Online-Sicherung zu erstellen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --single-transaction &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Diese Datensicherung muss vor Beginn des Speicherauszugsvorgangs lediglich (mit FLUSH TABLES WITH READ LOCK) eine globale Lesesperre für alle Tabellen erwirken. Sobald diese Sperre aktiv ist, werden die Koordinaten des Binärlogs ausgelesen, und die Sperre wird aufgehoben. Wenn beim Absetzen der FLUSH-Anweisung gerade eine umfangreiche Änderungsanweisung ausgeführt wird, dann – und nur dann! – kann der MySQL Server stehen bleiben, bis diese lange Anweisung ausgeführt ist; danach ist der Server sperrfrei. Wenn die vom MySQL Server empfangenen Änderungsanweisungen (in Bezug auf ihre Ausführungsdauer) kurz sind, sollte die anfängliche Sperrperiode auch bei vielen Änderungen nicht spürbar sein.&lt;br /&gt;
&lt;br /&gt;
Bei der Point-in-Time-Wiederherstellung (die auch als „Roll-Forward“ bezeichnet wird, wenn Sie ein altes Backup wiederherstellen und die seitdem durchgeführten Änderungen neu aufspielen müssen) ist es häufig nützlich, das Binärlog zu rotieren (siehe Abschnitt 5.12.3, „Die binäre Update-Logdatei“) oder zumindest die Binärlogkoordinaten zu kennen, denen der Speicherauszug entspricht:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --master-data=2 &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Oder:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --flush-logs --master-data=2&lt;br /&gt;
              &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
== Mass Update Script ==&lt;br /&gt;
Ein Massen Update Script von:&lt;br /&gt;
&lt;br /&gt;
http://typofree.org/article/archive/2009/january/title/typo3-mass-upgrade-script/&lt;br /&gt;
Zugriff am 12.3.2009&lt;br /&gt;
&lt;br /&gt;
http://typofree.org/article/archive/2009/january/title/typo3-mass-upgrade-script/&lt;br /&gt;
&lt;br /&gt;
TYPO3 mass update script&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
   2.&lt;br /&gt;
      binDir=/usr/bin/&lt;br /&gt;
   3.&lt;br /&gt;
      sleep=2&lt;br /&gt;
   4.&lt;br /&gt;
       &lt;br /&gt;
   5.&lt;br /&gt;
      pageCacheTables=(&lt;br /&gt;
   6.&lt;br /&gt;
              cache_pages&lt;br /&gt;
   7.&lt;br /&gt;
              cache_pagesection&lt;br /&gt;
   8.&lt;br /&gt;
      )&lt;br /&gt;
   9.&lt;br /&gt;
       &lt;br /&gt;
  10.&lt;br /&gt;
      sites=(&lt;br /&gt;
  11.&lt;br /&gt;
              /var/www/sites/live/www.somedomain.tld&lt;br /&gt;
  12.&lt;br /&gt;
              /var/www/sites/live/www.someotherdomain.tld&lt;br /&gt;
  13.&lt;br /&gt;
              /var/www/sites/live/www.yetsomeotherdomain.tld&lt;br /&gt;
  14.&lt;br /&gt;
      )&lt;br /&gt;
  15.&lt;br /&gt;
       &lt;br /&gt;
  16.&lt;br /&gt;
      len=${#sites[*]}&lt;br /&gt;
  17.&lt;br /&gt;
      pageCacheTablesLength=${#pageCacheTables[*]}&lt;br /&gt;
  18.&lt;br /&gt;
      i=0&lt;br /&gt;
  19.&lt;br /&gt;
      while [ $i -lt $len ]; do&lt;br /&gt;
  20.&lt;br /&gt;
              echo updating: ${sites[$i]}&lt;br /&gt;
  21.&lt;br /&gt;
                      cd ${sites[$i]}&lt;br /&gt;
  22.&lt;br /&gt;
                      rm typo3_src&lt;br /&gt;
  23.&lt;br /&gt;
                      ln -s ../../sources/typo3_src-4.2.5 typo3_src&lt;br /&gt;
  24.&lt;br /&gt;
       &lt;br /&gt;
  25.&lt;br /&gt;
              echo generating new key&lt;br /&gt;
  26.&lt;br /&gt;
                      k=0&lt;br /&gt;
  27.&lt;br /&gt;
                      key=&amp;#039;&amp;#039;&lt;br /&gt;
  28.&lt;br /&gt;
                      while [ $k -lt 96 ]; do&lt;br /&gt;
  29.&lt;br /&gt;
                              key=$key$(head -100 /dev/urandom | md5sum | cut -c1)&lt;br /&gt;
  30.&lt;br /&gt;
                              let k++&lt;br /&gt;
  31.&lt;br /&gt;
                      done&lt;br /&gt;
  32.&lt;br /&gt;
                      echo key: $key&lt;br /&gt;
  33.&lt;br /&gt;
                      sed -i &amp;quot;s/\(\$TYPO3_CONF_VARS\[&amp;#039;SYS&amp;#039;]\[&amp;#039;encryptionKey&amp;#039;] = \).*/\1&amp;#039;$key&amp;#039;;/g&amp;quot; typo3conf/localconf.php&lt;br /&gt;
  34.&lt;br /&gt;
             &lt;br /&gt;
  35.&lt;br /&gt;
              echo removing configuration cache&lt;br /&gt;
  36.&lt;br /&gt;
                      rm -f typo3conf/temp_CACHED*&lt;br /&gt;
  37.&lt;br /&gt;
       &lt;br /&gt;
  38.&lt;br /&gt;
              echo clearing page cache&lt;br /&gt;
  39.&lt;br /&gt;
                      # For some insane reason some values are enclosed in double qotes&lt;br /&gt;
  40.&lt;br /&gt;
                      database=$(grep &amp;quot;typo_db &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot; | grep &amp;#039;$typo_db =&amp;#039;)&lt;br /&gt;
  41.&lt;br /&gt;
                      if [ -z &amp;quot;$database&amp;quot; ] ; then&lt;br /&gt;
  42.&lt;br /&gt;
                              database=$(grep &amp;quot;typo_db &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot;)&lt;br /&gt;
  43.&lt;br /&gt;
                      else&lt;br /&gt;
  44.&lt;br /&gt;
                              database=$(grep &amp;quot;typo_db &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^\&amp;quot;]*\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/&amp;quot;)&lt;br /&gt;
  45.&lt;br /&gt;
                      fi&lt;br /&gt;
  46.&lt;br /&gt;
                      username=$(grep &amp;quot;typo_db_username &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot; | grep &amp;#039;$typo_db_username =&amp;#039;)&lt;br /&gt;
  47.&lt;br /&gt;
                      if [ -z &amp;quot;$username&amp;quot; ] ; then&lt;br /&gt;
  48.&lt;br /&gt;
                              username=$(grep &amp;quot;typo_db_username &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot;)&lt;br /&gt;
  49.&lt;br /&gt;
                      else&lt;br /&gt;
  50.&lt;br /&gt;
                              username=$(grep &amp;quot;typo_db_username &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^\&amp;quot;]*\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/&amp;quot;)&lt;br /&gt;
  51.&lt;br /&gt;
                      fi&lt;br /&gt;
  52.&lt;br /&gt;
                      password=$(grep &amp;quot;typo_db_password &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot; | grep &amp;#039;$typo_db_password =&amp;#039;)&lt;br /&gt;
  53.&lt;br /&gt;
                      if [ -z &amp;quot;$password&amp;quot; ] ; then&lt;br /&gt;
  54.&lt;br /&gt;
                              password=$(grep &amp;quot;typo_db_password &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^&amp;#039;]*&amp;#039;\([^&amp;#039;]*\)&amp;#039;.*/\1/&amp;quot;)&lt;br /&gt;
  55.&lt;br /&gt;
                      else&lt;br /&gt;
  56.&lt;br /&gt;
                              password=$(grep &amp;quot;typo_db_password &amp;quot; typo3conf/localconf.php | tail -1 | sed &amp;quot;s/^[^\&amp;quot;]*\&amp;quot;\([^\&amp;quot;]*\)\&amp;quot;.*/\1/&amp;quot;)&lt;br /&gt;
  57.&lt;br /&gt;
                      fi&lt;br /&gt;
  58.&lt;br /&gt;
                      j=0&lt;br /&gt;
  59.&lt;br /&gt;
                      while [ $j -lt $pageCacheTablesLength ];&lt;br /&gt;
  60.&lt;br /&gt;
                      do&lt;br /&gt;
  61.&lt;br /&gt;
                              nice -n 19 ${binDir}mysql --batch -u$username -p&amp;quot;$password&amp;quot; -D$database -e &amp;quot;TRUNCATE ${pageCacheTables[$j]}&amp;quot;&lt;br /&gt;
  62.&lt;br /&gt;
                              nice -n 19 ${binDir}mysql --batch -u$username -p&amp;quot;$password&amp;quot; -D$database -e &amp;quot;ALTER TABLE ${pageCacheTables[$j]} auto_increment=1&amp;quot;&lt;br /&gt;
  63.&lt;br /&gt;
                              let j++&lt;br /&gt;
  64.&lt;br /&gt;
                      done&lt;br /&gt;
  65.&lt;br /&gt;
       &lt;br /&gt;
  66.&lt;br /&gt;
              echo &amp;quot;done! Sleeping $sleep seconds . . .&amp;quot;&lt;br /&gt;
  67.&lt;br /&gt;
                      sleep $sleep&lt;br /&gt;
  68.&lt;br /&gt;
       &lt;br /&gt;
  69.&lt;br /&gt;
              echo&lt;br /&gt;
  70.&lt;br /&gt;
        let i++&lt;br /&gt;
  71.&lt;br /&gt;
      done&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Update&amp;diff=1636</id>
		<title>Typo3 - Update</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Update&amp;diff=1636"/>
		<updated>2009-03-12T16:21:28Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update alter Typo3 Installationen (&amp;lt;V.3.8)==&lt;br /&gt;
Aus der Mailing Liste Östereich:&lt;br /&gt;
- der Core ist relativ easy (fast) immer zu upgraden (muesst&amp;#039; eigentlich von&lt;br /&gt;
v3.3 auch gehen ;-) )&lt;br /&gt;
- Achte immer auf installierte Extensions&lt;br /&gt;
* wenn etwas nicht geht, mal soweit wie moeglich alle Extensions wegschalten (nicht loeschen!).&lt;br /&gt;
* dann zuschalten; wenns dann hakt, dann sieht man gleich welche ext &amp;quot;boese&amp;quot; ist.&lt;br /&gt;
* dann diese ext updaten, wenns keine updates gibt, mal danach googlen.&lt;br /&gt;
* wenns dann net geht, debuggen..&lt;br /&gt;
&lt;br /&gt;
Weitere Probleme:&lt;br /&gt;
&lt;br /&gt;
Alte TS Templates arbeiten noch mit CSet und Content als default Template. Nach umstellen auf css-styled-content muß evt. einiges angepasst werden:&lt;br /&gt;
&lt;br /&gt;
== Update auf 4.1 ==&lt;br /&gt;
Unbedingt im Install Tool Compare ausführen und Tabellen aktualisieren. Sonst kann es Probleme mit verschiedenen Extensions geben (z.B. Login..)&lt;br /&gt;
&lt;br /&gt;
== Release Notes Version 4.1 ==&lt;br /&gt;
Die wichtigsten Neuerungen&lt;br /&gt;
* IRRE (Inline Relational Record Editing)&lt;br /&gt;
* AJAX Page and File Tree&lt;br /&gt;
* Clean-up functions (command line scripts)(Über Extension lowlevel)&lt;br /&gt;
* Improved Extension Manager (less memory, stored extension list)&lt;br /&gt;
* UTF-8 for filenames&lt;br /&gt;
* Backend &amp;quot;Who is online&amp;quot;&lt;br /&gt;
* Frontend &amp;quot;Stay logged in&amp;quot; (Konfiguration mit new login box)&lt;br /&gt;
* MySQL InnoDB (Wird automatisch bei Neuinstallation zur Verfügung gestellt, wenn es in mySQL aktiviert ist)&lt;br /&gt;
* Speed up Backend with .htaccess http://typo3.org/development/articles/release-notes-41/page/4/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelles ändern der Tabellen auf InnoDB ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alter table cache_hash ENGINE = INNODB;&lt;br /&gt;
alter table cache_imagesizes ENGINE = INNODB;&lt;br /&gt;
alter table cache_md5params ENGINE = INNODB;&lt;br /&gt;
alter table cache_pages ENGINE = INNODB;&lt;br /&gt;
alter table cache_pagesection ENGINE = INNODB;&lt;br /&gt;
alter table cache_typo3temp_log ENGINE = INNODB;&lt;br /&gt;
alter table fe_sessions ENGINE = INNODB;&lt;br /&gt;
alter table fe_session_data ENGINE = INNODB;&lt;br /&gt;
alter table index_fulltext ENGINE = INNODB;&lt;br /&gt;
alter table index_grlist ENGINE = INNODB;&lt;br /&gt;
alter table index_phash ENGINE = INNODB;&lt;br /&gt;
alter table index_rel ENGINE = INNODB;&lt;br /&gt;
alter table index_section ENGINE = INNODB;&lt;br /&gt;
alter table index_stat_search ENGINE = INNODB;&lt;br /&gt;
alter table index_stat_word ENGINE = INNODB;&lt;br /&gt;
alter table index_words ENGINE = INNODB;&lt;br /&gt;
alter table sys_log ENGINE = INNODB;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generelle Informationen zum Update unter Linux ==&lt;br /&gt;
Quelle: typo3.net Mai 2006&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Typo3 ist normalerweise sehr einfach upzudaten - allerdings müssen ein paar Dinge beachtet werden, um updatefähig zu bleiben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Es dürfen keine Änderungen an dem Typo3-Sourcecode gemacht worden sein. Falls dieses doch gemacht wurde, müssen natürlich diese Änderungen erst in die neue Version eingearbeitet werden.&lt;br /&gt;
* Installierte Extensions sollten möglichst immer LOCAL installiert worden sein. So bleiben diese nach dem Tausch des Typo3-Sourcecodes unberührt und funktionieren nach dem Update (meist) wie gewohnt. Es gibt nur selten den Fall, daß eine Typo3-Version eine Funktion nicht mehr verwendet, die es in der alten Version noch gab.&lt;br /&gt;
* Wenn sie HTML-Templates von GLOBAL installierten Erweiterungen direkt im Extensionordner modifiziert haben sollten, müssen diese erst z.B. in den fileadmin kopiert werden. Dann können Sie den Pfad zu dieser Datei im TypoScript anpassen.&lt;br /&gt;
&lt;br /&gt;
Den Pfad finden Sie überigens mithilfe des TypoScript-Object-Browsers schnell. Meist ist er an der Stelle plugin.extensionname.templateFile zu finden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:T3_wichtigeVerzeichnisse.gif]]&lt;br /&gt;
&lt;br /&gt;
Einige der wichtigsten Verzeichnisse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Das Update für mittwaldmedien Kunden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Für unsere Kunden ist es nun besonders einfach, die vorhandene Installation auf die aktuelle Version zu bringen. Sie müssen sich nur auf der Webseite http://www.typo3server.com einloggen. Nach dem Login finden Sie ein Menü mit einem Link zu dem Typo3-Versionsmanager. Dort können Sie mit einem Klick Ihren Account auf die neue Version updaten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ToDo Versionsmanager für Geo-bit&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manuelles Update&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Für diejenigen, die dieses Update manuell machen wollen oder müssen, sind die folgenden Schrittenötig. Die Beispiele - vor allem die Pfade - müssen natürlich angepasst werden. Die Beispiele gehen davon aus, daß Sie eine Verzeichnisstruktur angelegt haben, die dem obigen Bild entspricht.&lt;br /&gt;
&lt;br /&gt;
1. Machen Sie zuerst eine Datensicherung von dem Typo3-Sourcen und Ihrem html-Ordner! Die Datenbank können Sie nun über diesen Befehl sichern:&lt;br /&gt;
&lt;br /&gt;
 mysqldump -u benutzername -p -B --add-drop-table datenbank &amp;gt; typo3DBSicherung.sql&lt;br /&gt;
&lt;br /&gt;
Notfalls könnte auch ein Dump mit phpMyAdmin erstellt werden.&lt;br /&gt;
&lt;br /&gt;
2. Verbinden Sie sich mit Ihrem Server über SSH.&lt;br /&gt;
&lt;br /&gt;
3. Wechseln Sie das Verzeichnis auf einer Ebene über dem Rootverzeichnis Ihres Webservers.&lt;br /&gt;
z.B.: cd /home/www/p1234/&lt;br /&gt;
&lt;br /&gt;
4. Laden Sie sich die neuen Typo3-Sourcen auf ihren Linuxrechner. Die aktuellen Sourcen finden Sie unter: http://typo3.org/download/packages/.&lt;br /&gt;
&lt;br /&gt;
Die benötigte Datei hat das Format typo3_src-3.x.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
      &lt;br /&gt;
 wget belnet.dl.sourceforge.net/sourceforge/typo3/typo3_src-3.7.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
5. Entpacken Sie die Datei mit dem Kommando:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 tar -xzvf typo3_src-3.x.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
6. Ändern Sie nun die Rechte so, wie der bisherige Typo3-Sourcecode-Ordner sie hatte.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 chown p1234.ftponly typo3_src-3.7.0 -R&lt;br /&gt;
&lt;br /&gt;
7. Entfernen Sie den alten symbolischen Link mit:&lt;br /&gt;
&lt;br /&gt;
 rm typo3_src&lt;br /&gt;
&lt;br /&gt;
8. Legen Sie nun einen neuen Link an mit:&lt;br /&gt;
&lt;br /&gt;
 ln -s typo3_src-3.x.x typo3_src&lt;br /&gt;
&lt;br /&gt;
(Die Versionsnummer müssen Sie natürlich noch anpassen.)&lt;br /&gt;
&lt;br /&gt;
9. Nun muss die Datenbank noch aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
Gehen Sie hierzu in das Typo3-Installtool und klicken Sie auf den 2. Menüpunkt Database Analyser. Mit einem Klick auf Compare werden die zu ändernden oder zu ergänzenden Datenbankfelder angezeigt. Mit einem Klick auf &amp;quot;Write to database&amp;quot; wird die Datenbank an die neue Typo3-Version angepasst.&lt;br /&gt;
&lt;br /&gt;
10. Loggen Sie sich nun als Admin im Backend an und löschen Sie alle Caches.&lt;br /&gt;
&lt;br /&gt;
== Neu in Version 4 ==&lt;br /&gt;
* Conditions mit AND und OR (|| &amp;amp;&amp;amp;)&lt;br /&gt;
&lt;br /&gt;
== Neu in 4.2 ==&lt;br /&gt;
Viele Usability Verbesserungen im Backend&lt;br /&gt;
== Update auf 4.2 ==&lt;br /&gt;
=== Extensions Updaten ===&lt;br /&gt;
* dam 1.0.11 ist nicht kompatibel Update auf min. 1.0.13&lt;br /&gt;
* date2cal auf &amp;gt;= 7.1.0&lt;br /&gt;
* Kickstarter 0.3.8 ist nicht kompatibel&lt;br /&gt;
* Developer tools gehen nicht mehr (wg. Frame oben)&lt;br /&gt;
&lt;br /&gt;
=== Ablauf ===&lt;br /&gt;
* Backend Benutzer sperren (only Admins)&lt;br /&gt;
* Sicherung der Datenbank&lt;br /&gt;
* neue Source + Symlink&lt;br /&gt;
* Update Wizard&lt;br /&gt;
* Compare&lt;br /&gt;
&lt;br /&gt;
=== Probleme ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DAM Upload geht für Benutzer&amp;#039;&amp;#039;&amp;#039; nicht mehr (Fehler Meta Daten können nicht geschrieben werden)&lt;br /&gt;
Beim neu indizieren geht dem dam der Media Ordner verloren. Er legt dann einen neuen an, in den er scheiben möchte. Die Benutzer sind abe noch auf den alten eingestellt. D.h. die Benutzergruppen m´üssen auf den neuen eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Im Dam stehen im IE7 die Benutzerwerkzeuge nicht zur verfügung (löschen etc.) nur der Stift ist noch da.&lt;br /&gt;
&lt;br /&gt;
Lösung: Das Problem ist das CSS für das Fenster. Es verdeckt die restlichen Symbole&lt;br /&gt;
Forum: 24.7.&lt;br /&gt;
&lt;br /&gt;
Ich hatte das gleiche Problem bis vor 5 Minuten auch,&lt;br /&gt;
gelöst habe ich es so:&lt;br /&gt;
- Datei: class.tx_dam_listbase.php im Ordner DAM\lib\&lt;br /&gt;
Unter der Zeile 256 (&amp;#039;itemTD&amp;#039; =&amp;gt; &amp;#039; class=&amp;quot;typo3-dblist-item&amp;quot;&amp;#039;,)&lt;br /&gt;
ist in 3 Werten als Breite 1% angegeben. Das auskommentieren&lt;br /&gt;
&lt;br /&gt;
- Datei: stylesheet.cdd in typo3_src\typo3\&lt;br /&gt;
table.typo3-dblist width: 98%; durch width: auto; ersetzen und in&lt;br /&gt;
table.typo3-dblist tr td {width: auto;} einsetzen,&lt;br /&gt;
&lt;br /&gt;
damit hats bei mir im IE 7, Firefox, safari für Win und Opera alles richtig angezeigt :-)&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, geholrfen zu haben,&lt;br /&gt;
Schmoozer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bug in Mount Points&lt;br /&gt;
&lt;br /&gt;
== Datenbank über Root Shell sichern (mysql backup) ==&lt;br /&gt;
&lt;br /&gt;
mysqldump -opt ...&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
Die häufigste Anwendung von mysqldump ist wahrscheinlich die &amp;#039;&amp;#039;&amp;#039;Erstellung eines Backups einer vollständigen Datenbank&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --opt db_name &amp;gt; backup-file.sql&lt;br /&gt;
&lt;br /&gt;
oder mit User und Passwortangabe:&lt;br /&gt;
 mysqldump -u meinDBUser -pGEHEIM db_name &amp;gt; backup.sql&lt;br /&gt;
&lt;br /&gt;
--opt ist in neueren MySQL Versionen Standardmäßig an deshalb lassen wir es mal weg.&lt;br /&gt;
&lt;br /&gt;
Die Speicherauszugsdatei können Sie wie folgt &amp;#039;&amp;#039;&amp;#039;wieder einspielen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysql db_name &amp;lt; backup-file.sql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oder aber so:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysql -e &amp;quot;source /path-to-backup/backup-file.sql&amp;quot; db_name&lt;br /&gt;
&lt;br /&gt;
mysqldump ist ferner sehr nützlich zum Ausfüllen von Datenbanken durch Kopieren von Daten von einem MySQL Server auf einen anderen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --opt db_name | mysql --host=remote_host -C db_name&lt;br /&gt;
&lt;br /&gt;
Sie können mit einem einzigen Befehl einen Speicherauszug mehrerer Datenbanken erstellen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --databases db_name1 [db_name2 ...] &amp;gt; my_databases.sql&lt;br /&gt;
&lt;br /&gt;
Um einen Speicherauszug aller Datenbanken zu erstellen, verwenden Sie die Option --all-databases:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Bei InnoDB-Tabellen bietet mysqldump die Möglichkeit, eine Online-Sicherung zu erstellen:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --single-transaction &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Diese Datensicherung muss vor Beginn des Speicherauszugsvorgangs lediglich (mit FLUSH TABLES WITH READ LOCK) eine globale Lesesperre für alle Tabellen erwirken. Sobald diese Sperre aktiv ist, werden die Koordinaten des Binärlogs ausgelesen, und die Sperre wird aufgehoben. Wenn beim Absetzen der FLUSH-Anweisung gerade eine umfangreiche Änderungsanweisung ausgeführt wird, dann – und nur dann! – kann der MySQL Server stehen bleiben, bis diese lange Anweisung ausgeführt ist; danach ist der Server sperrfrei. Wenn die vom MySQL Server empfangenen Änderungsanweisungen (in Bezug auf ihre Ausführungsdauer) kurz sind, sollte die anfängliche Sperrperiode auch bei vielen Änderungen nicht spürbar sein.&lt;br /&gt;
&lt;br /&gt;
Bei der Point-in-Time-Wiederherstellung (die auch als „Roll-Forward“ bezeichnet wird, wenn Sie ein altes Backup wiederherstellen und die seitdem durchgeführten Änderungen neu aufspielen müssen) ist es häufig nützlich, das Binärlog zu rotieren (siehe Abschnitt 5.12.3, „Die binäre Update-Logdatei“) oder zumindest die Binärlogkoordinaten zu kennen, denen der Speicherauszug entspricht:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --master-data=2 &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
Oder:&lt;br /&gt;
&lt;br /&gt;
 shell&amp;gt; mysqldump --all-databases --flush-logs --master-data=2&lt;br /&gt;
              &amp;gt; all_databases.sql&lt;br /&gt;
&lt;br /&gt;
== Mass Update Script ==&lt;br /&gt;
Ein Massen Update Script von:&lt;br /&gt;
&lt;br /&gt;
http://typofree.org/article/archive/2009/january/title/typo3-mass-upgrade-script/&lt;br /&gt;
Zugriff am 12.3.2009&lt;br /&gt;
&lt;br /&gt;
http://typofree.org/article/archive/2009/january/title/typo3-mass-upgrade-script/&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Alles_%C3%BCber_Hooks&amp;diff=18643</id>
		<title>Typo3 - Alles über Hooks</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Alles_%C3%BCber_Hooks&amp;diff=18643"/>
		<updated>2009-03-12T16:10:57Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Link zum Original Artikel:&lt;br /&gt;
&lt;br /&gt;
http://typo3blogger.de/alles-uber-hooks/ (Datum der Kopie: 12.3.2009)&lt;br /&gt;
&lt;br /&gt;
Ich versuche hier einen Einblick in die Mysterien von Hooks innerhalb von TYPO3 zu geben. Folgende Fragen will ich alle aufgreifen:&lt;br /&gt;
&lt;br /&gt;
    * 1. Was ist ein Hook?&lt;br /&gt;
    * 2. Was kann ich damit machen?&lt;br /&gt;
    * 3. Hook vs. XCLASS - was ist besser?&lt;br /&gt;
    * 4. Welche Hooks werden schon jetzt auf meinem System verwendet?&lt;br /&gt;
    * 5. Wie finde ich Hooks?&lt;br /&gt;
    * 6. Wie kann ich einen Hook anwenden?&lt;br /&gt;
    * 7. Wie kann ich einen Hook in meine Extension einbauen?&lt;br /&gt;
    * 8. Gibt es weitere Dokumentationen zu Hooks?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los gehts:&lt;br /&gt;
&lt;br /&gt;
1. Was ist ein Hook?&lt;br /&gt;
In der Programmierung bezeichnet der Begriff Hook eine Schnittstelle, mit der fremder Programmcode in eine bestehende Anwendung integriert werden kann, um diese zu erweitern, deren Ablauf zu modifizieren oder um bestimmte Ereignisse abzufangen (soviel mal wieder von Wikipedia).&lt;br /&gt;
In vereinfachter und speziell auf TYPO3 ausgelegter Formulierung würde ich sagen, dass man einen Hook (im T3 Source oder in einer Extension) dazu verwenden kann, um eine vorhande Funktion abzuändern oder um eine weitere Funktion bei einer Aktion auszulösen; und das alles ohne den Code der Ausgangsfunktion zu ändern.&lt;br /&gt;
&lt;br /&gt;
2. Was kann ich damit machen?&lt;br /&gt;
2.1. Was ich mit Hooks mache&lt;br /&gt;
Am häufigsten verwende ich Hooks, wenn ich eine Extension erweitern will. Eine gute und umfangreiche T3 Erweiterung bringt von Haus auf ein paar Hooks mit, damit man in einen Ablauf eingreifen kann (falls eine Extension eurer Meinung nach unbedingt noch einen neuen Hook braucht, wird der Autor sicher nicht nicht nein sagen, wenn ihr diesen mit ein wenig Code unterstützt und die Implementation gut begründet). Natürlich bietet auch der T3 Core eine Menge Hooks, die z.B. die FE Ausgabe beeinflussen können.&lt;br /&gt;
&lt;br /&gt;
2.2. Konkrete Beispiele&lt;br /&gt;
&lt;br /&gt;
   1. Ich will tt_news in der Singleansicht um einen neuen Marker erweitern, der mir irgendeinen Wert zur aktuellen News ausgibt (Beispiel).&lt;br /&gt;
   2. Ich will die Empfänger eines Powermail Formulares kurz vor dem Versand manipulieren (siehe wt_dynamictarget).&lt;br /&gt;
   3. Ich will den gerenderten HTML Quelltext von TYPO3 kurz vor der Ausgabe manipulieren (siehe spamshield).&lt;br /&gt;
   4. Ich will bei einer Bestellung in commerce einen weiteren Prozess anstoßen (Hooks in commerce).&lt;br /&gt;
&lt;br /&gt;
3. Hook vs. XCLASS - was ist besser?&lt;br /&gt;
3.1. XCLASS&lt;br /&gt;
Vielleicht habt ihr euch schon mal gefragt, warum der Kickstarter am Ende jeder relevanten Datei so eine Zeile einfügt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (defined(&amp;#039;TYPO3_MODE&amp;#039;) &amp;amp;&amp;amp; $TYPO3_CONF_VARS[TYPO3_MODE][&amp;#039;XCLASS&amp;#039;][&amp;#039;ext/wt_directory/pi1/class.tx_wtdirectory_pi1.php&amp;#039;]) {&lt;br /&gt;
   include_once($TYPO3_CONF_VARS[TYPO3_MODE][&amp;#039;XCLASS&amp;#039;][&amp;#039;ext/wt_directory/pi1/class.tx_wtdirectory_pi1.php&amp;#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nahezu jede Extension- und auch viele Core- Dateien bieten die Möglichkeit über XCLASS nicht die eigentlichen Skripte auszuführen sondern alternative Skripte (Beispiel) - somit kann eine komplett andere Datei als die eigentlich vorbestimmte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
3.2. Hook&lt;br /&gt;
Während man also über die XCLASS ganze Dateien ersetzen kann, ist ein Hook “nur” dazu gedacht, einen definierten Bereich zu manipulieren - Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$content = &amp;#039;ergebnis&amp;#039;;&lt;br /&gt;
if (is_array($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][$this-&amp;gt;extKey][&amp;#039;hook&amp;#039;])) {&lt;br /&gt;
   foreach ($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][$this-&amp;gt;extKey][&amp;#039;hook&amp;#039;] as $_classRef) {&lt;br /&gt;
      $_procObj = &amp;amp;t3lib_div::getUserObj($_classRef);&lt;br /&gt;
      $_procObj-&amp;gt;functionName($content);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
return $content;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3.3. Was ist besser und warum?&lt;br /&gt;
Es liegt auf der Hand, warum die Verwendung eines Hooks zu bevorzugen ist:&lt;br /&gt;
Bei Updates der Ausgangsextension ist die Ablaufänderung weiterhin möglich (sofern der Autor nicht den Hook entfernt oder abändert) und Änderung können einfließen, während bei der Benutzung der XCLASS ein Update an der Ausgangsdatei keine Wirkung zeigt (die Datei wird ja nicht mehr verwendet). Desweiteren kann man einen Hook öfters und parallel nutzen (wenn richtig eingerichtet), während die XCLASS nur max. einmal verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
4. Welche Hooks werden schon jetzt auf meinem System verwendet?&lt;br /&gt;
Vermutlich werden bereits jetzt schon einige Hooks auf deinem System verwendet. Hier hilft ein Blick in die Konfiguration (linkes Menü: Punkt “Konfiguration”, dann $TYPO3_CONF_VARS, dann z.B. Baum EXTCONF aufklappen):&lt;br /&gt;
&lt;br /&gt;
5. Wie finde ich Hooks?&lt;br /&gt;
Einige Erweiterungen dokumentieren die verwendeten Hooks im Manual oder bringen eine eigene XLS Datei mit. Bei einigen bringt wohl auch nur der Blick in den Code wirklich etwas. Ähnlich verhält es sich derzeit mit den Hooks im T3 Sourcecode.&lt;br /&gt;
Eine ganz neuer Ansatz wie man Hooks auf die Spur kommt, beschreibt Tim in seinem Beitrag vom Juli 2007.&lt;br /&gt;
&lt;br /&gt;
6. Wie kann ich einen Hook anwenden?&lt;br /&gt;
6.1. Info&lt;br /&gt;
Wenn du also einen Hook gefunden hast, den du in einer Erweiterung selbst aufgreifen willst, dann geht der Weg meist über die ext_localconf.php. Dort machst du die Zuweisung zu einer eigenen Klasse oder Funktion (Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
6.2. Beispiel - Vorgegebener Hook&lt;br /&gt;
6.2.1. Code&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$content = 10;&lt;br /&gt;
if (is_array($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extensionkey&amp;#039;][&amp;#039;hook&amp;#039;])) {&lt;br /&gt;
   foreach ($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extensionkey&amp;#039;][&amp;#039;hook&amp;#039;] as $_classRef) {&lt;br /&gt;
      $_procObj = &amp;amp;t3lib_div::getUserObj($_classRef);&lt;br /&gt;
      $_procObj-&amp;gt;main($content, $this);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
return $content;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Erklärung: Ausgeschrieben würden diese Zeilen wohl folgendes tun: Falls der Hook $GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extensionkey&amp;#039;][&amp;#039;hook&amp;#039;] gesetzt ist, wird eine Schleife geöffnet, die jeden Hook (kann ja schließlich mehrfach verwendet werden) durchgeht. Zuerst wird eine Referenz zu dem von dir gesetzten Objekt erstellt, danach wird die Funktion “main” mit 2 Parametern aufgerufen.&lt;br /&gt;
Falls unberührt vom Hook würde einfach nur die Variable $content (mit Inhalt “10″) aus- bzw. zurückgegeben werden.&lt;br /&gt;
&lt;br /&gt;
6.2.2. ext_localconf.php&lt;br /&gt;
Ein Aufruf in der ext_localconf.php kann so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extensionkey&amp;#039;][&amp;#039;hook&amp;#039;][] = &amp;#039;EXT:extension/class.ext_hook.php:ext_hook&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Erklärung: Hier wird die Zieldatei und Klasse gesetzt (in unserem Beispiel also - Datei: class.ext_hook.php, Klasse: ext_hook)&lt;br /&gt;
&lt;br /&gt;
6.2.3. Datei class.ext_hook.php&lt;br /&gt;
Beispielinhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class ext_hook {&lt;br /&gt;
   function main(&amp;amp;$content, $obj) {&lt;br /&gt;
      $content += 1; // erhöhe $content um 1&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da die Funktion mit Namen main in unserem Beispiel vorgegeben ist, wird diese aufgerufen und dieser werden 2 Paramter übergeben. In unserem Beispiel erhöhen wir $content um den wert 1.&lt;br /&gt;
Durch die Verwendung der Referenz &amp;amp;$content beim Funktionsaufruf wird somit auch $content in der ursprünglichen Datei um 1 erhöht.&lt;br /&gt;
&lt;br /&gt;
7. Wie kann ich einen Hook in meine Extension einbauen?&lt;br /&gt;
7.1. Alternatives Beispiel&lt;br /&gt;
Vermutlich dient Punkt 6 schon dem Verständnis, wie man einen Hook integrieren kann.&lt;br /&gt;
Als alternatives Beispiel kann man einen Hook auch so integrieren, ohne dass der Funktionsname fest vorgegeben wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extName&amp;#039;][&amp;#039;hook&amp;#039;]) {&lt;br /&gt;
   foreach($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extName&amp;#039;][&amp;#039;hook&amp;#039;] as $_funcRef) {&lt;br /&gt;
      if ($_funcRef) {&lt;br /&gt;
         t3lib_div::callUserFunction($_funcRef, $content, $this);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispielintegration in eurer ext_localconf.php:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;extName&amp;#039;][&amp;#039;hook&amp;#039;][] =  &amp;#039;EXT:extension/class.tx_ext.php:tx_ext-&amp;gt;start&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Beispieldatei:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_ext {&lt;br /&gt;
   function start(&amp;amp;$content, $obj) {&lt;br /&gt;
      $content = &amp;#039;neuer Wert&amp;#039;;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7.2. By the way&lt;br /&gt;
- Übergabe von $this: In meinen Beispielen wird beim Methodenaufruf in den Hooks immer $this übergeben. Der Sinn darin besteht, dass man nahezu jedes zuvor definierte Objekt oder Methode mit $this-&amp;gt;bla aufrufen und ändern kann. Also beim Extension Entwickeln lieber $this-&amp;gt;content statt $content verwenden (wenn möglich und sinnvoll)&lt;br /&gt;
- Hooks sollten immer so angelegt werden, dass diese öfters verwendet werden können (siehe Beispiele oben). Man weiß nie wieviele Erweiterungen gleichzeitig einen Hook nutzen&lt;br /&gt;
- Macht euch Gedanken wo in eurer Extension ein Hook Sinn macht. Was könnte also jemand anderes beeinflussen wollen? Macht ein Hook überhaupt Sinn?&lt;br /&gt;
&lt;br /&gt;
8. Gibt es weitere Dokumentationen zu Hooks?&lt;br /&gt;
&lt;br /&gt;
    * Hook Dokumentation von typo3.org&lt;br /&gt;
    * Wiki für T3 Hooks&lt;br /&gt;
&lt;br /&gt;
Puh, hoffentlich habe ich nicht zu viel (Mist) geschrieben - ist ja auch ein trockenes Thema. Habe ich etwas wichtiges vergessen? Freue mich auf Feedback!&lt;br /&gt;
&lt;br /&gt;
Grüße, Alex&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=1646</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=1646"/>
		<updated>2009-03-12T16:07:58Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: /* Erweitern von Funktionalitäten mit Hooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weiterführende Links:&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/api/&lt;br /&gt;
&lt;br /&gt;
http://wiki.typo3.org/De:Create_your_own_extension&lt;br /&gt;
&lt;br /&gt;
http://wiki.typo3.org/Extension_Developers_Guide&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.2.0/view/3/2/#id4144512&lt;br /&gt;
&lt;br /&gt;
(High Priority Functions)&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
[[Typo3 Extension Developer Templates]]&lt;br /&gt;
== Wie fange ich an ? ==&lt;br /&gt;
Was möchtest du tun?&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein vorhandenes Inhaltselement verändern, z.B. Felder hinzufügen oder ein neues Erstellen.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Typo3 Extensions - Inhaltstypen anlegen und bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel dafür ist die Extension metatags die den Inhaltselementen Text mit Bild und Bild zusätzliche Felder für Alt und Title Tag hinzufügt.&lt;br /&gt;
&lt;br /&gt;
== Extensions Programmieren in der Praxis ==&lt;br /&gt;
=== Typo3 und AJAX ===&lt;br /&gt;
[[AJAX in TYPO3 Extensions]] &lt;br /&gt;
&lt;br /&gt;
=== TypoScript in Extensions ===&lt;br /&gt;
[[TypoScript Einstellungen in Extensions auslagern]]&lt;br /&gt;
&lt;br /&gt;
=== Frontend Plugin ===&lt;br /&gt;
[[Typo3 Extensions - ein Frontend Plugin Programmieren]]&lt;br /&gt;
=== IRRE ===&lt;br /&gt;
[[Typo3 Extensions mit IRRE]]&lt;br /&gt;
&lt;br /&gt;
Das IRRE Konzept hilft beim erstellen von Extensions mit &amp;quot;echten&amp;quot; relationalen Datenbankabfragen&lt;br /&gt;
=== FlexForms ===&lt;br /&gt;
[[Typo3 Extensions mit FlexForms]]&lt;br /&gt;
&lt;br /&gt;
=== Backendformulare ===&lt;br /&gt;
[[Typo3 Extensions - Backend Formulare und TCA Konfiguration]]&lt;br /&gt;
=== Erweitern von Funktionalitäten mit Hooks ===&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel findet sich hier unter Funktionen vor oder nach der Backendeingabe ausführen: &lt;br /&gt;
&lt;br /&gt;
[[Typo3 Extensions - Backend Formulare und TCA Konfiguration]]&lt;br /&gt;
&lt;br /&gt;
Eine schöne Einführung von Typo3 Blogger:&lt;br /&gt;
[[Typo3 - Alles über Hooks]]&lt;br /&gt;
&lt;br /&gt;
=== Arbeiten mit Templates ===&lt;br /&gt;
[[Typo3 Extensions - Arbeiten mit Templates]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Snippets ===&lt;br /&gt;
[[Typo3 Extensions programmieren - Snippets]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Rich Text Editor (RTE) ===&lt;br /&gt;
[[Typo3 Extensions programmieren - RTE]]&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Session Verwaltung ===&lt;br /&gt;
Siehe auch Sessions in Typo3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es Sessions für eingeloggte Frontend User Session und Browser Sessions&lt;br /&gt;
&lt;br /&gt;
Browser Session Variable setzen&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;,&amp;quot;zaehler&amp;quot;, $wert);&lt;br /&gt;
und auslesen:&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;,&amp;quot;zaehler&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Bei der User Session wird statt &amp;#039;ses&amp;#039; &amp;#039;user&amp;#039; als 1. Parameter verwendet&lt;br /&gt;
Beispiele User Session: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $this-&amp;gt;lastSelection[&amp;#039;filters&amp;#039;][&amp;#039;sem&amp;#039;] = 0;&lt;br /&gt;
 //User SEssion Data lesen&lt;br /&gt;
 $this-&amp;gt;lastSelection = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;user&amp;quot;,&amp;quot;lastSelection&amp;quot;);&lt;br /&gt;
 // User Session Data schreiben&lt;br /&gt;
 GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;user&amp;quot;,&amp;quot;lastSelection&amp;quot;,$this-&amp;gt;lastSelection);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein weiterer netter Artikel von Tim Lochmüller aus typo3weblog.de&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Diesmal geht es um die Benutzung der Session in TYPO3. In der Regel genügt nur eine Zeile Code um einen Wert in die Session zu schreiben oder wieder heraus zu holen. Schauen wir uns erstmal an, wie man etwas in die Session schreibt:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;, &amp;quot;tx_myext&amp;quot;, $data);&lt;br /&gt;
&lt;br /&gt;
Die Funktion setKey() erwartet drei Parameter:&lt;br /&gt;
&lt;br /&gt;
# Type: Dieser kann &amp;quot;ses&amp;quot; oder &amp;quot;user&amp;quot; sein.&lt;br /&gt;
# Key: Eindeutiger Ident für eine Session Variable&lt;br /&gt;
# Data: Die Daten die gespeichert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Die beiden Typen &amp;quot;ses&amp;quot; und &amp;quot;user&amp;quot; unterscheiden sich wesentlich. Während der Typ &amp;quot;ses&amp;quot; nur temporär die Daten speichert, also genau so lange, wie die Session besteht (Session-Cookie), ist es mit dem Key &amp;quot;user&amp;quot; möglich, die Daten auch über mehrere Sessions hinweg zu speichern, wobei diese an den FE-User gekoppelt werden.&lt;br /&gt;
&lt;br /&gt;
Der Key sollte so gewählt werden, dass man nicht in Konflikt mit anderen Extensions kommt. Am besten benutzt man seinen Extension-Key dafür.&lt;br /&gt;
&lt;br /&gt;
Die Daten die man speichern will kann jede beliebige PHP Variable sein, sogar komplette Objekte kann man ablegen.&lt;br /&gt;
&lt;br /&gt;
So, nun wollen wir uns den Wert mal wieder raus holen, auch dies geht sehr schnell und einfach:&lt;br /&gt;
&lt;br /&gt;
 $data = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;, &amp;quot;tx_myext&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die Methode getKey erwartet nur zwei Parameter, die Bedeutung ist die gleiche wie bei setKey().&lt;br /&gt;
&lt;br /&gt;
Das Leben kann so einfach sein, wenn es nicht ab und an diese kleinen fiesen Sonderfälle gibt ;)&lt;br /&gt;
&lt;br /&gt;
Nehmen wir mal an, man erzeugt ein PDF oder eine AJAX-Antwort, dann gibt man das PDF aus und steigt mit einem exit() oder die() aus. In diesen Fällen, reicht ein einfacher Aufruf von setKey() nicht aus. Denn TYPO3 kann dann die Daten nicht automatisch speichern. Aber hier schafft der folgende Code Abhilfe:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;, &amp;quot;tx_myext&amp;quot;, $data);&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;storeSessionData();&lt;br /&gt;
&lt;br /&gt;
Mit storeSessionData() sorgen wir dafür, dass TYPO3 umgehend die Werte speichert. Sehr häufig wird gerade auf die letzte Zeile verzichtet, was in der Regel auch funktioniert, jedoch nur so lange, wie kein Fehler auftritt oder das Script vorzeitig beendet wird.&lt;br /&gt;
&lt;br /&gt;
Fröhliches Session-Handling Euch allen :)&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Extensions programmieren - Nützliche Funktionen ===&lt;br /&gt;
Aus Adventskalender 2008 typo3blog &lt;br /&gt;
&lt;br /&gt;
Interessante Funktionen aus der Klasse t3lib_div vor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. t3lib_div::array2json($data)&lt;br /&gt;
Mit dieser Funktion kann man sehr einfach seine Daten in ein JSON Objekt konvertieren. Die Funktion erwartet ein Array mit den Daten, dieses kann beliebig verschachtelt sein. Natürlich gibt es auch noch die PHP native Funktion json_encode, jedoch muss dies von der installierten PHP Installation unterstüzt werden.&lt;br /&gt;
&lt;br /&gt;
2. t3lib_div::convUmlauts($str)&lt;br /&gt;
Eine sehr nützliche Funktion ist convUmlauts, welche die deutschen Umlaute konvertiert, dabei wird aus einem Ä eine Ae oder aus einem ü ein ue. Groß und Klein-Schreibung wird also berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
3. t3lib_div::rmFromList($element, $list)&lt;br /&gt;
Auch diese Funktion ist sehr nützlich. Möchte man aus einer kommaseparierten Liste ein Element entfernen, ist dies mit einem Funktionsaufruf getan. Gerade bei TYPO3 ist diese Funktion sehr hilfreich, wenn man z.B. eine Benutzergruppe eines FE-Users entfernen möchte.&lt;br /&gt;
&lt;br /&gt;
== Wichtige Variablen ==&lt;br /&gt;
 $_EXTKEY &lt;br /&gt;
bzw. im Array...&lt;br /&gt;
Enthält den Extension Key.  Immer die Variable benutzen, dann kann man den Code leichte wieder verwenden.&lt;br /&gt;
 $TYPO3_CONF_VARS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wie arbeitet eine Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Laden:&amp;#039;&amp;#039;&amp;#039; Extension Manager (EM) ruft &amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039; (enthält nur das Array: $EM_CONF[$_EXTKEY]) bei allen Extensions auf die in der localconf.php aufgeführt sind.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aufruf von Backend oder Frontend:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039; wird ausgeführt (oder eine gecachete Kopie) In dieser wird die /typo3conf/localconf.php erweitert.&lt;br /&gt;
Funktion: weitere Klassen includieren (require_once())&lt;br /&gt;
&lt;br /&gt;
=== Wichtige Dateien einer Extension ===&lt;br /&gt;
&lt;br /&gt;
====ext_emconf.php====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Metadaten&amp;#039;&amp;#039;&amp;#039; wie Name, Kategorie, Status einer Extension - muß vorhanden sein sonst wird die Extension nicht geladen. Die Informationen landen in $EM_CONF[$_EXTKEY] = ARRAY&lt;br /&gt;
&lt;br /&gt;
==== ext_localconf.php ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TCA Konfiguration für das Backend&amp;#039;&amp;#039;&amp;#039;. (Werte für das Array $TYPO3_CONF_VARS). Z.B. Namen der zu ladenden Klassen, statische TSFiles etc.&lt;br /&gt;
&lt;br /&gt;
Wird immer geladen wenn ein Aufruf in Frontend oder Backend erfolgt. Kann deshalb dazu benutzt werden wichtige Klassendaten zu laden oder Skripte zu inkludieren.&lt;br /&gt;
&lt;br /&gt;
Optional - wird genutzt wenn Sie gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== ext_tables.php ====&lt;br /&gt;
Erweiterungen für  $&amp;#039;&amp;#039;&amp;#039;TCA&amp;#039;&amp;#039;&amp;#039;(Table Configuration Array). Beschreibungen von Tabellen und Formularen.&lt;br /&gt;
&lt;br /&gt;
Wird außerdem genutzt um den &amp;#039;&amp;#039;&amp;#039;Code von Frontend-Plugins, Modulen oder statischem TypoScript zu laden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Optional - wird genutzt wenn Sie gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Weitere häufige Dateien ====&lt;br /&gt;
ext_tables.sql - SQL Statements für die &amp;#039;&amp;#039;&amp;#039;Datenbank-Tabellen&amp;#039;&amp;#039;&amp;#039; beim Installieren der Extension.&lt;br /&gt;
&lt;br /&gt;
ext_tables_static+adt.sql - SQL Insert Statements für &amp;#039;&amp;#039;&amp;#039;statische Werte in Tabellen&amp;#039;&amp;#039;&amp;#039; (z.B. PLZ Liste).&lt;br /&gt;
&lt;br /&gt;
ext_conf_template.txt&lt;br /&gt;
&lt;br /&gt;
tca.php - Anpassungen für &amp;#039;&amp;#039;&amp;#039;$TCA,&amp;#039;&amp;#039;&amp;#039; Informationen für die Behandlung von Datenbanktabellen&lt;br /&gt;
&lt;br /&gt;
locallang[...].xml und locallang[...].php - &amp;#039;&amp;#039;&amp;#039;Sprachdateien&amp;#039;&amp;#039;&amp;#039; (Begriffe).&lt;br /&gt;
&lt;br /&gt;
====Typische Unterordner (optional)====&lt;br /&gt;
pi1, pi2 - Enthalten Frontend Plugins&lt;br /&gt;
&lt;br /&gt;
mod1, mod2 - Backend Module&lt;br /&gt;
&lt;br /&gt;
sv1, sv2 - Services&lt;br /&gt;
&lt;br /&gt;
=== Wichtige Globale Variablen ===&lt;br /&gt;
$_EXTKEY - der Extension Key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Formulare im Backend ===&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;$TCA&amp;#039;&amp;#039;&amp;#039; (Table Configuration Array) bestimmt welche Formularfelder verwendet werden.&lt;br /&gt;
Das Array ist in ext_tables.php(Bereiche: ctrl und feinterface s.u.) und tca.php gespeichert&lt;br /&gt;
&lt;br /&gt;
* Jeder Eintrag im $TCA ist an eine Datenbanktabelle geknüpft&lt;br /&gt;
* Der erste Index ist der Tabellenname.&lt;br /&gt;
* Im zweiten Index gibt es 6 Bereiche: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ctrl -&amp;gt; Informationen zur Tabelle&lt;br /&gt;
 interface -&amp;gt; Konfiguration für die Auflistung und Darstellung im Backend&lt;br /&gt;
 feInterface -&amp;gt; Eigenschaften für das Frontend Editing&lt;br /&gt;
 columns -&amp;gt; Informationen zu den Feldtypen der Tabelle und der Verarbeitung der Daten (zweiter Index ist hier der Spaltenname)&lt;br /&gt;
 types -&amp;gt; legt fest welche der in columns definierten Spalten dargestellt werden und in welcher Reihenfolge, &lt;br /&gt;
          außerdem Zusatzinfo wie alternative Feldbezeichnung, Palettennummer, style codes...&lt;br /&gt;
 palettes -&amp;gt; Zum Zusammenfassen von mehreren Eingabefeldern, Zusammenstellungen wiederverwenden, Hilfsfelder definieren&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Daten bearbeiten mit TCE und TCEforms ===&lt;br /&gt;
Die im $TCA definierten Daten müssen in irgend einer Form bearbeitet werden. Ein umfangreiches Modul dazu befindet sich  in der Extension CMS (typo3/sysext/cms/layout/db_layout.php. DDas Modul greift auf die &amp;#039;&amp;#039;&amp;#039;Typo3 Core Engine (TCE)&amp;#039;&amp;#039;&amp;#039; zurück, die zum Verarbeiten und Speichern von Daten dient. Die &amp;#039;&amp;#039;&amp;#039;Formulare werden mit der Klasse TCEforms&amp;#039;&amp;#039;&amp;#039; erzeugt. Bearbeitet wird hierbei im Backend.&lt;br /&gt;
&lt;br /&gt;
Immer dann, wenn man die &amp;#039;&amp;#039;&amp;#039;im $TCA eingetragenen Tabellen über Eingabemasken manipulieren&amp;#039;&amp;#039;&amp;#039; will ist des sinnvoll die TCE zu nutzen.&lt;br /&gt;
&lt;br /&gt;
 t3lib_TCEmain -&amp;gt; t3lib/class.t3lib_tce-main.php&lt;br /&gt;
 t3lib_TCEforms -&amp;gt; TCEforms&lt;br /&gt;
&lt;br /&gt;
==== Einsatz in Extensions ====&lt;br /&gt;
Instanz von t3lib_TCEmain erzeugen:&lt;br /&gt;
 require_once(PATH_t3lib.&amp;quot;class.t3lib_tcemain.php&amp;quot;);&lt;br /&gt;
 $tce=t3lib_div::makeInstance(&amp;#039;t3lib_TCEmain&amp;#039;);&lt;br /&gt;
Arrays für Daten und Kommandos erzeugen:&lt;br /&gt;
 $data[tabelle][uid][feld] = wert&lt;br /&gt;
um neue Daten zu schreiben bevor man eine uid hat belegt man uid mit NEW und einem Zufallsstring z.B. NEWo1amh&lt;br /&gt;
 $cmd[tabelle][uid][befehl] = wert&lt;br /&gt;
dabei stehen verschiedene Befehle zur Verfügung:&lt;br /&gt;
 copy, move, delete, localize, version, new&lt;br /&gt;
Die beiden Arrays werden dann mittels &lt;br /&gt;
 $tce-&amp;gt;start($data,$cmd) &lt;br /&gt;
an die TCE übergeben und von &lt;br /&gt;
$tce-&amp;gt;process_cmdmap() &lt;br /&gt;
abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
== Wie kann ich eine eigene Extension debuggen? ==&lt;br /&gt;
=== Hilfreiche Extensions zur Entwicklung von Extensions ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;devlog&amp;#039;&amp;#039;&amp;#039; -&amp;gt; schreibt log Einträge in eine Datenbanktabelle. Dazu ruft man an in seiner Extension die Funktion TODO auf und übergibt die Werte die man loggen will.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Extension Development Evaluator  (extdeveval) &amp;#039;&amp;#039;&amp;#039; -&amp;gt; Referenzen aufrufen, Autmatisch Funktionsinfos schreiben u.v.m.&lt;br /&gt;
	&lt;br /&gt;
=== permalink ===&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
&lt;br /&gt;
 debug();&lt;br /&gt;
&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online ist einfach im Installtool und devIpMask deine IP eingeben und dann mit debug(); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist... Beispiel Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22);&lt;br /&gt;
 t3lib_div::debug(,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
        &lt;br /&gt;
 $data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
 $data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
&lt;br /&gt;
 t3lib_div::debug(,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstraktionsschicht können eine Reihe von Fehlern auftreten, die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
&lt;br /&gt;
== Datenbankabfrage in Extensions ==&lt;br /&gt;
[[TYPO3 - Datenbankabfragen in Extensions]]&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
===ext_emconf.php===&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält &amp;#039;&amp;#039;&amp;#039;Konfigurationsdaten&amp;#039;&amp;#039;&amp;#039; ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch &amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039; eingebunden werden. Hier können auch Klassendateien aufgerufen werden (require_once() ) die bei jedem Aufruf zur Verfügung stehen sollen.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von &amp;#039;&amp;#039;&amp;#039;Datenbanktabellen&amp;#039;&amp;#039;&amp;#039;. Plugins und Module über die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SQL-Daten&amp;#039;&amp;#039;&amp;#039; für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SQL-Tabellendefinition&amp;#039;&amp;#039;&amp;#039; inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Globaler TypoScript-Code&amp;#039;&amp;#039;&amp;#039;. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden &amp;#039;&amp;#039;&amp;#039;Optionen zur Konfiguration&amp;#039;&amp;#039;&amp;#039; angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Symbol-Dateien&amp;#039;&amp;#039;&amp;#039; für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die &amp;#039;&amp;#039;&amp;#039;Lokalisierung&amp;#039;&amp;#039;&amp;#039; in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein &amp;#039;&amp;#039;&amp;#039;Update der Extension&amp;#039;&amp;#039;&amp;#039; (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für &amp;#039;&amp;#039;&amp;#039;Skripte und Daten&amp;#039;&amp;#039;&amp;#039; des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;PHP-Klassen&amp;#039;&amp;#039;&amp;#039; z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das &amp;#039;&amp;#039;&amp;#039;Kontext-Menü&amp;#039;&amp;#039;&amp;#039; betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein &amp;#039;&amp;#039;&amp;#039;Modul&amp;#039;&amp;#039;&amp;#039; zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Hauptscript eines Moduls&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für &amp;#039;&amp;#039;&amp;#039;Submodul-Funktionen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;TypoScript-Template&amp;#039;&amp;#039;&amp;#039;-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für &amp;#039;&amp;#039;&amp;#039;Services&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der &amp;#039;&amp;#039;&amp;#039;Dokumentation&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datei Uploads in Backend Extensions ==&lt;br /&gt;
Feld im Kickstarter anlegen. in der tca.php kannst du den uploadfolder festlegen.&lt;br /&gt;
&lt;br /&gt;
Komplizierter wirds in folgendem Fall (aus typo3.net 12-2007)&lt;br /&gt;
&lt;br /&gt;
 stimmt schon, dass man da den ordner ändern kann, aber was wenn ich nicht alle dateien in einen ordner speichern will?&lt;br /&gt;
ich brauche 2 ordner. einen für normale downloads und in den anderen würden die dateien reinkommen, die kostenpflichtig downzuloaden sind. diesen ordner muss ich also per htaccess schützen. darum wärs nötig, dass der upload-ordner für den späteren redakteur frei wählbar, oder zumindest 2 ordner auswählbar sind.&lt;br /&gt;
&lt;br /&gt;
irgendwelche ideen?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
alles kein Problem.&lt;br /&gt;
&lt;br /&gt;
Man kann in der ext_emconf.php unter createDirs die benötigten Verzeichnisse angeben.&lt;br /&gt;
Für Fileupload gibts auch einige Typofunktionen die man nutzen kann, so helfen einem folgende Klassen weiter:&lt;br /&gt;
t3lib_basicFileFunctions&lt;br /&gt;
t3lib_extFileFunctions&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bilder in eigener Extension rendern ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel benutzte Variablen:&lt;br /&gt;
 $BildAdresse&lt;br /&gt;
 $ParameterFuerImgTag&lt;br /&gt;
 $Alttext&lt;br /&gt;
&lt;br /&gt;
In PHP-Datei der Extension:&lt;br /&gt;
&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;file&amp;quot;]=&amp;quot;uploads/pics/&amp;quot;.$BildAdresse;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;params&amp;quot;]=$ParameterFuerImgTag;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;altText&amp;quot;]=$Alttext;&lt;br /&gt;
 $Bild=$this-&amp;gt;cObj-&amp;gt;IMAGE($this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;]);&lt;br /&gt;
 $Content.=$Bild;&lt;br /&gt;
&lt;br /&gt;
In Typoscript Setup&lt;br /&gt;
&lt;br /&gt;
 plugin.tx_hoTest_pi1 {     //hier Plugin-Name&lt;br /&gt;
 imageArtikel{&lt;br /&gt;
     file.maxW = {$ho_Test.BildWidthNews}  &lt;br /&gt;
     imageLinkWrap = 1&lt;br /&gt;
     imageLinkWrap {&lt;br /&gt;
       enable = 1&lt;br /&gt;
       bodyTag = &amp;lt;BODY bgColor=white&amp;gt;&lt;br /&gt;
       wrap = |&lt;br /&gt;
       width = 400m&lt;br /&gt;
       height = 400&lt;br /&gt;
       JSwindow = 1&lt;br /&gt;
       JSwindow.newWindow = 1&lt;br /&gt;
       JSwindow.expand = 17,20&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Wert {$ho_Test.BildWidthNews} kann aus Constants übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch&lt;br /&gt;
Konstanten von Constants im Setup verwenden&lt;br /&gt;
und&lt;br /&gt;
Konstanten für Constant-Editor bereitstellen&lt;br /&gt;
&lt;br /&gt;
(aus www.easy-office4you.de/ 10.1.2006)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spalten der Seiten umbenennen ===&lt;br /&gt;
&lt;br /&gt;
Um die Spalten der Seite im Backend beliebig umzubenennen und/oder zusätzliche eigene Spalten zu verwenden, muß die Extension zed_more_columns installiert werden und dann in der Datei ext_tables.php die Spalten-Namen eingeben werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 $TCA[&amp;quot;tt_content&amp;quot;][&amp;quot;columns&amp;quot;][&amp;quot;colPos&amp;quot;][&amp;quot;config&amp;quot;][&amp;quot;items&amp;quot;] = array (&lt;br /&gt;
 &amp;quot;0&amp;quot; =&amp;gt; array (&amp;quot;Mitte||Mitte||||||||&amp;quot;,&amp;quot;0&amp;quot;),&lt;br /&gt;
 &amp;quot;1&amp;quot; =&amp;gt; array (&amp;quot;Links||Links||||||||&amp;quot;,&amp;quot;1&amp;quot;),&lt;br /&gt;
 &amp;quot;2&amp;quot; =&amp;gt; array (&amp;quot;Rechts||Rechts||||||||&amp;quot;,&amp;quot;2&amp;quot;),&lt;br /&gt;
 &amp;quot;3&amp;quot; =&amp;gt; array (&amp;quot;Teaser||Teaser||||||||&amp;quot;,&amp;quot;3&amp;quot;),&lt;br /&gt;
 &amp;quot;4&amp;quot; =&amp;gt; array (&amp;quot;Fusszeile||Fusszeile||||||||&amp;quot;,&amp;quot;4&amp;quot;)&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
== Bei Extension dafür sorgen, daß im Backend kein Sortierungs-Button entsteht ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Datei ext_tables.php der Extension folgende Zeile ändern&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;sortby&amp;quot; =&amp;gt; &amp;quot;name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
ändern in&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;default_sortby&amp;quot; =&amp;gt; &amp;quot;ORDER BY name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
Anstatt &amp;quot;name&amp;quot; kann natürlich auch ein anderes Suchkriterium verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Ausgaben im HTML-Header in Extensions programmieren ==&lt;br /&gt;
Manchmal möchte man bestimmte Angaben in den Header schreiben, um zum Beispiel ein JavaScript einzubinden o.ä.&lt;br /&gt;
&lt;br /&gt;
Man könnte im statischen TypoScript für das Objekt page etwas hernehmen. Das funktioniert aber nur wenn das PAGE Objekt auch wirklich page heißt.&lt;br /&gt;
&lt;br /&gt;
Also besser mit einer Typo3 Eigenen Funktion.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel - JavaScript einbinden&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function includeJavaScript() {&lt;br /&gt;
  $js .= &amp;#039;&amp;lt;script src=&amp;quot;&amp;#039;.t3lib_extMgm::siteRelPath($this-&amp;gt;extKey).dirname($this-&amp;gt;scriptRelPath).&amp;#039;/JS-Verzeichnis/js-file.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;!-- //--&amp;gt;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
  $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;additionalHeaderData[$this-&amp;gt;extKey] = $js;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Aufruf der Funktion:&lt;br /&gt;
$content=$this-&amp;gt;includeJavaScript(); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Variable $this-&amp;gt;extKey wird normalerweise immer in der Klassendefinition der Extensiongesetzt und enthält den Namen der Extension (z.B. meineextension)&lt;br /&gt;
&lt;br /&gt;
Für $this-&amp;gt;scriptRelPath gilt das gleiche. Hier steht der Pfad ab dem Extension Ordner (z.B. pi1/class.tx_meineExtension_pi1.php)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mehrsprachige Extensions ==&lt;br /&gt;
Seit der Version 4 hat sich die Vorgehensweise bei der Lokalisierung geändert. Um zu verstehen wie die Lokalisierung von Backend, Frontend etc. funktioniert gibt es hier eine kleine Übersicht:&lt;br /&gt;
[[Sprachverwaltung und Lokalisierung in Typo3]]&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Baukasten&amp;diff=1655</id>
		<title>Typo3 - Baukasten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Baukasten&amp;diff=1655"/>
		<updated>2009-03-12T16:02:14Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: /* GMenu mit Bildern aus den Seiteneigenschaften (Media-Feld) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;weitere Infos unter [[Typo3 - Tipps und Tricks]]&lt;br /&gt;
&lt;br /&gt;
== Auf Daten zugreifen ==&lt;br /&gt;
Beispiele gibt es hier:&lt;br /&gt;
&lt;br /&gt;
[[TypoScript - Daten auslesen]]&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - stdWrap]]&lt;br /&gt;
&lt;br /&gt;
Die stdWrap Eigenschaft steht vielen Objekten zur Verfügung. Wenn Sie vorhanden ist ist Sie der Problemlöser für fast alle Probleme :-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - TSFE]]&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Das Media Feld]]&lt;br /&gt;
&lt;br /&gt;
== Standardeinstellungen ==&lt;br /&gt;
[[Typo3 - Standardeinstellungen]]&lt;br /&gt;
&lt;br /&gt;
== Quellcode aufräumen - Sourcecode verbessern - valides XHTML ==&lt;br /&gt;
Der Core produziert seit 4.0 valides XHTML&lt;br /&gt;
&lt;br /&gt;
weitere Hilfen wenn Extensions nicht valide arbeiten bieten:&lt;br /&gt;
&lt;br /&gt;
Installation von Tidy auf dem SErver (aktivieren im Install-Tool)&lt;br /&gt;
&lt;br /&gt;
HTML Cleaner http://typo3.org/extensions/repository/view/qcom_htmlcleaner/2.4.0/&lt;br /&gt;
&lt;br /&gt;
Das Bordeigene HTML-Cleaning: config.xhtml_cleaning = all&lt;br /&gt;
&lt;br /&gt;
Vorsicht bei den Cleanern wenn JavaScript im Spiel ist weil dieser z.T. zerstört werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel aus dem Forum zum Quelltext aufräumen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Einstellen des DocType auf XHTML Transitional&lt;br /&gt;
config.doctype = xhtml_trans&lt;br /&gt;
#XHTML Cleaning aktivieren&lt;br /&gt;
config.xhtml_cleaning = all&lt;br /&gt;
#Default Javascripts in externes File auslagern&lt;br /&gt;
config.removeDefaultJS = 1&lt;br /&gt;
config.removeDefaultJS = external&lt;br /&gt;
#&amp;lt;?xml... ?&amp;gt; Prolog deaktivieren&lt;br /&gt;
config.xmlprologue = none&lt;br /&gt;
#CSS Datei in externes File auslagern&lt;br /&gt;
config.inlineStyle2TempFile = 1&lt;br /&gt;
config.disablePrefixComment = 1&lt;br /&gt;
&lt;br /&gt;
#RTE Tuning&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.remapTag &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.DIV.class &amp;gt;&lt;br /&gt;
#Angabe von Tags, die nicht mit einem zusätzlichen wrap umgeben werden dürfen&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.encapsTagList = cite, div, p, pre, h1, h2, h3, h4, h5, h6&lt;br /&gt;
&lt;br /&gt;
#Entfernt die zusätzlichen CSS-Klassen&lt;br /&gt;
lib.stdheader.3 = LOAD_REGISTER&lt;br /&gt;
lib.stdheader.3.headerClass =&lt;br /&gt;
lib.stdheader.3.headerClass.noTrimWrap = |&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap = |&lt;br /&gt;
&lt;br /&gt;
#Standard-Headings aufräumen&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap =&lt;br /&gt;
lib.stdheader.10.1.fontTag = &amp;lt;h1&amp;gt;|&amp;lt;/h1&amp;gt;&lt;br /&gt;
lib.stdheader.10.2.fontTag = &amp;lt;h2&amp;gt;|&amp;lt;/h2&amp;gt;&lt;br /&gt;
lib.stdheader.10.3.fontTag = &amp;lt;h3&amp;gt;|&amp;lt;/h3&amp;gt;&lt;br /&gt;
lib.stdheader.10.4.fontTag = &amp;lt;h4&amp;gt;|&amp;lt;/h4&amp;gt;&lt;br /&gt;
lib.stdheader.10.5.fontTag = &amp;lt;h5&amp;gt;|&amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Content Elemente aufräumen und Kommentare entfernen&lt;br /&gt;
tt_content.stdWrap.dataWrap &amp;gt;&lt;br /&gt;
tt_content.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.header.20.dataWrap &amp;gt;&lt;br /&gt;
tt_content.header.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.default.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.textpic.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.table.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.mailform.20.stdWrap.wrap &amp;gt;&lt;br /&gt;
tt_content.menu.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.image.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.list.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
=== GMenu mit Bildern aus den Seiteneigenschaften (Media-Feld) ===&lt;br /&gt;
Ein Schnipsel vom 12.3.2009 typo3 blogger&lt;br /&gt;
Nicht sehr oft benötigt, aber unter Umständen dennoch hilfreich: ein kleines Copy&amp;amp;Paste Tutorial zur Erstellung eines GMENUs mit Bildern aus dem “media”-Feld der Seiteneigenschaften. Zu beachten gibt es: der GIFBUILDER greift bei diesem Snippet das Bild nicht an, sodass es unverändert im Frontend ausgegeben wird. Dies hatte bei mir den Grund, dass die Website nur aus Bildern besteht und Photoshop nunmal bessere Ergebnisse als ImageMagick bzw. GraphicsMagick liefert - deshalb wollte ich auch nicht, dass er irgendwas an den Bildern verändert oder neu berechnet.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.menu = HMENU&lt;br /&gt;
temp.menu {&lt;br /&gt;
	1 = GMENU&lt;br /&gt;
	1 {&lt;br /&gt;
		wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
		noBlur = 0&lt;br /&gt;
		NO = 1&lt;br /&gt;
		NO {&lt;br /&gt;
			wrap = &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
			altImgResource.import = uploads/media/&lt;br /&gt;
			altImgResource.import.field = media&lt;br /&gt;
			altImgResource.import.listNum = 0&lt;br /&gt;
 &lt;br /&gt;
			ATagTitle.field = subtitle // title&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		RO = 1&lt;br /&gt;
		RO &amp;lt; .NO&lt;br /&gt;
		RO {&lt;br /&gt;
			altImgResource.import.listNum = 1&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		ACT &amp;lt; .RO&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
lib.menu &amp;lt; temp.menu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Welches Bild (falls mehrere vorhanden sind) TYPO3 nun für das Erzeugen des Menüs nimmt bestimmt folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 altImgResource.import.listNum = 0&lt;br /&gt;
&lt;br /&gt;
Zu beachten gibt es dabei: wie in der Datentechnik üblich fängt man bei 0 zu zählen an, 0 ist dabei das erste Bild, 1 das zweite, 2 das dritte, usw.&lt;br /&gt;
&lt;br /&gt;
=== GMENU und wrapItemAndSub Workaround mit TMENU===&lt;br /&gt;
Ebenfalls von Typo3Blogger&lt;br /&gt;
&lt;br /&gt;
Freunde von semantisch korrektem HTML die auf ein grafisches, mehrstufiges Menü angewiesen sind, werden wissen wovon ich spreche. Man hat ein tolles GMENU gebastelt, welches wunderbare Grafiken liefert und fragt sich “warum ist mein HTML kaputt?”. Nach ein paar Sekunden googlen findet man die Antwort: GMENU fehlt die Eigenschaft “wrapItemAndSub”, mit welchem sich einfach verschachtelte Menüs realisieren lassen. Es gibt viele Ansätze dies zu umgehen, manche arbeiten mit IFSUB, manche verlassen sich auf Tidy. Vor Kurzem stand ich (wieder einmal) vor dem Problem und wollte es einmal anders lösen.&lt;br /&gt;
&lt;br /&gt;
Dabei bin ich auf folgende Lösung gestoßen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.mainMenu = HMENU&lt;br /&gt;
temp.mainMenu {&lt;br /&gt;
	1 = TMENU&lt;br /&gt;
	1 {&lt;br /&gt;
		wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
		NO = 1&lt;br /&gt;
        	NO {&lt;br /&gt;
        		wrapItemAndSub = &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
        		doNotShowLink = 1&lt;br /&gt;
 &lt;br /&gt;
			RO = 1&lt;br /&gt;
			ATagTitle.field = title&lt;br /&gt;
 &lt;br /&gt;
			beforeImg = GIFBUILDER&lt;br /&gt;
			beforeImg {&lt;br /&gt;
				XY=[20.w]+15,42&lt;br /&gt;
				backColor = #1092AD&lt;br /&gt;
 &lt;br /&gt;
				10 = TEXT&lt;br /&gt;
				10 {&lt;br /&gt;
					text {&lt;br /&gt;
						field = title&lt;br /&gt;
						align = center&lt;br /&gt;
					}			&lt;br /&gt;
 &lt;br /&gt;
					fontFile = fileadmin/font.ttf&lt;br /&gt;
					fontSize = 16&lt;br /&gt;
					fontColor = #FFFFFF&lt;br /&gt;
 &lt;br /&gt;
					offset = 0,34&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
 &lt;br /&gt;
			beforeROImg &amp;lt; .beforeImg&lt;br /&gt;
			beforeROImg.20.fontColor = #FFD20F&lt;br /&gt;
			beforeImgLink = 1&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		ACT &amp;lt; .NO&lt;br /&gt;
		ACT {&lt;br /&gt;
			RO = 0&lt;br /&gt;
			beforeImg.20.fontColor = #FF0000&lt;br /&gt;
			wrapItemAndSub = &amp;lt;li class=&amp;quot;act&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
       2 &amp;lt; .1&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
lib.mainMenu &amp;lt; temp.mainMenu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das tolle an dieser Lösung ist nicht nur, dass man wrapItemAndSub verwenden kann, nein auch alle anderen Eigenschaften und Zustände des TMENU stehen einem zur Verfügung!&lt;br /&gt;
&lt;br /&gt;
Ich frage mich, warum wrapItemAndSub bis heute noch nicht in TYPO3 implementiert wurde. Vielleicht wäre es mit der aktuellen Veröffentlichung der TYPO3 4.3 Alpha 2 und der Aufforderung die Feature-Wunschliste zu füllen einmal Zeit diesem Punkt etwas Nachdruck zu verleihen. Falls ihr noch andere Lösungsansätze auf Lager oder bessere Ideen habt, bitte informiert uns in den Comments!&lt;br /&gt;
&lt;br /&gt;
=== Klassisches List Menu ===&lt;br /&gt;
Dieses Menü kann als Grundbaustein für alle möglichen Menüs verwendet werden. Man kopiert sich das Menü in ein neues Objekt und modifiziert dort die Eigenschaften wie man sie braucht. Als Alternative gibt es noch das [[Menue als CSS formatierte Liste]] in dem ein fixer Startpunkt vorgegeben ist:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Accessible ====&lt;br /&gt;
benötigt cronaccessiblemenues&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.listMenu = HMENU&lt;br /&gt;
&lt;br /&gt;
# Falls das Menü nicht bei der obersten Ebene anfangen soll&lt;br /&gt;
 temp.listMenu.entryLevel = 1&lt;br /&gt;
&lt;br /&gt;
# Bei Bedarf einzelne Seiten aus dem Menü ausschließen&lt;br /&gt;
#temp.listMenu.excludeUidList = 1,2,3&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.1 = TMENU&lt;br /&gt;
temp.listMenu.1 {&lt;br /&gt;
  wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
  noBlur = 1&lt;br /&gt;
  IProcFunc = user_cronaccessiblemenus-&amp;gt;makeAccessible&lt;br /&gt;
&lt;br /&gt;
//NO.after = xyz&lt;br /&gt;
# Access Keys einschalten&lt;br /&gt;
  IProcFunc.accessKeys = 1&lt;br /&gt;
&lt;br /&gt;
# Hierarchische Nummerierung der Menüpunkte einschalten&lt;br /&gt;
  IProcFunc.dfn = 1&lt;br /&gt;
  IProcFunc.accessKeyWrap = &amp;lt;span class=&amp;quot;accessKey&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  IProcFunc.appendWrap = &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;&amp;amp;nbsp;(ALT-|)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Die folgenden Accesskeys nicht verwenden (bereits belegt)&lt;br /&gt;
&lt;br /&gt;
  IProcFunc.forbiddenKeys = 0,D,B,A,F,X,m,p&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für nicht-aktive Seiten&lt;br /&gt;
&lt;br /&gt;
  NO {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;NO&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;|*|&amp;lt;li class=&amp;quot;NO last&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
#    stdWrap.wrap = |abc&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für Seiten, die sich in der Rootline befinden&lt;br /&gt;
&lt;br /&gt;
  ACT = 1&lt;br /&gt;
  ACT {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;ACT&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;ACT last&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für die aktuelle Seite&lt;br /&gt;
&lt;br /&gt;
  CUR = 1&lt;br /&gt;
  CUR {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;CUR&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;CUR last&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    doNotLinkIt = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Gleiche Einstellungen für die nächsten Ebenen&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.2 = TMENU&lt;br /&gt;
temp.listMenu.2 &amp;lt; temp.listMenu.1&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.3 = TMENU&lt;br /&gt;
temp.listMenu.3 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.4 = TMENU&lt;br /&gt;
temp.listMenu.4 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Classic (not accessible) ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.listMenu = HMENU&lt;br /&gt;
&lt;br /&gt;
# Falls das Menü nicht bei der obersten Ebene anfangen soll&lt;br /&gt;
 temp.listMenu.entryLevel = 1&lt;br /&gt;
&lt;br /&gt;
# Bei Bedarf einzelne Seiten aus dem Menü ausschließen&lt;br /&gt;
#temp.listMenu.excludeUidList = 1,2,3&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.1 = TMENU&lt;br /&gt;
temp.listMenu.1 {&lt;br /&gt;
  wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
  noBlur = 1&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für nicht-aktive Seiten&lt;br /&gt;
&lt;br /&gt;
  NO {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;NO&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;|*|&amp;lt;li class=&amp;quot;NO last&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für Seiten, die sich in der Rootline befinden&lt;br /&gt;
&lt;br /&gt;
  ACT = 1&lt;br /&gt;
  ACT {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;ACT&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;ACT last&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für die aktuelle Seite&lt;br /&gt;
&lt;br /&gt;
  CUR = 1&lt;br /&gt;
  CUR {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;CUR&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;CUR last&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    doNotLinkIt = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Gleiche Einstellungen für die nächsten Ebenen&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.2 = TMENU&lt;br /&gt;
temp.listMenu.2 &amp;lt; temp.listMenu.1&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.3 = TMENU&lt;br /&gt;
temp.listMenu.3 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.4 = TMENU&lt;br /&gt;
temp.listMenu.4 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multilanguage Menu ===&lt;br /&gt;
[[Typo3 - Multilanguage Menu]]&lt;br /&gt;
=== Bilder Menü ===&lt;br /&gt;
siehe: [[Typo3 - Bildermenü]]&lt;br /&gt;
=== Einfaches Menü mit 1 Ebene (CSS) ===&lt;br /&gt;
siehe: [[Menue als CSS formatierte Liste]]&lt;br /&gt;
&lt;br /&gt;
=== Menü mit 2 Ebenen als verschachtelte Liste ===&lt;br /&gt;
Dieses Menü ist besonders für vertikale Navigationen geeignet&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Einstieg Level 1&lt;br /&gt;
navi-L12-startID = 1&lt;br /&gt;
navi-L12-delimiter = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
navi-L12-delimiter =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Top Navigation ###&lt;br /&gt;
temp.navi-L12 = HMENU&lt;br /&gt;
temp.navi-L12 {&lt;br /&gt;
  #stdWrap.case = lower&lt;br /&gt;
  special = directory&lt;br /&gt;
  # Seitenid für den Einstieg&lt;br /&gt;
  special.value = {$navi-L12-startID}&lt;br /&gt;
  # Ebene für den Einstieg (nicht vergessen wg. 2. Level)&lt;br /&gt;
  entryLevel = 1&lt;br /&gt;
  1 = TMENU&lt;br /&gt;
  1{&lt;br /&gt;
    noBlur = 1&lt;br /&gt;
    wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
    NO = 1&lt;br /&gt;
    NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
    ACT = 1&lt;br /&gt;
    ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
    ACTIFSUB = 1&lt;br /&gt;
    #Wenn Unterpunkte dann li aufmachen&lt;br /&gt;
    ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&lt;br /&gt;
  }&lt;br /&gt;
  2 = TMENU&lt;br /&gt;
  2{&lt;br /&gt;
   noBlur = 1&lt;br /&gt;
   NO = 1&lt;br /&gt;
   #Unterpunkt also neue ul und danach li zu (von L1 geöffnet)&lt;br /&gt;
   wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
   ACT = 1&lt;br /&gt;
   ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  #ACTIFSUB = 1&lt;br /&gt;
  #ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Menü mit 2 Ebenen als separate Listen ===&lt;br /&gt;
Dieses Menü ist besonders für horizontale Navigationen geeignet. &lt;br /&gt;
&lt;br /&gt;
Da die 2. Ebene relativ angegeben wird muß man bei mehreren Navigationsbäumen aufpassen, daß evt. ein Untermenü einer anderen Navigation (anderer Baum) ebenfalls angezeigt wird. Das läßt sich z.B. umgehen in dem man das Navitemplate erst im Unterbaum setzt oder indem man im Hauptbaum eine Bedingung setzt ([PIDinRootline = 123])&lt;br /&gt;
&lt;br /&gt;
Ebene 1 ist im Prinzip eine einfache Liste:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Navi nur Level1&lt;br /&gt;
#Startpunkt&lt;br /&gt;
navi_startID = 1&lt;br /&gt;
&lt;br /&gt;
#Trennzeichen für horizontale Navi:&lt;br /&gt;
naviL1-delimiter = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Top Navigation ###&lt;br /&gt;
temp.naviL1 = HMENU&lt;br /&gt;
temp.naviL1 {&lt;br /&gt;
  #stdWrap.case = lower&lt;br /&gt;
  special = directory&lt;br /&gt;
  # Seitenid für den Einstieg&lt;br /&gt;
  special.value = {$navi_startID}&lt;br /&gt;
  1 = TMENU&lt;br /&gt;
  1.noBlur = 1&lt;br /&gt;
  1.wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
  1.NO = 1&lt;br /&gt;
  1.NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$naviL1-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
  1.ACT = 1&lt;br /&gt;
  1.ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$naviL1-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
  #1.ACTIFSUB = 1&lt;br /&gt;
  #1.ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Ebene 2 wird eine weitere Liste generiert wenn man sich in einem bestimmten Level befindet:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Navigation nur ab Level x  als ul (Standard entry Level1=2.Level)&lt;br /&gt;
&lt;br /&gt;
#Trennzeichen für horizontale Navi:&lt;br /&gt;
naviLx-delimiter = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
naviLx-entryLevel = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.naviLx = HMENU&lt;br /&gt;
temp.naviLx {&lt;br /&gt;
  # Seitenbaumebene ab Level 1 darstellen (2. Ebene)&lt;br /&gt;
   entryLevel = {$naviLx-entryLevel}&lt;br /&gt;
# Level 2&lt;br /&gt;
   1 = TMENU&lt;br /&gt;
   1{&lt;br /&gt;
      noBlur = 1&lt;br /&gt;
      wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
      NO = 1&lt;br /&gt;
   # Für horizontale Navi mit delimiter bei vertikal einfach nichts setzen&lt;br /&gt;
      NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$naviLx-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      ACT = 1&lt;br /&gt;
   # Für vertikale Navi ohne delimiter...      &lt;br /&gt;
      #ACT.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
   # und horizontal mit delimiter&lt;br /&gt;
      ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$naviLx-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
      #ACTIFSUB = 1&lt;br /&gt;
      #ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Menü als CSS formatierte Liste (allgemein) ===&lt;br /&gt;
[[Menue als CSS formatierte Liste]]&lt;br /&gt;
=== CSS-Flyout Menü ===&lt;br /&gt;
[[Typo3 - CSS-Flyout Menü]]&lt;br /&gt;
&lt;br /&gt;
=== Sauberes grafisches Menü ===&lt;br /&gt;
[[Typo3 - Grafisches Menü]]&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
=== Autoparser (automaketemplate und Templateswitcher (tx_rlmptmplselector) konfigurieren ===&lt;br /&gt;
Der Template - Switcher benötigt automaketemplate (oder man arbeitet direkt mit TS-Templates). &lt;br /&gt;
Am besten gleich beide in einem Basis Template konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### SET UP TEMPLATE SELECTOR ###&lt;br /&gt;
plugin.tx_rlmptmplselector_pi1 {&lt;br /&gt;
&lt;br /&gt;
// Define the paths leading to our HTML template files&lt;br /&gt;
   templatePathMain = fileadmin/dinos/templates/main/&lt;br /&gt;
   templatePathSub = fileadmin/dinos/templates/sub/&lt;br /&gt;
&lt;br /&gt;
      // Define the filenames used as the default HTML templates&lt;br /&gt;
   defaultTemplateFileNameMain = main.html&lt;br /&gt;
   defaultTemplateFileNameSub = sub01.html&lt;br /&gt;
&lt;br /&gt;
      // If there is a page having no template selected, use a template&lt;br /&gt;
      // selected earlier in the rootline. If there is none, use the default&lt;br /&gt;
    inheritMainTemplates = 1&lt;br /&gt;
    inheritSubTemplates = 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Autoparser Konfigurieren (alle IDs als Marker) ###&lt;br /&gt;
&lt;br /&gt;
plugin.tx_automaketemplate_pi1{&lt;br /&gt;
#  content = FILE&lt;br /&gt;
#  content.file = fileadmin/templates/main/main.html&lt;br /&gt;
&lt;br /&gt;
  content &amp;lt; plugin.tx_rlmptmplselector_pi1&lt;br /&gt;
  elements {&lt;br /&gt;
    BODY.all = 1&lt;br /&gt;
    BODY.all.subpartMarker = DOCUMENT_BODY&lt;br /&gt;
    HEAD.all = 1&lt;br /&gt;
    HEAD.all.subpartMarker = DOCUMENT_HEADER&lt;br /&gt;
    HEAD.all.rmTagSections = title&lt;br /&gt;
    DIV.all = 1&lt;br /&gt;
    TD.all = 1&lt;br /&gt;
  }&lt;br /&gt;
    relPathPrefix = fileadmin/dinos/templates/main/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== News - Modul ===&lt;br /&gt;
Hier gibt es fertige Konfigurationen:&lt;br /&gt;
[[News (tt_news)]]&lt;br /&gt;
&lt;br /&gt;
=== eCards - sr_sendcard ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# The Fast Way:&lt;br /&gt;
# plugin.tx_srsendcard_pi1._CSS_DEFAULT_STYLE = @import url(&amp;quot;fileadmin/dinos/templates/css/srsendcard.css&amp;quot;);&lt;br /&gt;
# But better is this (more flexible lesser Overhead)&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srsendcard_pi1._CSS_DEFAULT_STYLE &amp;gt;&lt;br /&gt;
&lt;br /&gt;
[PIDinRootline = 14]&lt;br /&gt;
page.includeCSS.file2 = fileadmin/dinos/templates/srsendcard/srsendcard.css&lt;br /&gt;
[global]&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srsendcard_pi1{&lt;br /&gt;
&lt;br /&gt;
templateFile = fileadmin/dinos/templates/srsendcard/srsendcard.tmpl&lt;br /&gt;
locale_all = de_DE&lt;br /&gt;
oldYear = 2006&lt;br /&gt;
# Vorschauseite (wenn gewünscht)&lt;br /&gt;
# previewPID = your_page_id&lt;br /&gt;
enableHTMLMail = 1&lt;br /&gt;
siteEmail = info@start-reutlingen.de&lt;br /&gt;
siteName = Erben der Dinos&lt;br /&gt;
# musicDir = EXT:sr_sendcard/music&lt;br /&gt;
#cardMusicFiles = autumnleaves.mid, OverTheRainbow.mid, Pomp_and_Circumstance.mid&lt;br /&gt;
disableMusic = 1&lt;br /&gt;
maxCol = 2&lt;br /&gt;
imageSmallWidth = 150&lt;br /&gt;
imageSmallHeight = 150&lt;br /&gt;
imageBigWidth = 300&lt;br /&gt;
imageBigHeight = 300&lt;br /&gt;
#logo&lt;br /&gt;
#logoAlignHor = right&lt;br /&gt;
#logoAlignVert = bottom&lt;br /&gt;
#useAlternateImageOnPrint&lt;br /&gt;
### For use with other pids use this one too&lt;br /&gt;
#createPID&lt;br /&gt;
#formPID&lt;br /&gt;
#previewPID&lt;br /&gt;
#useCAPTCHA = 0&lt;br /&gt;
#viewPID&lt;br /&gt;
#printPID&lt;br /&gt;
### Erscheinungsbild ###&lt;br /&gt;
cardStamp = fileadmin/dinos/templates/srsendcard/stamp.gif&lt;br /&gt;
#date_stdWrap&lt;br /&gt;
disableSendDate = 1&lt;br /&gt;
cardBgcolors = #FFFFFF,#A00A1C,#FF993F&lt;br /&gt;
cardFontcolors = #000000, #FFFFFF,#A00A1C&lt;br /&gt;
#disableFontcolors&lt;br /&gt;
#disableFontfaces&lt;br /&gt;
#disableCardOptions&lt;br /&gt;
#graphicMess&lt;br /&gt;
#graphicMessWidth&lt;br /&gt;
#graphicMessFontFiles&lt;br /&gt;
#graphicMessFontSizes&lt;br /&gt;
#fontDir&lt;br /&gt;
#doNotShowCardCaptions&lt;br /&gt;
cardPresentationOrder = manual&lt;br /&gt;
salutation = informal&lt;br /&gt;
#disableBgcolors = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zufallsbild tx_ccrandomimage ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript - Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### zufallsbild erzeugen ###&lt;br /&gt;
includeLibs.tx_ccrandomimage = EXT:cc_random_image/pi1/class.tx_ccrandomimage_pi1.php&lt;br /&gt;
&lt;br /&gt;
// USER_INT means &amp;#039;no caching&amp;#039;&lt;br /&gt;
temp.randomImage = USER_INT&lt;br /&gt;
temp.randomImage{&lt;br /&gt;
  userFunc = tx_ccrandomimage_pi1-&amp;gt;main&lt;br /&gt;
  path = fileadmin/randomImage/&lt;br /&gt;
  fileExt = jpg,jpeg,gif,png&lt;br /&gt;
  #Das Render Objekt ist ein content object array (COA) mit einem Bild&lt;br /&gt;
  #Vor dem Rendern werden die ###FILE_x### marker mit den Bildern aus path ersetzt&lt;br /&gt;
  renderObj = COA&lt;br /&gt;
  renderObj {&lt;br /&gt;
    10 = IMAGE&lt;br /&gt;
    10.file = ###FILE_1###&lt;br /&gt;
    // ... weitere Bilder wenn benötigt&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hCard - Microformat ===&lt;br /&gt;
Das Thema Semantic Web wird inzwischen immer interessanter, darum kam ich auf die Idee - fast allein mit TypoScript - das bekannte hCard-Microformat in TYPO3 zu integrieren.&lt;br /&gt;
&lt;br /&gt;
Was wir dafür brauchen ist eine eigene kleine Extension, diese benötigen wir lediglich für eine einzige Zeile Code, welche in die Datei ext_tables.php kommt:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      t3lib_extMgm::addToInsertRecords(&amp;#039;fe_users&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Dazu jetzt noch das TypoScript:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      temp.hcard = COA&lt;br /&gt;
   2.&lt;br /&gt;
      temp.hcard {&lt;br /&gt;
   3.&lt;br /&gt;
      wrap =&lt;br /&gt;
   4.&lt;br /&gt;
      &amp;lt;div id=&amp;quot;hcard&amp;quot; class=&amp;quot;vcard&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
   5.&lt;br /&gt;
       &lt;br /&gt;
   6.&lt;br /&gt;
      10 = IMAGE&lt;br /&gt;
   7.&lt;br /&gt;
      10.file {&lt;br /&gt;
   8.&lt;br /&gt;
      import = uploads/pics/&lt;br /&gt;
   9.&lt;br /&gt;
      import.field = image&lt;br /&gt;
  10.&lt;br /&gt;
      width = 40&lt;br /&gt;
  11.&lt;br /&gt;
      params = class=&amp;quot;photo&amp;quot;&lt;br /&gt;
  12.&lt;br /&gt;
      }&lt;br /&gt;
  13.&lt;br /&gt;
      20 = TEXT&lt;br /&gt;
  14.&lt;br /&gt;
      20.field = name&lt;br /&gt;
  15.&lt;br /&gt;
      20.typolink.parameter.field = url&lt;br /&gt;
  16.&lt;br /&gt;
      20.typolink.ATagParams = class=&amp;quot;url fn&amp;quot;&lt;br /&gt;
  17.&lt;br /&gt;
      30 = TEXT&lt;br /&gt;
  18.&lt;br /&gt;
      30.field = company&lt;br /&gt;
  19.&lt;br /&gt;
      30.wrap =&lt;br /&gt;
  20.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;org&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  21.&lt;br /&gt;
       &lt;br /&gt;
  22.&lt;br /&gt;
      40 = TEXT&lt;br /&gt;
  23.&lt;br /&gt;
      40.field = email&lt;br /&gt;
  24.&lt;br /&gt;
      40.typolink.parameter.field = email&lt;br /&gt;
  25.&lt;br /&gt;
      40.typolink.ATagParams = class=&amp;quot;email&amp;quot;&lt;br /&gt;
  26.&lt;br /&gt;
      50 = COA&lt;br /&gt;
  27.&lt;br /&gt;
      50 {&lt;br /&gt;
  28.&lt;br /&gt;
      wrap =&lt;br /&gt;
  29.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;adr&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  30.&lt;br /&gt;
       &lt;br /&gt;
  31.&lt;br /&gt;
      10 = TEXT&lt;br /&gt;
  32.&lt;br /&gt;
      10.field = address&lt;br /&gt;
  33.&lt;br /&gt;
      10.wrap =&lt;br /&gt;
  34.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;street-address&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  35.&lt;br /&gt;
       &lt;br /&gt;
  36.&lt;br /&gt;
      20 = TEXT&lt;br /&gt;
  37.&lt;br /&gt;
      20.field = city&lt;br /&gt;
  38.&lt;br /&gt;
      20.wrap = &amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  39.&lt;br /&gt;
      30 = TEXT&lt;br /&gt;
  40.&lt;br /&gt;
      30.field = zip&lt;br /&gt;
  41.&lt;br /&gt;
      30.wrap = &amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  42.&lt;br /&gt;
      40 = TEXT&lt;br /&gt;
  43.&lt;br /&gt;
      40.field = country&lt;br /&gt;
  44.&lt;br /&gt;
      40.wrap = &amp;lt;span class=&amp;quot;country-name&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  45.&lt;br /&gt;
      }&lt;br /&gt;
  46.&lt;br /&gt;
      60 = TEXT&lt;br /&gt;
  47.&lt;br /&gt;
      60.field = telephone&lt;br /&gt;
  48.&lt;br /&gt;
      60.wrap =&lt;br /&gt;
  49.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;tel&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  50.&lt;br /&gt;
       &lt;br /&gt;
  51.&lt;br /&gt;
      }&lt;br /&gt;
  52.&lt;br /&gt;
       &lt;br /&gt;
  53.&lt;br /&gt;
      // fe_users dem type shortcut hinzufügen&lt;br /&gt;
  54.&lt;br /&gt;
      tt_content.shortcut.20.0.tables = fe_users&lt;br /&gt;
  55.&lt;br /&gt;
      // für Tabelle fe_users sagen wir jetzt noch wie es gerendert werden soll.&lt;br /&gt;
  56.&lt;br /&gt;
      tt_content.shortcut.20.0.conf.fe_users &amp;lt; temp.hcard&lt;br /&gt;
  57.&lt;br /&gt;
       &lt;br /&gt;
&lt;br /&gt;
Und was hat uns das jetzt gebracht? Ganz einfach:&lt;br /&gt;
&lt;br /&gt;
   1. Wir haben das Content Element &amp;quot;Insert Record&amp;quot; um die Tabelle fe_users erweitert.&lt;br /&gt;
   2. Wir haben mit dem TypoScript aus dem Object &amp;quot;temp.hcard&amp;quot; eine komplette hCard definiert, welche jetzt mit meinem fe_user Datensatz befüllt werden kann.&lt;br /&gt;
   3. Durch die CSS-Klassen kann man die Visitenkarte nun auch noch schön aussehen lassen.&lt;br /&gt;
&lt;br /&gt;
Sind alle Daten vorhanden, könnte der erzeugte HTML-Code dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
       &lt;br /&gt;
   2.&lt;br /&gt;
      &amp;lt;div id=&amp;quot;hcard&amp;quot; class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
   3.&lt;br /&gt;
      &amp;lt;img style=&amp;quot;float:left; margin-right:4px&amp;quot; src=&amp;quot;http://typo3weblog.de/frank.png&amp;quot; alt=&amp;quot;photo of &amp;quot; class=&amp;quot;photo&amp;quot;/&amp;gt;&lt;br /&gt;
   4.&lt;br /&gt;
      &amp;lt;a class=&amp;quot;url fn&amp;quot; href=&amp;quot;http://typo3weblog.de&amp;quot;&amp;gt;Frank Nägler&amp;lt;/a&amp;gt;&lt;br /&gt;
   5.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;org&amp;quot;&amp;gt;TYPO3Weblog.de&amp;lt;/div&amp;gt;&lt;br /&gt;
   6.&lt;br /&gt;
       &lt;br /&gt;
   7.&lt;br /&gt;
      &amp;lt;a class=&amp;quot;email&amp;quot; href=&amp;quot;mailto:frank.naegler@e-netconsulting.rl&amp;quot;&amp;gt;frank.naegler@e-netconsulting.rl&amp;lt;/a&amp;gt;&lt;br /&gt;
   8.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;adr&amp;quot;&amp;gt;&lt;br /&gt;
   9.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;street-address&amp;quot;&amp;gt;Sievekingsallee 150b&amp;lt;/div&amp;gt;&lt;br /&gt;
  10.&lt;br /&gt;
       &lt;br /&gt;
  11.&lt;br /&gt;
      &amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;Hamburg&amp;lt;/span&amp;gt;&lt;br /&gt;
  12.&lt;br /&gt;
      &amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;22111&amp;lt;/span&amp;gt;&lt;br /&gt;
  13.&lt;br /&gt;
      &amp;lt;span class=&amp;quot;country-name&amp;quot;&amp;gt;Deutschland&amp;lt;/span&amp;gt;&lt;br /&gt;
  14.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
  15.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;tel&amp;quot;&amp;gt;+49 (0)7000 623 45 37&amp;lt;/div&amp;gt;&lt;br /&gt;
  16.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
  17.&lt;br /&gt;
       &lt;br /&gt;
&lt;br /&gt;
Cool oder?&lt;br /&gt;
&lt;br /&gt;
Die komplette Extension fn_hcard als T3X Export habe ich hier für Euch zum Download.&lt;br /&gt;
&lt;br /&gt;
Aus Typo3 Adventskalender2008&lt;br /&gt;
&lt;br /&gt;
===Extension: Direct Shortcuts (sms_directshortcuts)===&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/extensions/repository/view/sms_directshortcuts/current/&lt;br /&gt;
TYPO3 generiert, wie jeder weiss, bei internen Verweisen immer eine extra Seite, die selbst wiederum einen redirect macht. Dieses vorgehen hat einerseits den Vorteil, dass man Skripte dazwischen schieben kann um z.B. Klicks zu tracken, anderseits den Nachteil, dass eine “falsche” URL im Menü zu finden ist. Dieser Nachteil macht sich bemerkbar wenn man sich mit der Suchmaschinenoptimierung von TYPO3 Seiten beschäftigt.&lt;br /&gt;
&lt;br /&gt;
== Nützliche TS-Templates ==&lt;br /&gt;
=== Externes JavaScript einbinden ===&lt;br /&gt;
==== JavaScript im Header ====&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
temp.addHeaderData=COA&lt;br /&gt;
[browser = msie]&lt;br /&gt;
temp.addHeaderData{&lt;br /&gt;
  90 = TEXT&lt;br /&gt;
  90.value (&lt;br /&gt;
&amp;lt;script src=&amp;quot;fileadmin/templates/scripts/ielt7.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
  90.wrap = &amp;lt;!--[if lte IE 7]&amp;gt; | &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
  #90.stdWrap.char = 10&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
[global]&lt;br /&gt;
&lt;br /&gt;
Hier wird für IE kleiner als Version 7 ein JavaScript File eingebunden.&lt;br /&gt;
&lt;br /&gt;
==== JavaScript als Marker ====&lt;br /&gt;
Als Temporäres Objekt, kann natürlich auch Javascript in einen Marker eingebunden werden.&lt;br /&gt;
==== JavaScript über Record ====&lt;br /&gt;
Eine Möglichkeit die das leichte ändern der Skripte zuläßt wäre folgende.&lt;br /&gt;
Man legt irgendwo auf einer Seite ein HTML - Element an hinterlegt das Skript und verweist mit TypoScript auf diesen RECORD. Bzw. bindet ihn im Template ein.&lt;br /&gt;
&lt;br /&gt;
ToDo Beispiel&lt;br /&gt;
&lt;br /&gt;
=== xhtml optimierung ===&lt;br /&gt;
Einiges davon braucht man in Version 4+ nicht mehr...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################################&lt;br /&gt;
############ XHTML optimieren&lt;br /&gt;
#######################################################&lt;br /&gt;
&lt;br /&gt;
#Default Javascripts in externes File auslagern&lt;br /&gt;
config.removeDefaultJS = 1&lt;br /&gt;
config.removeDefaultJS = external&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;?xml... ?&amp;gt; Prolog deaktivieren&lt;br /&gt;
config.xmlprologue = none&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;html lang=&amp;quot;de&amp;quot; xml:lang=&amp;quot;de&amp;quot;&amp;gt; auf de setzen&lt;br /&gt;
config.htmlTag_langKey = de&lt;br /&gt;
&lt;br /&gt;
#CSS Datei in externes File auslagern&lt;br /&gt;
config.inlineStyle2TempFile = 1&lt;br /&gt;
config.disablePrefixComment = 1&lt;br /&gt;
&lt;br /&gt;
#RTE Tuning&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.remapTag &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.DIV.class &amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Angabe von Tags, die nicht mit einem zusätzlichen wrap umgeben werden dürfen&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.encapsTagList =  div, p, h1, h2, h3, h4, h5, h6&lt;br /&gt;
&lt;br /&gt;
#Entfernt die zusätzlichen CSS-Klassen&lt;br /&gt;
lib.stdheader.3 = LOAD_REGISTER&lt;br /&gt;
lib.stdheader.3.headerClass =&lt;br /&gt;
lib.stdheader.3.headerClass.noTrimWrap = |&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap = |&lt;br /&gt;
&lt;br /&gt;
#Standard-Headings aufräumen&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap =&lt;br /&gt;
lib.stdheader.10.1.fontTag = &amp;lt;h1&amp;gt;|&amp;lt;/h1&amp;gt;&lt;br /&gt;
lib.stdheader.10.2.fontTag = &amp;lt;h2&amp;gt;|&amp;lt;/h2&amp;gt;&lt;br /&gt;
lib.stdheader.10.3.fontTag = &amp;lt;h3&amp;gt;|&amp;lt;/h3&amp;gt;&lt;br /&gt;
lib.stdheader.10.4.fontTag = &amp;lt;h4&amp;gt;|&amp;lt;/h4&amp;gt;&lt;br /&gt;
lib.stdheader.10.5.fontTag = &amp;lt;h5&amp;gt;|&amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Content Elemente aufräumen und Kommentare entfernen&lt;br /&gt;
#tt_content.stdWrap.dataWrap &amp;gt;&lt;br /&gt;
tt_content.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
#tt_content.header.20.dataWrap &amp;gt;&lt;br /&gt;
tt_content.header.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.default.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.textpic.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.table.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.mailform.20.stdWrap.wrap &amp;gt;&lt;br /&gt;
tt_content.menu.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.image.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.list.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Cleargif entfernen&lt;br /&gt;
tt_content.image.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.header.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.spaceBefore = 0&lt;br /&gt;
tt_content.stdWrap.spaceAfter = 0&lt;br /&gt;
lib.stdheader.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
#Auch hinter den Headlines&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass nonTypoTagStdWrap nur im Inhalt außerhalb von&lt;br /&gt;
#&amp;lt;typolist&amp;gt; und &amp;lt;typohead&amp;gt; arbeitet:&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typolist.breakoutTypoTagContent = 1&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.breakoutTypoTagContent = 1&lt;br /&gt;
&lt;br /&gt;
# ... und kein &amp;lt;BR&amp;gt; vor dem typohead.&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.stdWrap.wrap &amp;gt;&lt;br /&gt;
# Einstellen von nonTypoTagStdWrap, dass der Text mit P-Tags umschlossen wird.&lt;br /&gt;
tt_content.text.20.parseFunc.nonTypoTagStdWrap &amp;gt;&lt;br /&gt;
tt_content.text.20.parseFunc.nonTypoTagStdWrap.encapsLines {&lt;br /&gt;
encapsTagList = div, p&lt;br /&gt;
remapTag.DIV = P&lt;br /&gt;
wrapNonWrappedLines = |&lt;br /&gt;
innerStdWrap_all.ifEmpty =&lt;br /&gt;
innerStdWrap_all.textStyle &amp;lt; tt_content.text.20.textStyle&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Schließlich noch Entfernen der alten textstyle-Formatierung des gesamten Haupttextes.&lt;br /&gt;
tt_content.text.20.textStyle &amp;gt;&lt;br /&gt;
&lt;br /&gt;
# ... und der &amp;lt;BR&amp;gt;-Tag nach dem Inhalt wird auch nicht mehr gebraucht...&lt;br /&gt;
tt_content.text.20.wrap &amp;gt;&lt;br /&gt;
&lt;br /&gt;
# clear.gif entfernen&lt;br /&gt;
tt_content.image.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.header.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.spaceBefore = 0&lt;br /&gt;
tt_content.stdWrap.spaceAfter = 0&lt;br /&gt;
lib.stdheader.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
# clear.gif hinter den Überschriften entfernen&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
#Attribute für p- und pre-tags entfernen&lt;br /&gt;
tt_content.text.20.parseFunc.nonTypoTagStdWrap.encapsLines.addAttributes {&lt;br /&gt;
P.style=&lt;br /&gt;
PRE.style=&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Unterdrückt den Umbruch &amp;lt; br &amp;gt;&lt;br /&gt;
lib.stdheader.10.stdWrap.wrap = |&lt;br /&gt;
tt_content.textpic.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.image.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.textpic.20.noStretchAndMarginCells = 1&lt;br /&gt;
tt_content.image.20.noStretchAndMarginCells = 1&lt;br /&gt;
&lt;br /&gt;
# Setup Anker-Tags entfernen&lt;br /&gt;
tt_content.noANameTagForFirstRecord = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inhalte von Backend-Feldern ausgeben ===&lt;br /&gt;
Hinweise dazu findest du unter:&lt;br /&gt;
&lt;br /&gt;
[[TypoScript - Daten auslesen]]&lt;br /&gt;
&lt;br /&gt;
=== Ein Breadcrumb Menü (Rootline-Menü) ===&lt;br /&gt;
Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#[begin-level] | [end-level]&lt;br /&gt;
# Variante 1: Seite 1 | Seite 2 | Seite 3&lt;br /&gt;
rootlineDelimiter = &amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&lt;br /&gt;
# Variante 2: Seite 1 &amp;gt; Seite 2 &amp;gt; Seite 3&lt;br /&gt;
# delimiter = &amp;amp;nbsp;&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.rootline = HMENU&lt;br /&gt;
temp.rootline {&lt;br /&gt;
   special = rootline&lt;br /&gt;
&lt;br /&gt;
# zeige komplette rootline an&lt;br /&gt;
   special.range = 2|-1&lt;br /&gt;
&lt;br /&gt;
# Variation: zeige Link auf die übergeordnete Seite&lt;br /&gt;
   #special.range = -2|-2&lt;br /&gt;
&lt;br /&gt;
# Text vor dem Rootline Menü&lt;br /&gt;
   wrap = Sie sind hier:&amp;amp;nbsp;|&lt;br /&gt;
&lt;br /&gt;
   special.targets.3 = page&lt;br /&gt;
   1 = TMENU&lt;br /&gt;
   1.target = _top&lt;br /&gt;
   1.NO {&lt;br /&gt;
   	ATagBeforeWrap = 0&lt;br /&gt;
   	stdWrap.htmlSpecialChars = 1&lt;br /&gt;
   	linkWrap = |{$rootlineDelimiter}|*||*| |&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[globalVar = GP:L = 1]&lt;br /&gt;
temp.rootline.wrap = You are here:&amp;amp;nbsp;|&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
&lt;br /&gt;
[globalVar = GP:L = 2]&lt;br /&gt;
temp.rootline.wrap = Vous êtes ici:&amp;amp;nbsp;|&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ein CSS-Template mit Markern nutzen ===&lt;br /&gt;
Ein CSS File wird eingelesen, enthaltene Marker dynamisch ersetzt und die Styles im Headerbereich der Seite als Inline-Styles eingebunden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
color1 = FFE292&lt;br /&gt;
color2 = F68D6F&lt;br /&gt;
color3 = FABD9E&lt;br /&gt;
&lt;br /&gt;
backgroundImage = fileadmin/templates/main/images/navBack-grey.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Setup &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# das Objekt zunächst als Bibliothek zur späteren Verwendung&lt;br /&gt;
lib.stylesheet.default = TEMPLATE&lt;br /&gt;
lib.stylesheet.default {&lt;br /&gt;
# template einlesen&lt;br /&gt;
  template = FILE&lt;br /&gt;
  template.file=fileadmin/templates/main/colors.css&lt;br /&gt;
# Platzhalter ersetzten&lt;br /&gt;
  marks{&lt;br /&gt;
     COLOR1 = TEXT&lt;br /&gt;
     COLOR1.value = {$color1}&lt;br /&gt;
     COLOR2 = TEXT&lt;br /&gt;
     COLOR2.value = {$color2}&lt;br /&gt;
     COLOR3 = TEXT&lt;br /&gt;
     COLOR3.value = {$color3}&lt;br /&gt;
     &lt;br /&gt;
     NAVBACK = TEXT&lt;br /&gt;
     NAVBACK.value = {$backgroundImage}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Stylesheet in Header eintragen&lt;br /&gt;
page.headerData{&lt;br /&gt;
   90 = COA&lt;br /&gt;
   90{&lt;br /&gt;
      wrap = &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!-- | --&amp;gt;&amp;lt;/style&amp;gt;&lt;br /&gt;
      50 &amp;lt; lib.stylesheet.default&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bild aus Media-Feld auslesen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.mediaFieldImage=IMAGE&lt;br /&gt;
temp.mediaFieldImage.file {  &lt;br /&gt;
  import.data = levelmedia: 2,slide  &lt;br /&gt;
  import = uploads/media/  &lt;br /&gt;
  import.listNum = 0  &lt;br /&gt;
  #width = 270  &lt;br /&gt;
  #height= 300&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bild aus Ressourcen Feld auslesen ===&lt;br /&gt;
Hinweis Seiteneigenschaften &amp;gt; Resourcen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 temp.mein Bild = IMG_RESSOURCE&lt;br /&gt;
 temp.mein Bild{&lt;br /&gt;
  file = hintergrund*.jpg&lt;br /&gt;
  stdWrap.wrap = &amp;lt;div style=&amp;quot;background-image: | ; padding: 5px;&amp;quot;&amp;gt; ein Kasten &amp;lt;/div&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Typo3 vergibt beim vervielfältigen automatisch eine Endung. Damit das Bild trotzdem immer gefunden wird, ein Sternchen setzen (Joker)&lt;br /&gt;
&lt;br /&gt;
=== Bild automatisch mit Alt-Tag versehen ===&lt;br /&gt;
Dieses TypoScript füllt das Alt-Tag Feld mit Daten aus dem Bildnamen z.B. wird Unser_Urlaubsort.jpg zu Unser Urlaubsort&lt;br /&gt;
&lt;br /&gt;
[[Bild automatisch mit Alt-Tag versehen]]&lt;br /&gt;
&lt;br /&gt;
=== Logo mit Verlinkung auf die Homepage (1.2)===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Link für das Logo&lt;br /&gt;
# Zahl (Seiten-ID), URL (www.zielseite.de) oder Email-Adresse&lt;br /&gt;
logoLink = 1&lt;br /&gt;
logoFile = fileadmin/templates/images/logo.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Setup &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fügt ein Logo mit Link ein&lt;br /&gt;
&lt;br /&gt;
temp.logo = IMAGE&lt;br /&gt;
temp.logo {&lt;br /&gt;
   #file = /fileadmin/dinos/templates/main/images/logo-rt.gif&lt;br /&gt;
   file = {$logoFile}&lt;br /&gt;
   stdWrap.typolink.parameter = {$logoLink}&lt;br /&gt;
}   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copyright mit immer aktuellem Jahr ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.copyright = COA&lt;br /&gt;
temp.copyright{&lt;br /&gt;
   5= TEXT&lt;br /&gt;
   5.value = &amp;amp;copy;&amp;amp;nbsp;&lt;br /&gt;
   10 = TEXT&lt;br /&gt;
   #HeUte Timestamp einlesen&lt;br /&gt;
   10.data = date:U&lt;br /&gt;
   10.data.strftime = %Y &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ein anderes Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
subparts.footer{&lt;br /&gt;
   10 = TEXT&lt;br /&gt;
   10.data = date:Y&lt;br /&gt;
   10.wrap = &amp;lt;p class=&amp;quot;footer&amp;quot;&amp;gt;&amp;amp;copy;&amp;amp;nbsp;|&amp;amp;nbsp;Ich&amp;lt;/p&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datum der letzten Änderung anzeigen ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 lastChangePrefix = Letzte Änderung:&amp;amp;nbsp;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.lastChange = COA&lt;br /&gt;
temp.lastChange.5 = TEXT&lt;br /&gt;
temp.lastChange.5.value={$lastChangePrefix}&lt;br /&gt;
temp.lastChange.10 = TEXT&lt;br /&gt;
temp.lastChange.10.register:SYS_LASTCHANGED&lt;br /&gt;
temp.lastChange.10.strftime = %d.%m.%Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Variante ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.lastChange = TEXT&lt;br /&gt;
temp.lastChange {&lt;br /&gt;
  data = page:lastUpdated&lt;br /&gt;
  if.isTrue.data = page:lastUpdated&lt;br /&gt;
  date = d.m.Y&lt;br /&gt;
  wrap = Letzte Änderung:&amp;amp;nbsp;|&lt;br /&gt;
  wrap2 = |&lt;br /&gt;
  data = register : SYS_LASTCHANGED&lt;br /&gt;
  if &amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Seiten IDs im Seitenbaum anzeigen ===&lt;br /&gt;
UserTS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
  pageTree.showPageIdWithTitle = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Client Daten des Benutzers ausgeben ===&lt;br /&gt;
&lt;br /&gt;
      temp.browserinfo = COA_INT&lt;br /&gt;
      temp.browserinfo {&lt;br /&gt;
      10 = TEXT&lt;br /&gt;
      10.data = TSFE:clientInfo|SYSTEM&lt;br /&gt;
      10.wrap = &amp;amp;lt;p&amp;amp;gt; | &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
      20 = TEXT&lt;br /&gt;
      20.data = TSFE:clientInfo|BROWSER&lt;br /&gt;
      20.wrap = | &amp;amp;amp;nbsp;&lt;br /&gt;
       &lt;br /&gt;
      30 = TEXT&lt;br /&gt;
      30.data = TSFE:clientInfo|VERSION&lt;br /&gt;
      30.wrap = | &amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
== Die Ausgabe von Inhalten verändern ==&lt;br /&gt;
&lt;br /&gt;
=== Layout-Rahmen verändern===&lt;br /&gt;
[[Typo3 - Rahmen (Frames)]]&lt;br /&gt;
&lt;br /&gt;
=== Rendering von Inhalten ===&lt;br /&gt;
&lt;br /&gt;
=== Ausgeben von Informationen im head der Seite ===&lt;br /&gt;
Wie kann man Stylesheet angaben, Metatags, Skripte etc. im Header ausgeben&lt;br /&gt;
[[Typo3 - Tipps und Tricks]] (page.head Objekt)&lt;br /&gt;
&lt;br /&gt;
=== Unnötige Ausgaben im Quelltext verhindern ===&lt;br /&gt;
[[TYPO3 - Unnötige Ausgaben im Quelltext verhindern]]&lt;br /&gt;
&lt;br /&gt;
== TypoScript - Basiswissen ==&lt;br /&gt;
[[Links mit TypoSkript anlegen]]&lt;br /&gt;
&lt;br /&gt;
== Suche ==&lt;br /&gt;
&lt;br /&gt;
weitere Infos zu Indexed Search:&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - indexed search]]&lt;br /&gt;
&lt;br /&gt;
== Mit HTML und CObj erzeugtes Login ==&lt;br /&gt;
Das Beispiel von Tim Lochmüller aus dem Adventskalender 2008, zeigt wie man mit dem Template Objekte größere HTML - Bausteine verwenden kann.&lt;br /&gt;
&lt;br /&gt;
Login mit TS &amp;amp; cObj TEMPLATE&lt;br /&gt;
Georg Ringer in TYPO3, Templates, Tutorial, TypoScript&lt;br /&gt;
&lt;br /&gt;
Nach der interessanten Vorstellung von cli-Scripten durch Frank in Türchen 15 zeigt das folgende Tutorial einen guten Weg, einen Login/Logout-Bereich mit TS &amp;amp; HTML zu verwirklichen, ohne dabei auf irgendeine Extension zurückgreifen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Folgendes HTML ist notwendig und wird beispielsweise in fileadmin/template/login.html abgelegt: http://pastebin.com/f4e963e25&lt;br /&gt;
Die beiden Subparts sind jeweils für den Login- &amp;amp; Logout-Bereich zuständig und werden mittels Condition umgeschalten.&lt;br /&gt;
&lt;br /&gt;
Das TS ist sehr einfach aufgebaut&lt;br /&gt;
&lt;br /&gt;
    lib.login = TEMPLATE&lt;br /&gt;
    lib.login {&lt;br /&gt;
    template = FILE&lt;br /&gt;
    template.file = fileadmin/template/login.html&lt;br /&gt;
&lt;br /&gt;
    workOnSubpart = TPL_LOGIN&lt;br /&gt;
    marks {&lt;br /&gt;
    URL = TEXT&lt;br /&gt;
    URL.data = getIndpEnv:TYPO3_REQUEST_URL&lt;br /&gt;
&lt;br /&gt;
    PID = TEXT&lt;br /&gt;
    PID.value = 10789&lt;br /&gt;
&lt;br /&gt;
    REGISTER = TEXT&lt;br /&gt;
    REGISTER {&lt;br /&gt;
    value = Mitglied werden&lt;br /&gt;
    typolink {&lt;br /&gt;
    parameter = 10786&lt;br /&gt;
    additionalParams = &amp;amp;tx_srfeuserregister_pi1[cmd]=edit&lt;br /&gt;
    useCacheHash = 1&lt;br /&gt;
    ATagParams = class=”link link1″&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    PWD = TEXT&lt;br /&gt;
    PWD {&lt;br /&gt;
    value = Password vergessen?&lt;br /&gt;
    typolink {&lt;br /&gt;
    parameter = 10788&lt;br /&gt;
    ATagParams = class=”link”&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    PROFILE = TEXT&lt;br /&gt;
    PROFILE {&lt;br /&gt;
    value = Mein Wanderprofil!&lt;br /&gt;
    typolink {&lt;br /&gt;
    parameter = 10790&lt;br /&gt;
    ATagParams = class=”link”&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    [usergroup = *]&lt;br /&gt;
    lib.login.workOnSubpart = TPL_LOGOUT&lt;br /&gt;
&lt;br /&gt;
    [global]&lt;br /&gt;
&lt;br /&gt;
Die notwendigen Variablen sind:&lt;br /&gt;
&lt;br /&gt;
    * URL: Die aktuelle URL, auf die nach dem Login/Logout auch weitergeleitet wird&lt;br /&gt;
    * PID: Id der Seite, die die Benutzer enthält&lt;br /&gt;
&lt;br /&gt;
Nützlich sind weiters:&lt;br /&gt;
&lt;br /&gt;
    * REGISTER: Link zu einer Seite, auf der man sich neu registrieren kann&lt;br /&gt;
    * PWD/PROFILE: Weitere Links zu Seiten nach Bedarf&lt;br /&gt;
&lt;br /&gt;
Die vorgestellte Variante funktioniert out-of-the-box und muss für andere Algorithmen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Das Tutorial soll dazu anregen, das TEMPLATE-Objekt öfters als nur 1x zu verwenden, denn gerade wenn es um das Inkludieren von etwas mehr HTML geht, ist dies der beste, schnellste und sauberste Weg.&lt;br /&gt;
&lt;br /&gt;
== Benutzer ==&lt;br /&gt;
=== Autor-Feld bei neuen Seiten automatisch anlegen ===&lt;br /&gt;
 TCAdefaults.pages.author = &amp;lt;Name des Redakteurs&amp;gt;&lt;br /&gt;
 TCAdefaults.pages.author_email = &amp;lt;EMail-Adresse des Redakteurs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert aber nur dann wenn eine Seite neu angelegt wird. Will man viele Seiten einem Redakteur zuordnen kann man das über eien MySQL abfrage machen:&lt;br /&gt;
&lt;br /&gt;
 UPDATE `pages` SET `author` = &amp;#039;&amp;lt;Name des Redakteurs&amp;gt;&amp;#039;, `author_email` =&lt;br /&gt;
 &amp;#039;&amp;lt;EMail-Adresse des Redakteurs&amp;gt;&amp;#039;&lt;br /&gt;
 WHERE 1 AND `perms_userid` = &amp;lt;UserId des Redakteurs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in perms_userid steht die ID des Besitzers der Seite, deshalb kann man diesen mit Hilfe des Whereclause ausfiltern.&lt;br /&gt;
&lt;br /&gt;
=== Author Feld, Email-Feld und News Author automatisch anlegen ===&lt;br /&gt;
Als weitere Möglichkeit gibt es die Extension cron_setdefaultauthor die genau diese Aufgaben übernimmt. Sie arbeitet im Prinzip wie oben angeführt.&lt;br /&gt;
&lt;br /&gt;
== Ändern von Extension Meldungen durch den Redakteur ==&lt;br /&gt;
&lt;br /&gt;
Adventskalender 2008 von Tim Lochmüller&lt;br /&gt;
Immer wieder erlebe ich es, dass der Kunde Texte selber ändern möchte, klar dafür hat er ja auch von uns TYPO3 bekommen. Leider Zum Glück, möchte der Kunde aber manchmal alles pflegen, also auch Texte die aus LocalLang-Dateien oder Templates kommen.&lt;br /&gt;
&lt;br /&gt;
Eine sehr einfache aber durchaus effektive Lösung dafür ist mal wieder ein wenig TypoScript:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      plugin.tx_myplugin_pi1.searchError = RECORDS&lt;br /&gt;
   2.&lt;br /&gt;
      plugin.tx_myplugin_pi1.searchError {&lt;br /&gt;
   3.&lt;br /&gt;
      tables = tt_content&lt;br /&gt;
   4.&lt;br /&gt;
      source = 123&lt;br /&gt;
   5.&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
Jetzt noch das ContentElement mit der UID 123 im Seitenbaum anlegen und folgenden PHP Code in der Extension verwenden:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      $marker[&amp;#039;###ERR_SEARCH###&amp;#039;] = $this-&amp;gt;cObj-&amp;gt;cObjGetSingle(&lt;br /&gt;
   2.&lt;br /&gt;
      $this-&amp;gt;conf[&amp;#039;searchError&amp;#039;],&lt;br /&gt;
   3.&lt;br /&gt;
      $this-&amp;gt;conf[&amp;#039;searchError.&amp;#039;]&lt;br /&gt;
   4.&lt;br /&gt;
      );&lt;br /&gt;
&lt;br /&gt;
Das war es schon, jetzt enthält der Marker ###ERR_SEARCH### den Content, den der Kunde selbst eingepflegt hat. Natürlich muss man kein RECORD nehmen, sondern kann auch alle anderen TS-Objekte wie TEXT oder IMAGE.&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Baukasten&amp;diff=1633</id>
		<title>Typo3 - Baukasten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Baukasten&amp;diff=1633"/>
		<updated>2009-03-12T15:56:56Z</updated>

		<summary type="html">&lt;p&gt;91.47.50.37: /* Navigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;weitere Infos unter [[Typo3 - Tipps und Tricks]]&lt;br /&gt;
&lt;br /&gt;
== Auf Daten zugreifen ==&lt;br /&gt;
Beispiele gibt es hier:&lt;br /&gt;
&lt;br /&gt;
[[TypoScript - Daten auslesen]]&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - stdWrap]]&lt;br /&gt;
&lt;br /&gt;
Die stdWrap Eigenschaft steht vielen Objekten zur Verfügung. Wenn Sie vorhanden ist ist Sie der Problemlöser für fast alle Probleme :-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - TSFE]]&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Das Media Feld]]&lt;br /&gt;
&lt;br /&gt;
== Standardeinstellungen ==&lt;br /&gt;
[[Typo3 - Standardeinstellungen]]&lt;br /&gt;
&lt;br /&gt;
== Quellcode aufräumen - Sourcecode verbessern - valides XHTML ==&lt;br /&gt;
Der Core produziert seit 4.0 valides XHTML&lt;br /&gt;
&lt;br /&gt;
weitere Hilfen wenn Extensions nicht valide arbeiten bieten:&lt;br /&gt;
&lt;br /&gt;
Installation von Tidy auf dem SErver (aktivieren im Install-Tool)&lt;br /&gt;
&lt;br /&gt;
HTML Cleaner http://typo3.org/extensions/repository/view/qcom_htmlcleaner/2.4.0/&lt;br /&gt;
&lt;br /&gt;
Das Bordeigene HTML-Cleaning: config.xhtml_cleaning = all&lt;br /&gt;
&lt;br /&gt;
Vorsicht bei den Cleanern wenn JavaScript im Spiel ist weil dieser z.T. zerstört werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel aus dem Forum zum Quelltext aufräumen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Einstellen des DocType auf XHTML Transitional&lt;br /&gt;
config.doctype = xhtml_trans&lt;br /&gt;
#XHTML Cleaning aktivieren&lt;br /&gt;
config.xhtml_cleaning = all&lt;br /&gt;
#Default Javascripts in externes File auslagern&lt;br /&gt;
config.removeDefaultJS = 1&lt;br /&gt;
config.removeDefaultJS = external&lt;br /&gt;
#&amp;lt;?xml... ?&amp;gt; Prolog deaktivieren&lt;br /&gt;
config.xmlprologue = none&lt;br /&gt;
#CSS Datei in externes File auslagern&lt;br /&gt;
config.inlineStyle2TempFile = 1&lt;br /&gt;
config.disablePrefixComment = 1&lt;br /&gt;
&lt;br /&gt;
#RTE Tuning&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.remapTag &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.DIV.class &amp;gt;&lt;br /&gt;
#Angabe von Tags, die nicht mit einem zusätzlichen wrap umgeben werden dürfen&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.encapsTagList = cite, div, p, pre, h1, h2, h3, h4, h5, h6&lt;br /&gt;
&lt;br /&gt;
#Entfernt die zusätzlichen CSS-Klassen&lt;br /&gt;
lib.stdheader.3 = LOAD_REGISTER&lt;br /&gt;
lib.stdheader.3.headerClass =&lt;br /&gt;
lib.stdheader.3.headerClass.noTrimWrap = |&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap = |&lt;br /&gt;
&lt;br /&gt;
#Standard-Headings aufräumen&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap =&lt;br /&gt;
lib.stdheader.10.1.fontTag = &amp;lt;h1&amp;gt;|&amp;lt;/h1&amp;gt;&lt;br /&gt;
lib.stdheader.10.2.fontTag = &amp;lt;h2&amp;gt;|&amp;lt;/h2&amp;gt;&lt;br /&gt;
lib.stdheader.10.3.fontTag = &amp;lt;h3&amp;gt;|&amp;lt;/h3&amp;gt;&lt;br /&gt;
lib.stdheader.10.4.fontTag = &amp;lt;h4&amp;gt;|&amp;lt;/h4&amp;gt;&lt;br /&gt;
lib.stdheader.10.5.fontTag = &amp;lt;h5&amp;gt;|&amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Content Elemente aufräumen und Kommentare entfernen&lt;br /&gt;
tt_content.stdWrap.dataWrap &amp;gt;&lt;br /&gt;
tt_content.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.header.20.dataWrap &amp;gt;&lt;br /&gt;
tt_content.header.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.default.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.textpic.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.table.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.mailform.20.stdWrap.wrap &amp;gt;&lt;br /&gt;
tt_content.menu.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.image.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.list.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
=== GMenu mit Bildern aus den Seiteneigenschaften (Media-Feld) ===&lt;br /&gt;
Ein Schnipsel vom 12.3.2009 typo3 blogger&lt;br /&gt;
Nicht sehr oft benötigt, aber unter Umständen dennoch hilfreich: ein kleines Copy&amp;amp;Paste Tutorial zur Erstellung eines GMENUs mit Bildern aus dem “media”-Feld der Seiteneigenschaften. Zu beachten gibt es: der GIFBUILDER greift bei diesem Snippet das Bild nicht an, sodass es unverändert im Frontend ausgegeben wird. Dies hatte bei mir den Grund, dass die Website nur aus Bildern besteht und Photoshop nunmal bessere Ergebnisse als ImageMagick bzw. GraphicsMagick liefert - deshalb wollte ich auch nicht, dass er irgendwas an den Bildern verändert oder neu berechnet.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.menu = HMENU&lt;br /&gt;
temp.menu {&lt;br /&gt;
	1 = GMENU&lt;br /&gt;
	1 {&lt;br /&gt;
		wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
		noBlur = 0&lt;br /&gt;
		NO = 1&lt;br /&gt;
		NO {&lt;br /&gt;
			wrap = &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
			altImgResource.import = uploads/media/&lt;br /&gt;
			altImgResource.import.field = media&lt;br /&gt;
			altImgResource.import.listNum = 0&lt;br /&gt;
 &lt;br /&gt;
			ATagTitle.field = subtitle // title&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		RO = 1&lt;br /&gt;
		RO &amp;lt; .NO&lt;br /&gt;
		RO {&lt;br /&gt;
			altImgResource.import.listNum = 1&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		ACT &amp;lt; .RO&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
lib.menu &amp;lt; temp.menu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Welches Bild (falls mehrere vorhanden sind) TYPO3 nun für das Erzeugen des Menüs nimmt bestimmt folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 altImgResource.import.listNum = 0&lt;br /&gt;
&lt;br /&gt;
Zu beachten gibt es dabei: wie in der Datentechnik üblich fängt man bei 0 zu zählen an, 0 ist dabei das erste Bild, 1 das zweite, 2 das dritte, usw.&lt;br /&gt;
&lt;br /&gt;
=== Klassisches List Menu ===&lt;br /&gt;
Dieses Menü kann als Grundbaustein für alle möglichen Menüs verwendet werden. Man kopiert sich das Menü in ein neues Objekt und modifiziert dort die Eigenschaften wie man sie braucht. Als Alternative gibt es noch das [[Menue als CSS formatierte Liste]] in dem ein fixer Startpunkt vorgegeben ist:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Accessible ====&lt;br /&gt;
benötigt cronaccessiblemenues&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.listMenu = HMENU&lt;br /&gt;
&lt;br /&gt;
# Falls das Menü nicht bei der obersten Ebene anfangen soll&lt;br /&gt;
 temp.listMenu.entryLevel = 1&lt;br /&gt;
&lt;br /&gt;
# Bei Bedarf einzelne Seiten aus dem Menü ausschließen&lt;br /&gt;
#temp.listMenu.excludeUidList = 1,2,3&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.1 = TMENU&lt;br /&gt;
temp.listMenu.1 {&lt;br /&gt;
  wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
  noBlur = 1&lt;br /&gt;
  IProcFunc = user_cronaccessiblemenus-&amp;gt;makeAccessible&lt;br /&gt;
&lt;br /&gt;
//NO.after = xyz&lt;br /&gt;
# Access Keys einschalten&lt;br /&gt;
  IProcFunc.accessKeys = 1&lt;br /&gt;
&lt;br /&gt;
# Hierarchische Nummerierung der Menüpunkte einschalten&lt;br /&gt;
  IProcFunc.dfn = 1&lt;br /&gt;
  IProcFunc.accessKeyWrap = &amp;lt;span class=&amp;quot;accessKey&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  IProcFunc.appendWrap = &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;&amp;amp;nbsp;(ALT-|)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Die folgenden Accesskeys nicht verwenden (bereits belegt)&lt;br /&gt;
&lt;br /&gt;
  IProcFunc.forbiddenKeys = 0,D,B,A,F,X,m,p&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für nicht-aktive Seiten&lt;br /&gt;
&lt;br /&gt;
  NO {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;NO&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;|*|&amp;lt;li class=&amp;quot;NO last&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
#    stdWrap.wrap = |abc&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für Seiten, die sich in der Rootline befinden&lt;br /&gt;
&lt;br /&gt;
  ACT = 1&lt;br /&gt;
  ACT {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;ACT&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;ACT last&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für die aktuelle Seite&lt;br /&gt;
&lt;br /&gt;
  CUR = 1&lt;br /&gt;
  CUR {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;CUR&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;CUR last&amp;quot;&amp;gt; | &amp;lt;span class=&amp;quot;invisible&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    doNotLinkIt = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Gleiche Einstellungen für die nächsten Ebenen&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.2 = TMENU&lt;br /&gt;
temp.listMenu.2 &amp;lt; temp.listMenu.1&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.3 = TMENU&lt;br /&gt;
temp.listMenu.3 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.4 = TMENU&lt;br /&gt;
temp.listMenu.4 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Classic (not accessible) ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.listMenu = HMENU&lt;br /&gt;
&lt;br /&gt;
# Falls das Menü nicht bei der obersten Ebene anfangen soll&lt;br /&gt;
 temp.listMenu.entryLevel = 1&lt;br /&gt;
&lt;br /&gt;
# Bei Bedarf einzelne Seiten aus dem Menü ausschließen&lt;br /&gt;
#temp.listMenu.excludeUidList = 1,2,3&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.1 = TMENU&lt;br /&gt;
temp.listMenu.1 {&lt;br /&gt;
  wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
  noBlur = 1&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für nicht-aktive Seiten&lt;br /&gt;
&lt;br /&gt;
  NO {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;NO&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;|*|&amp;lt;li class=&amp;quot;NO last&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für Seiten, die sich in der Rootline befinden&lt;br /&gt;
&lt;br /&gt;
  ACT = 1&lt;br /&gt;
  ACT {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;ACT&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;ACT last&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    ATagTitle.field = abstract // description&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
# Einstellungen für die aktuelle Seite&lt;br /&gt;
&lt;br /&gt;
  CUR = 1&lt;br /&gt;
  CUR {&lt;br /&gt;
    wrapItemAndSub = |*| &amp;lt;li class=&amp;quot;CUR&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;CUR last&amp;quot;&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;
    stdWrap.htmlSpecialChars = 1&lt;br /&gt;
    doNotLinkIt = 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Gleiche Einstellungen für die nächsten Ebenen&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.2 = TMENU&lt;br /&gt;
temp.listMenu.2 &amp;lt; temp.listMenu.1&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.3 = TMENU&lt;br /&gt;
temp.listMenu.3 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
temp.listMenu.4 = TMENU&lt;br /&gt;
temp.listMenu.4 &amp;lt; temp.listMenu.2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multilanguage Menu ===&lt;br /&gt;
[[Typo3 - Multilanguage Menu]]&lt;br /&gt;
=== Bilder Menü ===&lt;br /&gt;
siehe: [[Typo3 - Bildermenü]]&lt;br /&gt;
=== Einfaches Menü mit 1 Ebene (CSS) ===&lt;br /&gt;
siehe: [[Menue als CSS formatierte Liste]]&lt;br /&gt;
&lt;br /&gt;
=== Menü mit 2 Ebenen als verschachtelte Liste ===&lt;br /&gt;
Dieses Menü ist besonders für vertikale Navigationen geeignet&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Einstieg Level 1&lt;br /&gt;
navi-L12-startID = 1&lt;br /&gt;
navi-L12-delimiter = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
navi-L12-delimiter =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Top Navigation ###&lt;br /&gt;
temp.navi-L12 = HMENU&lt;br /&gt;
temp.navi-L12 {&lt;br /&gt;
  #stdWrap.case = lower&lt;br /&gt;
  special = directory&lt;br /&gt;
  # Seitenid für den Einstieg&lt;br /&gt;
  special.value = {$navi-L12-startID}&lt;br /&gt;
  # Ebene für den Einstieg (nicht vergessen wg. 2. Level)&lt;br /&gt;
  entryLevel = 1&lt;br /&gt;
  1 = TMENU&lt;br /&gt;
  1{&lt;br /&gt;
    noBlur = 1&lt;br /&gt;
    wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
    NO = 1&lt;br /&gt;
    NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
    ACT = 1&lt;br /&gt;
    ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
    ACTIFSUB = 1&lt;br /&gt;
    #Wenn Unterpunkte dann li aufmachen&lt;br /&gt;
    ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&lt;br /&gt;
  }&lt;br /&gt;
  2 = TMENU&lt;br /&gt;
  2{&lt;br /&gt;
   noBlur = 1&lt;br /&gt;
   NO = 1&lt;br /&gt;
   #Unterpunkt also neue ul und danach li zu (von L1 geöffnet)&lt;br /&gt;
   wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
   ACT = 1&lt;br /&gt;
   ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$navi-L12-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  #ACTIFSUB = 1&lt;br /&gt;
  #ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Menü mit 2 Ebenen als separate Listen ===&lt;br /&gt;
Dieses Menü ist besonders für horizontale Navigationen geeignet. &lt;br /&gt;
&lt;br /&gt;
Da die 2. Ebene relativ angegeben wird muß man bei mehreren Navigationsbäumen aufpassen, daß evt. ein Untermenü einer anderen Navigation (anderer Baum) ebenfalls angezeigt wird. Das läßt sich z.B. umgehen in dem man das Navitemplate erst im Unterbaum setzt oder indem man im Hauptbaum eine Bedingung setzt ([PIDinRootline = 123])&lt;br /&gt;
&lt;br /&gt;
Ebene 1 ist im Prinzip eine einfache Liste:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Navi nur Level1&lt;br /&gt;
#Startpunkt&lt;br /&gt;
navi_startID = 1&lt;br /&gt;
&lt;br /&gt;
#Trennzeichen für horizontale Navi:&lt;br /&gt;
naviL1-delimiter = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Top Navigation ###&lt;br /&gt;
temp.naviL1 = HMENU&lt;br /&gt;
temp.naviL1 {&lt;br /&gt;
  #stdWrap.case = lower&lt;br /&gt;
  special = directory&lt;br /&gt;
  # Seitenid für den Einstieg&lt;br /&gt;
  special.value = {$navi_startID}&lt;br /&gt;
  1 = TMENU&lt;br /&gt;
  1.noBlur = 1&lt;br /&gt;
  1.wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
  1.NO = 1&lt;br /&gt;
  1.NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$naviL1-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
  1.ACT = 1&lt;br /&gt;
  1.ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$naviL1-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
  #1.ACTIFSUB = 1&lt;br /&gt;
  #1.ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Ebene 2 wird eine weitere Liste generiert wenn man sich in einem bestimmten Level befindet:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Navigation nur ab Level x  als ul (Standard entry Level1=2.Level)&lt;br /&gt;
&lt;br /&gt;
#Trennzeichen für horizontale Navi:&lt;br /&gt;
naviLx-delimiter = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
naviLx-entryLevel = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.naviLx = HMENU&lt;br /&gt;
temp.naviLx {&lt;br /&gt;
  # Seitenbaumebene ab Level 1 darstellen (2. Ebene)&lt;br /&gt;
   entryLevel = {$naviLx-entryLevel}&lt;br /&gt;
# Level 2&lt;br /&gt;
   1 = TMENU&lt;br /&gt;
   1{&lt;br /&gt;
      noBlur = 1&lt;br /&gt;
      wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;
      NO = 1&lt;br /&gt;
   # Für horizontale Navi mit delimiter bei vertikal einfach nichts setzen&lt;br /&gt;
      NO.linkWrap = |*| &amp;lt;li&amp;gt;|{$naviLx-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      ACT = 1&lt;br /&gt;
   # Für vertikale Navi ohne delimiter...      &lt;br /&gt;
      #ACT.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;
   # und horizontal mit delimiter&lt;br /&gt;
      ACT.linkWrap =  |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|{$naviLx-delimiter}&amp;lt;/li&amp;gt; |*| &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&amp;lt;/li&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
      #ACTIFSUB = 1&lt;br /&gt;
      #ACTIFSUB.linkWrap = &amp;lt;li class=&amp;quot;on&amp;quot;&amp;gt;|&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Menü als CSS formatierte Liste (allgemein) ===&lt;br /&gt;
[[Menue als CSS formatierte Liste]]&lt;br /&gt;
=== CSS-Flyout Menü ===&lt;br /&gt;
[[Typo3 - CSS-Flyout Menü]]&lt;br /&gt;
&lt;br /&gt;
=== Sauberes grafisches Menü ===&lt;br /&gt;
[[Typo3 - Grafisches Menü]]&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
=== Autoparser (automaketemplate und Templateswitcher (tx_rlmptmplselector) konfigurieren ===&lt;br /&gt;
Der Template - Switcher benötigt automaketemplate (oder man arbeitet direkt mit TS-Templates). &lt;br /&gt;
Am besten gleich beide in einem Basis Template konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### SET UP TEMPLATE SELECTOR ###&lt;br /&gt;
plugin.tx_rlmptmplselector_pi1 {&lt;br /&gt;
&lt;br /&gt;
// Define the paths leading to our HTML template files&lt;br /&gt;
   templatePathMain = fileadmin/dinos/templates/main/&lt;br /&gt;
   templatePathSub = fileadmin/dinos/templates/sub/&lt;br /&gt;
&lt;br /&gt;
      // Define the filenames used as the default HTML templates&lt;br /&gt;
   defaultTemplateFileNameMain = main.html&lt;br /&gt;
   defaultTemplateFileNameSub = sub01.html&lt;br /&gt;
&lt;br /&gt;
      // If there is a page having no template selected, use a template&lt;br /&gt;
      // selected earlier in the rootline. If there is none, use the default&lt;br /&gt;
    inheritMainTemplates = 1&lt;br /&gt;
    inheritSubTemplates = 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Autoparser Konfigurieren (alle IDs als Marker) ###&lt;br /&gt;
&lt;br /&gt;
plugin.tx_automaketemplate_pi1{&lt;br /&gt;
#  content = FILE&lt;br /&gt;
#  content.file = fileadmin/templates/main/main.html&lt;br /&gt;
&lt;br /&gt;
  content &amp;lt; plugin.tx_rlmptmplselector_pi1&lt;br /&gt;
  elements {&lt;br /&gt;
    BODY.all = 1&lt;br /&gt;
    BODY.all.subpartMarker = DOCUMENT_BODY&lt;br /&gt;
    HEAD.all = 1&lt;br /&gt;
    HEAD.all.subpartMarker = DOCUMENT_HEADER&lt;br /&gt;
    HEAD.all.rmTagSections = title&lt;br /&gt;
    DIV.all = 1&lt;br /&gt;
    TD.all = 1&lt;br /&gt;
  }&lt;br /&gt;
    relPathPrefix = fileadmin/dinos/templates/main/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== News - Modul ===&lt;br /&gt;
Hier gibt es fertige Konfigurationen:&lt;br /&gt;
[[News (tt_news)]]&lt;br /&gt;
&lt;br /&gt;
=== eCards - sr_sendcard ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# The Fast Way:&lt;br /&gt;
# plugin.tx_srsendcard_pi1._CSS_DEFAULT_STYLE = @import url(&amp;quot;fileadmin/dinos/templates/css/srsendcard.css&amp;quot;);&lt;br /&gt;
# But better is this (more flexible lesser Overhead)&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srsendcard_pi1._CSS_DEFAULT_STYLE &amp;gt;&lt;br /&gt;
&lt;br /&gt;
[PIDinRootline = 14]&lt;br /&gt;
page.includeCSS.file2 = fileadmin/dinos/templates/srsendcard/srsendcard.css&lt;br /&gt;
[global]&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srsendcard_pi1{&lt;br /&gt;
&lt;br /&gt;
templateFile = fileadmin/dinos/templates/srsendcard/srsendcard.tmpl&lt;br /&gt;
locale_all = de_DE&lt;br /&gt;
oldYear = 2006&lt;br /&gt;
# Vorschauseite (wenn gewünscht)&lt;br /&gt;
# previewPID = your_page_id&lt;br /&gt;
enableHTMLMail = 1&lt;br /&gt;
siteEmail = info@start-reutlingen.de&lt;br /&gt;
siteName = Erben der Dinos&lt;br /&gt;
# musicDir = EXT:sr_sendcard/music&lt;br /&gt;
#cardMusicFiles = autumnleaves.mid, OverTheRainbow.mid, Pomp_and_Circumstance.mid&lt;br /&gt;
disableMusic = 1&lt;br /&gt;
maxCol = 2&lt;br /&gt;
imageSmallWidth = 150&lt;br /&gt;
imageSmallHeight = 150&lt;br /&gt;
imageBigWidth = 300&lt;br /&gt;
imageBigHeight = 300&lt;br /&gt;
#logo&lt;br /&gt;
#logoAlignHor = right&lt;br /&gt;
#logoAlignVert = bottom&lt;br /&gt;
#useAlternateImageOnPrint&lt;br /&gt;
### For use with other pids use this one too&lt;br /&gt;
#createPID&lt;br /&gt;
#formPID&lt;br /&gt;
#previewPID&lt;br /&gt;
#useCAPTCHA = 0&lt;br /&gt;
#viewPID&lt;br /&gt;
#printPID&lt;br /&gt;
### Erscheinungsbild ###&lt;br /&gt;
cardStamp = fileadmin/dinos/templates/srsendcard/stamp.gif&lt;br /&gt;
#date_stdWrap&lt;br /&gt;
disableSendDate = 1&lt;br /&gt;
cardBgcolors = #FFFFFF,#A00A1C,#FF993F&lt;br /&gt;
cardFontcolors = #000000, #FFFFFF,#A00A1C&lt;br /&gt;
#disableFontcolors&lt;br /&gt;
#disableFontfaces&lt;br /&gt;
#disableCardOptions&lt;br /&gt;
#graphicMess&lt;br /&gt;
#graphicMessWidth&lt;br /&gt;
#graphicMessFontFiles&lt;br /&gt;
#graphicMessFontSizes&lt;br /&gt;
#fontDir&lt;br /&gt;
#doNotShowCardCaptions&lt;br /&gt;
cardPresentationOrder = manual&lt;br /&gt;
salutation = informal&lt;br /&gt;
#disableBgcolors = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zufallsbild tx_ccrandomimage ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript - Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### zufallsbild erzeugen ###&lt;br /&gt;
includeLibs.tx_ccrandomimage = EXT:cc_random_image/pi1/class.tx_ccrandomimage_pi1.php&lt;br /&gt;
&lt;br /&gt;
// USER_INT means &amp;#039;no caching&amp;#039;&lt;br /&gt;
temp.randomImage = USER_INT&lt;br /&gt;
temp.randomImage{&lt;br /&gt;
  userFunc = tx_ccrandomimage_pi1-&amp;gt;main&lt;br /&gt;
  path = fileadmin/randomImage/&lt;br /&gt;
  fileExt = jpg,jpeg,gif,png&lt;br /&gt;
  #Das Render Objekt ist ein content object array (COA) mit einem Bild&lt;br /&gt;
  #Vor dem Rendern werden die ###FILE_x### marker mit den Bildern aus path ersetzt&lt;br /&gt;
  renderObj = COA&lt;br /&gt;
  renderObj {&lt;br /&gt;
    10 = IMAGE&lt;br /&gt;
    10.file = ###FILE_1###&lt;br /&gt;
    // ... weitere Bilder wenn benötigt&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hCard - Microformat ===&lt;br /&gt;
Das Thema Semantic Web wird inzwischen immer interessanter, darum kam ich auf die Idee - fast allein mit TypoScript - das bekannte hCard-Microformat in TYPO3 zu integrieren.&lt;br /&gt;
&lt;br /&gt;
Was wir dafür brauchen ist eine eigene kleine Extension, diese benötigen wir lediglich für eine einzige Zeile Code, welche in die Datei ext_tables.php kommt:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      t3lib_extMgm::addToInsertRecords(&amp;#039;fe_users&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Dazu jetzt noch das TypoScript:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      temp.hcard = COA&lt;br /&gt;
   2.&lt;br /&gt;
      temp.hcard {&lt;br /&gt;
   3.&lt;br /&gt;
      wrap =&lt;br /&gt;
   4.&lt;br /&gt;
      &amp;lt;div id=&amp;quot;hcard&amp;quot; class=&amp;quot;vcard&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
   5.&lt;br /&gt;
       &lt;br /&gt;
   6.&lt;br /&gt;
      10 = IMAGE&lt;br /&gt;
   7.&lt;br /&gt;
      10.file {&lt;br /&gt;
   8.&lt;br /&gt;
      import = uploads/pics/&lt;br /&gt;
   9.&lt;br /&gt;
      import.field = image&lt;br /&gt;
  10.&lt;br /&gt;
      width = 40&lt;br /&gt;
  11.&lt;br /&gt;
      params = class=&amp;quot;photo&amp;quot;&lt;br /&gt;
  12.&lt;br /&gt;
      }&lt;br /&gt;
  13.&lt;br /&gt;
      20 = TEXT&lt;br /&gt;
  14.&lt;br /&gt;
      20.field = name&lt;br /&gt;
  15.&lt;br /&gt;
      20.typolink.parameter.field = url&lt;br /&gt;
  16.&lt;br /&gt;
      20.typolink.ATagParams = class=&amp;quot;url fn&amp;quot;&lt;br /&gt;
  17.&lt;br /&gt;
      30 = TEXT&lt;br /&gt;
  18.&lt;br /&gt;
      30.field = company&lt;br /&gt;
  19.&lt;br /&gt;
      30.wrap =&lt;br /&gt;
  20.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;org&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  21.&lt;br /&gt;
       &lt;br /&gt;
  22.&lt;br /&gt;
      40 = TEXT&lt;br /&gt;
  23.&lt;br /&gt;
      40.field = email&lt;br /&gt;
  24.&lt;br /&gt;
      40.typolink.parameter.field = email&lt;br /&gt;
  25.&lt;br /&gt;
      40.typolink.ATagParams = class=&amp;quot;email&amp;quot;&lt;br /&gt;
  26.&lt;br /&gt;
      50 = COA&lt;br /&gt;
  27.&lt;br /&gt;
      50 {&lt;br /&gt;
  28.&lt;br /&gt;
      wrap =&lt;br /&gt;
  29.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;adr&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  30.&lt;br /&gt;
       &lt;br /&gt;
  31.&lt;br /&gt;
      10 = TEXT&lt;br /&gt;
  32.&lt;br /&gt;
      10.field = address&lt;br /&gt;
  33.&lt;br /&gt;
      10.wrap =&lt;br /&gt;
  34.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;street-address&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  35.&lt;br /&gt;
       &lt;br /&gt;
  36.&lt;br /&gt;
      20 = TEXT&lt;br /&gt;
  37.&lt;br /&gt;
      20.field = city&lt;br /&gt;
  38.&lt;br /&gt;
      20.wrap = &amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  39.&lt;br /&gt;
      30 = TEXT&lt;br /&gt;
  40.&lt;br /&gt;
      30.field = zip&lt;br /&gt;
  41.&lt;br /&gt;
      30.wrap = &amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  42.&lt;br /&gt;
      40 = TEXT&lt;br /&gt;
  43.&lt;br /&gt;
      40.field = country&lt;br /&gt;
  44.&lt;br /&gt;
      40.wrap = &amp;lt;span class=&amp;quot;country-name&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
  45.&lt;br /&gt;
      }&lt;br /&gt;
  46.&lt;br /&gt;
      60 = TEXT&lt;br /&gt;
  47.&lt;br /&gt;
      60.field = telephone&lt;br /&gt;
  48.&lt;br /&gt;
      60.wrap =&lt;br /&gt;
  49.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;tel&amp;quot;&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;
  50.&lt;br /&gt;
       &lt;br /&gt;
  51.&lt;br /&gt;
      }&lt;br /&gt;
  52.&lt;br /&gt;
       &lt;br /&gt;
  53.&lt;br /&gt;
      // fe_users dem type shortcut hinzufügen&lt;br /&gt;
  54.&lt;br /&gt;
      tt_content.shortcut.20.0.tables = fe_users&lt;br /&gt;
  55.&lt;br /&gt;
      // für Tabelle fe_users sagen wir jetzt noch wie es gerendert werden soll.&lt;br /&gt;
  56.&lt;br /&gt;
      tt_content.shortcut.20.0.conf.fe_users &amp;lt; temp.hcard&lt;br /&gt;
  57.&lt;br /&gt;
       &lt;br /&gt;
&lt;br /&gt;
Und was hat uns das jetzt gebracht? Ganz einfach:&lt;br /&gt;
&lt;br /&gt;
   1. Wir haben das Content Element &amp;quot;Insert Record&amp;quot; um die Tabelle fe_users erweitert.&lt;br /&gt;
   2. Wir haben mit dem TypoScript aus dem Object &amp;quot;temp.hcard&amp;quot; eine komplette hCard definiert, welche jetzt mit meinem fe_user Datensatz befüllt werden kann.&lt;br /&gt;
   3. Durch die CSS-Klassen kann man die Visitenkarte nun auch noch schön aussehen lassen.&lt;br /&gt;
&lt;br /&gt;
Sind alle Daten vorhanden, könnte der erzeugte HTML-Code dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
       &lt;br /&gt;
   2.&lt;br /&gt;
      &amp;lt;div id=&amp;quot;hcard&amp;quot; class=&amp;quot;vcard&amp;quot;&amp;gt;&lt;br /&gt;
   3.&lt;br /&gt;
      &amp;lt;img style=&amp;quot;float:left; margin-right:4px&amp;quot; src=&amp;quot;http://typo3weblog.de/frank.png&amp;quot; alt=&amp;quot;photo of &amp;quot; class=&amp;quot;photo&amp;quot;/&amp;gt;&lt;br /&gt;
   4.&lt;br /&gt;
      &amp;lt;a class=&amp;quot;url fn&amp;quot; href=&amp;quot;http://typo3weblog.de&amp;quot;&amp;gt;Frank Nägler&amp;lt;/a&amp;gt;&lt;br /&gt;
   5.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;org&amp;quot;&amp;gt;TYPO3Weblog.de&amp;lt;/div&amp;gt;&lt;br /&gt;
   6.&lt;br /&gt;
       &lt;br /&gt;
   7.&lt;br /&gt;
      &amp;lt;a class=&amp;quot;email&amp;quot; href=&amp;quot;mailto:frank.naegler@e-netconsulting.rl&amp;quot;&amp;gt;frank.naegler@e-netconsulting.rl&amp;lt;/a&amp;gt;&lt;br /&gt;
   8.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;adr&amp;quot;&amp;gt;&lt;br /&gt;
   9.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;street-address&amp;quot;&amp;gt;Sievekingsallee 150b&amp;lt;/div&amp;gt;&lt;br /&gt;
  10.&lt;br /&gt;
       &lt;br /&gt;
  11.&lt;br /&gt;
      &amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;Hamburg&amp;lt;/span&amp;gt;&lt;br /&gt;
  12.&lt;br /&gt;
      &amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;22111&amp;lt;/span&amp;gt;&lt;br /&gt;
  13.&lt;br /&gt;
      &amp;lt;span class=&amp;quot;country-name&amp;quot;&amp;gt;Deutschland&amp;lt;/span&amp;gt;&lt;br /&gt;
  14.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
  15.&lt;br /&gt;
      &amp;lt;div class=&amp;quot;tel&amp;quot;&amp;gt;+49 (0)7000 623 45 37&amp;lt;/div&amp;gt;&lt;br /&gt;
  16.&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
  17.&lt;br /&gt;
       &lt;br /&gt;
&lt;br /&gt;
Cool oder?&lt;br /&gt;
&lt;br /&gt;
Die komplette Extension fn_hcard als T3X Export habe ich hier für Euch zum Download.&lt;br /&gt;
&lt;br /&gt;
Aus Typo3 Adventskalender2008&lt;br /&gt;
&lt;br /&gt;
===Extension: Direct Shortcuts (sms_directshortcuts)===&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/extensions/repository/view/sms_directshortcuts/current/&lt;br /&gt;
TYPO3 generiert, wie jeder weiss, bei internen Verweisen immer eine extra Seite, die selbst wiederum einen redirect macht. Dieses vorgehen hat einerseits den Vorteil, dass man Skripte dazwischen schieben kann um z.B. Klicks zu tracken, anderseits den Nachteil, dass eine “falsche” URL im Menü zu finden ist. Dieser Nachteil macht sich bemerkbar wenn man sich mit der Suchmaschinenoptimierung von TYPO3 Seiten beschäftigt.&lt;br /&gt;
&lt;br /&gt;
== Nützliche TS-Templates ==&lt;br /&gt;
=== Externes JavaScript einbinden ===&lt;br /&gt;
==== JavaScript im Header ====&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
temp.addHeaderData=COA&lt;br /&gt;
[browser = msie]&lt;br /&gt;
temp.addHeaderData{&lt;br /&gt;
  90 = TEXT&lt;br /&gt;
  90.value (&lt;br /&gt;
&amp;lt;script src=&amp;quot;fileadmin/templates/scripts/ielt7.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
  90.wrap = &amp;lt;!--[if lte IE 7]&amp;gt; | &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
  #90.stdWrap.char = 10&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
[global]&lt;br /&gt;
&lt;br /&gt;
Hier wird für IE kleiner als Version 7 ein JavaScript File eingebunden.&lt;br /&gt;
&lt;br /&gt;
==== JavaScript als Marker ====&lt;br /&gt;
Als Temporäres Objekt, kann natürlich auch Javascript in einen Marker eingebunden werden.&lt;br /&gt;
==== JavaScript über Record ====&lt;br /&gt;
Eine Möglichkeit die das leichte ändern der Skripte zuläßt wäre folgende.&lt;br /&gt;
Man legt irgendwo auf einer Seite ein HTML - Element an hinterlegt das Skript und verweist mit TypoScript auf diesen RECORD. Bzw. bindet ihn im Template ein.&lt;br /&gt;
&lt;br /&gt;
ToDo Beispiel&lt;br /&gt;
&lt;br /&gt;
=== xhtml optimierung ===&lt;br /&gt;
Einiges davon braucht man in Version 4+ nicht mehr...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################################&lt;br /&gt;
############ XHTML optimieren&lt;br /&gt;
#######################################################&lt;br /&gt;
&lt;br /&gt;
#Default Javascripts in externes File auslagern&lt;br /&gt;
config.removeDefaultJS = 1&lt;br /&gt;
config.removeDefaultJS = external&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;?xml... ?&amp;gt; Prolog deaktivieren&lt;br /&gt;
config.xmlprologue = none&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;html lang=&amp;quot;de&amp;quot; xml:lang=&amp;quot;de&amp;quot;&amp;gt; auf de setzen&lt;br /&gt;
config.htmlTag_langKey = de&lt;br /&gt;
&lt;br /&gt;
#CSS Datei in externes File auslagern&lt;br /&gt;
config.inlineStyle2TempFile = 1&lt;br /&gt;
config.disablePrefixComment = 1&lt;br /&gt;
&lt;br /&gt;
#RTE Tuning&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.remapTag &amp;gt;&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.DIV.class &amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Angabe von Tags, die nicht mit einem zusätzlichen wrap umgeben werden dürfen&lt;br /&gt;
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.encapsTagList =  div, p, h1, h2, h3, h4, h5, h6&lt;br /&gt;
&lt;br /&gt;
#Entfernt die zusätzlichen CSS-Klassen&lt;br /&gt;
lib.stdheader.3 = LOAD_REGISTER&lt;br /&gt;
lib.stdheader.3.headerClass =&lt;br /&gt;
lib.stdheader.3.headerClass.noTrimWrap = |&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap = |&lt;br /&gt;
&lt;br /&gt;
#Standard-Headings aufräumen&lt;br /&gt;
lib.stdheader.stdWrap.dataWrap =&lt;br /&gt;
lib.stdheader.10.1.fontTag = &amp;lt;h1&amp;gt;|&amp;lt;/h1&amp;gt;&lt;br /&gt;
lib.stdheader.10.2.fontTag = &amp;lt;h2&amp;gt;|&amp;lt;/h2&amp;gt;&lt;br /&gt;
lib.stdheader.10.3.fontTag = &amp;lt;h3&amp;gt;|&amp;lt;/h3&amp;gt;&lt;br /&gt;
lib.stdheader.10.4.fontTag = &amp;lt;h4&amp;gt;|&amp;lt;/h4&amp;gt;&lt;br /&gt;
lib.stdheader.10.5.fontTag = &amp;lt;h5&amp;gt;|&amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Content Elemente aufräumen und Kommentare entfernen&lt;br /&gt;
#tt_content.stdWrap.dataWrap &amp;gt;&lt;br /&gt;
tt_content.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
#tt_content.header.20.dataWrap &amp;gt;&lt;br /&gt;
tt_content.header.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.default.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.text.20.prefixComment &amp;gt;&lt;br /&gt;
tt_content.textpic.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.table.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.mailform.20.stdWrap.wrap &amp;gt;&lt;br /&gt;
tt_content.menu.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.image.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
tt_content.list.20.stdWrap.prefixComment &amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Cleargif entfernen&lt;br /&gt;
tt_content.image.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.header.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.spaceBefore = 0&lt;br /&gt;
tt_content.stdWrap.spaceAfter = 0&lt;br /&gt;
lib.stdheader.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
#Auch hinter den Headlines&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass nonTypoTagStdWrap nur im Inhalt außerhalb von&lt;br /&gt;
#&amp;lt;typolist&amp;gt; und &amp;lt;typohead&amp;gt; arbeitet:&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typolist.breakoutTypoTagContent = 1&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.breakoutTypoTagContent = 1&lt;br /&gt;
&lt;br /&gt;
# ... und kein &amp;lt;BR&amp;gt; vor dem typohead.&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.stdWrap.wrap &amp;gt;&lt;br /&gt;
# Einstellen von nonTypoTagStdWrap, dass der Text mit P-Tags umschlossen wird.&lt;br /&gt;
tt_content.text.20.parseFunc.nonTypoTagStdWrap &amp;gt;&lt;br /&gt;
tt_content.text.20.parseFunc.nonTypoTagStdWrap.encapsLines {&lt;br /&gt;
encapsTagList = div, p&lt;br /&gt;
remapTag.DIV = P&lt;br /&gt;
wrapNonWrappedLines = |&lt;br /&gt;
innerStdWrap_all.ifEmpty =&lt;br /&gt;
innerStdWrap_all.textStyle &amp;lt; tt_content.text.20.textStyle&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Schließlich noch Entfernen der alten textstyle-Formatierung des gesamten Haupttextes.&lt;br /&gt;
tt_content.text.20.textStyle &amp;gt;&lt;br /&gt;
&lt;br /&gt;
# ... und der &amp;lt;BR&amp;gt;-Tag nach dem Inhalt wird auch nicht mehr gebraucht...&lt;br /&gt;
tt_content.text.20.wrap &amp;gt;&lt;br /&gt;
&lt;br /&gt;
# clear.gif entfernen&lt;br /&gt;
tt_content.image.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.header.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.space = 0|0&lt;br /&gt;
tt_content.stdWrap.spaceBefore = 0&lt;br /&gt;
tt_content.stdWrap.spaceAfter = 0&lt;br /&gt;
lib.stdheader.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
# clear.gif hinter den Überschriften entfernen&lt;br /&gt;
tt_content.text.20.parseFunc.tags.typohead.stdWrap.space = 0|0&lt;br /&gt;
&lt;br /&gt;
#Attribute für p- und pre-tags entfernen&lt;br /&gt;
tt_content.text.20.parseFunc.nonTypoTagStdWrap.encapsLines.addAttributes {&lt;br /&gt;
P.style=&lt;br /&gt;
PRE.style=&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Unterdrückt den Umbruch &amp;lt; br &amp;gt;&lt;br /&gt;
lib.stdheader.10.stdWrap.wrap = |&lt;br /&gt;
tt_content.textpic.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.image.20.spaceBelowAbove = 0&lt;br /&gt;
tt_content.textpic.20.noStretchAndMarginCells = 1&lt;br /&gt;
tt_content.image.20.noStretchAndMarginCells = 1&lt;br /&gt;
&lt;br /&gt;
# Setup Anker-Tags entfernen&lt;br /&gt;
tt_content.noANameTagForFirstRecord = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inhalte von Backend-Feldern ausgeben ===&lt;br /&gt;
Hinweise dazu findest du unter:&lt;br /&gt;
&lt;br /&gt;
[[TypoScript - Daten auslesen]]&lt;br /&gt;
&lt;br /&gt;
=== Ein Breadcrumb Menü (Rootline-Menü) ===&lt;br /&gt;
Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#[begin-level] | [end-level]&lt;br /&gt;
# Variante 1: Seite 1 | Seite 2 | Seite 3&lt;br /&gt;
rootlineDelimiter = &amp;amp;nbsp;&amp;amp;#124;&amp;amp;nbsp;&lt;br /&gt;
# Variante 2: Seite 1 &amp;gt; Seite 2 &amp;gt; Seite 3&lt;br /&gt;
# delimiter = &amp;amp;nbsp;&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.rootline = HMENU&lt;br /&gt;
temp.rootline {&lt;br /&gt;
   special = rootline&lt;br /&gt;
&lt;br /&gt;
# zeige komplette rootline an&lt;br /&gt;
   special.range = 2|-1&lt;br /&gt;
&lt;br /&gt;
# Variation: zeige Link auf die übergeordnete Seite&lt;br /&gt;
   #special.range = -2|-2&lt;br /&gt;
&lt;br /&gt;
# Text vor dem Rootline Menü&lt;br /&gt;
   wrap = Sie sind hier:&amp;amp;nbsp;|&lt;br /&gt;
&lt;br /&gt;
   special.targets.3 = page&lt;br /&gt;
   1 = TMENU&lt;br /&gt;
   1.target = _top&lt;br /&gt;
   1.NO {&lt;br /&gt;
   	ATagBeforeWrap = 0&lt;br /&gt;
   	stdWrap.htmlSpecialChars = 1&lt;br /&gt;
   	linkWrap = |{$rootlineDelimiter}|*||*| |&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[globalVar = GP:L = 1]&lt;br /&gt;
temp.rootline.wrap = You are here:&amp;amp;nbsp;|&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
&lt;br /&gt;
[globalVar = GP:L = 2]&lt;br /&gt;
temp.rootline.wrap = Vous êtes ici:&amp;amp;nbsp;|&lt;br /&gt;
[GLOBAL]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ein CSS-Template mit Markern nutzen ===&lt;br /&gt;
Ein CSS File wird eingelesen, enthaltene Marker dynamisch ersetzt und die Styles im Headerbereich der Seite als Inline-Styles eingebunden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
color1 = FFE292&lt;br /&gt;
color2 = F68D6F&lt;br /&gt;
color3 = FABD9E&lt;br /&gt;
&lt;br /&gt;
backgroundImage = fileadmin/templates/main/images/navBack-grey.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Setup &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# das Objekt zunächst als Bibliothek zur späteren Verwendung&lt;br /&gt;
lib.stylesheet.default = TEMPLATE&lt;br /&gt;
lib.stylesheet.default {&lt;br /&gt;
# template einlesen&lt;br /&gt;
  template = FILE&lt;br /&gt;
  template.file=fileadmin/templates/main/colors.css&lt;br /&gt;
# Platzhalter ersetzten&lt;br /&gt;
  marks{&lt;br /&gt;
     COLOR1 = TEXT&lt;br /&gt;
     COLOR1.value = {$color1}&lt;br /&gt;
     COLOR2 = TEXT&lt;br /&gt;
     COLOR2.value = {$color2}&lt;br /&gt;
     COLOR3 = TEXT&lt;br /&gt;
     COLOR3.value = {$color3}&lt;br /&gt;
     &lt;br /&gt;
     NAVBACK = TEXT&lt;br /&gt;
     NAVBACK.value = {$backgroundImage}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Stylesheet in Header eintragen&lt;br /&gt;
page.headerData{&lt;br /&gt;
   90 = COA&lt;br /&gt;
   90{&lt;br /&gt;
      wrap = &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!-- | --&amp;gt;&amp;lt;/style&amp;gt;&lt;br /&gt;
      50 &amp;lt; lib.stylesheet.default&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bild aus Media-Feld auslesen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.mediaFieldImage=IMAGE&lt;br /&gt;
temp.mediaFieldImage.file {  &lt;br /&gt;
  import.data = levelmedia: 2,slide  &lt;br /&gt;
  import = uploads/media/  &lt;br /&gt;
  import.listNum = 0  &lt;br /&gt;
  #width = 270  &lt;br /&gt;
  #height= 300&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bild aus Ressourcen Feld auslesen ===&lt;br /&gt;
Hinweis Seiteneigenschaften &amp;gt; Resourcen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 temp.mein Bild = IMG_RESSOURCE&lt;br /&gt;
 temp.mein Bild{&lt;br /&gt;
  file = hintergrund*.jpg&lt;br /&gt;
  stdWrap.wrap = &amp;lt;div style=&amp;quot;background-image: | ; padding: 5px;&amp;quot;&amp;gt; ein Kasten &amp;lt;/div&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Typo3 vergibt beim vervielfältigen automatisch eine Endung. Damit das Bild trotzdem immer gefunden wird, ein Sternchen setzen (Joker)&lt;br /&gt;
&lt;br /&gt;
=== Bild automatisch mit Alt-Tag versehen ===&lt;br /&gt;
Dieses TypoScript füllt das Alt-Tag Feld mit Daten aus dem Bildnamen z.B. wird Unser_Urlaubsort.jpg zu Unser Urlaubsort&lt;br /&gt;
&lt;br /&gt;
[[Bild automatisch mit Alt-Tag versehen]]&lt;br /&gt;
&lt;br /&gt;
=== Logo mit Verlinkung auf die Homepage (1.2)===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Link für das Logo&lt;br /&gt;
# Zahl (Seiten-ID), URL (www.zielseite.de) oder Email-Adresse&lt;br /&gt;
logoLink = 1&lt;br /&gt;
logoFile = fileadmin/templates/images/logo.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Setup &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fügt ein Logo mit Link ein&lt;br /&gt;
&lt;br /&gt;
temp.logo = IMAGE&lt;br /&gt;
temp.logo {&lt;br /&gt;
   #file = /fileadmin/dinos/templates/main/images/logo-rt.gif&lt;br /&gt;
   file = {$logoFile}&lt;br /&gt;
   stdWrap.typolink.parameter = {$logoLink}&lt;br /&gt;
}   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copyright mit immer aktuellem Jahr ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.copyright = COA&lt;br /&gt;
temp.copyright{&lt;br /&gt;
   5= TEXT&lt;br /&gt;
   5.value = &amp;amp;copy;&amp;amp;nbsp;&lt;br /&gt;
   10 = TEXT&lt;br /&gt;
   #HeUte Timestamp einlesen&lt;br /&gt;
   10.data = date:U&lt;br /&gt;
   10.data.strftime = %Y &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ein anderes Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
subparts.footer{&lt;br /&gt;
   10 = TEXT&lt;br /&gt;
   10.data = date:Y&lt;br /&gt;
   10.wrap = &amp;lt;p class=&amp;quot;footer&amp;quot;&amp;gt;&amp;amp;copy;&amp;amp;nbsp;|&amp;amp;nbsp;Ich&amp;lt;/p&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datum der letzten Änderung anzeigen ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 lastChangePrefix = Letzte Änderung:&amp;amp;nbsp;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.lastChange = COA&lt;br /&gt;
temp.lastChange.5 = TEXT&lt;br /&gt;
temp.lastChange.5.value={$lastChangePrefix}&lt;br /&gt;
temp.lastChange.10 = TEXT&lt;br /&gt;
temp.lastChange.10.register:SYS_LASTCHANGED&lt;br /&gt;
temp.lastChange.10.strftime = %d.%m.%Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Variante ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
temp.lastChange = TEXT&lt;br /&gt;
temp.lastChange {&lt;br /&gt;
  data = page:lastUpdated&lt;br /&gt;
  if.isTrue.data = page:lastUpdated&lt;br /&gt;
  date = d.m.Y&lt;br /&gt;
  wrap = Letzte Änderung:&amp;amp;nbsp;|&lt;br /&gt;
  wrap2 = |&lt;br /&gt;
  data = register : SYS_LASTCHANGED&lt;br /&gt;
  if &amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Seiten IDs im Seitenbaum anzeigen ===&lt;br /&gt;
UserTS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
  pageTree.showPageIdWithTitle = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Client Daten des Benutzers ausgeben ===&lt;br /&gt;
&lt;br /&gt;
      temp.browserinfo = COA_INT&lt;br /&gt;
      temp.browserinfo {&lt;br /&gt;
      10 = TEXT&lt;br /&gt;
      10.data = TSFE:clientInfo|SYSTEM&lt;br /&gt;
      10.wrap = &amp;amp;lt;p&amp;amp;gt; | &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
      20 = TEXT&lt;br /&gt;
      20.data = TSFE:clientInfo|BROWSER&lt;br /&gt;
      20.wrap = | &amp;amp;amp;nbsp;&lt;br /&gt;
       &lt;br /&gt;
      30 = TEXT&lt;br /&gt;
      30.data = TSFE:clientInfo|VERSION&lt;br /&gt;
      30.wrap = | &amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
== Die Ausgabe von Inhalten verändern ==&lt;br /&gt;
&lt;br /&gt;
=== Layout-Rahmen verändern===&lt;br /&gt;
[[Typo3 - Rahmen (Frames)]]&lt;br /&gt;
&lt;br /&gt;
=== Rendering von Inhalten ===&lt;br /&gt;
&lt;br /&gt;
=== Ausgeben von Informationen im head der Seite ===&lt;br /&gt;
Wie kann man Stylesheet angaben, Metatags, Skripte etc. im Header ausgeben&lt;br /&gt;
[[Typo3 - Tipps und Tricks]] (page.head Objekt)&lt;br /&gt;
&lt;br /&gt;
=== Unnötige Ausgaben im Quelltext verhindern ===&lt;br /&gt;
[[TYPO3 - Unnötige Ausgaben im Quelltext verhindern]]&lt;br /&gt;
&lt;br /&gt;
== TypoScript - Basiswissen ==&lt;br /&gt;
[[Links mit TypoSkript anlegen]]&lt;br /&gt;
&lt;br /&gt;
== Suche ==&lt;br /&gt;
&lt;br /&gt;
weitere Infos zu Indexed Search:&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - indexed search]]&lt;br /&gt;
&lt;br /&gt;
== Mit HTML und CObj erzeugtes Login ==&lt;br /&gt;
Das Beispiel von Tim Lochmüller aus dem Adventskalender 2008, zeigt wie man mit dem Template Objekte größere HTML - Bausteine verwenden kann.&lt;br /&gt;
&lt;br /&gt;
Login mit TS &amp;amp; cObj TEMPLATE&lt;br /&gt;
Georg Ringer in TYPO3, Templates, Tutorial, TypoScript&lt;br /&gt;
&lt;br /&gt;
Nach der interessanten Vorstellung von cli-Scripten durch Frank in Türchen 15 zeigt das folgende Tutorial einen guten Weg, einen Login/Logout-Bereich mit TS &amp;amp; HTML zu verwirklichen, ohne dabei auf irgendeine Extension zurückgreifen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Folgendes HTML ist notwendig und wird beispielsweise in fileadmin/template/login.html abgelegt: http://pastebin.com/f4e963e25&lt;br /&gt;
Die beiden Subparts sind jeweils für den Login- &amp;amp; Logout-Bereich zuständig und werden mittels Condition umgeschalten.&lt;br /&gt;
&lt;br /&gt;
Das TS ist sehr einfach aufgebaut&lt;br /&gt;
&lt;br /&gt;
    lib.login = TEMPLATE&lt;br /&gt;
    lib.login {&lt;br /&gt;
    template = FILE&lt;br /&gt;
    template.file = fileadmin/template/login.html&lt;br /&gt;
&lt;br /&gt;
    workOnSubpart = TPL_LOGIN&lt;br /&gt;
    marks {&lt;br /&gt;
    URL = TEXT&lt;br /&gt;
    URL.data = getIndpEnv:TYPO3_REQUEST_URL&lt;br /&gt;
&lt;br /&gt;
    PID = TEXT&lt;br /&gt;
    PID.value = 10789&lt;br /&gt;
&lt;br /&gt;
    REGISTER = TEXT&lt;br /&gt;
    REGISTER {&lt;br /&gt;
    value = Mitglied werden&lt;br /&gt;
    typolink {&lt;br /&gt;
    parameter = 10786&lt;br /&gt;
    additionalParams = &amp;amp;tx_srfeuserregister_pi1[cmd]=edit&lt;br /&gt;
    useCacheHash = 1&lt;br /&gt;
    ATagParams = class=”link link1″&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    PWD = TEXT&lt;br /&gt;
    PWD {&lt;br /&gt;
    value = Password vergessen?&lt;br /&gt;
    typolink {&lt;br /&gt;
    parameter = 10788&lt;br /&gt;
    ATagParams = class=”link”&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    PROFILE = TEXT&lt;br /&gt;
    PROFILE {&lt;br /&gt;
    value = Mein Wanderprofil!&lt;br /&gt;
    typolink {&lt;br /&gt;
    parameter = 10790&lt;br /&gt;
    ATagParams = class=”link”&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    [usergroup = *]&lt;br /&gt;
    lib.login.workOnSubpart = TPL_LOGOUT&lt;br /&gt;
&lt;br /&gt;
    [global]&lt;br /&gt;
&lt;br /&gt;
Die notwendigen Variablen sind:&lt;br /&gt;
&lt;br /&gt;
    * URL: Die aktuelle URL, auf die nach dem Login/Logout auch weitergeleitet wird&lt;br /&gt;
    * PID: Id der Seite, die die Benutzer enthält&lt;br /&gt;
&lt;br /&gt;
Nützlich sind weiters:&lt;br /&gt;
&lt;br /&gt;
    * REGISTER: Link zu einer Seite, auf der man sich neu registrieren kann&lt;br /&gt;
    * PWD/PROFILE: Weitere Links zu Seiten nach Bedarf&lt;br /&gt;
&lt;br /&gt;
Die vorgestellte Variante funktioniert out-of-the-box und muss für andere Algorithmen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Das Tutorial soll dazu anregen, das TEMPLATE-Objekt öfters als nur 1x zu verwenden, denn gerade wenn es um das Inkludieren von etwas mehr HTML geht, ist dies der beste, schnellste und sauberste Weg.&lt;br /&gt;
&lt;br /&gt;
== Benutzer ==&lt;br /&gt;
=== Autor-Feld bei neuen Seiten automatisch anlegen ===&lt;br /&gt;
 TCAdefaults.pages.author = &amp;lt;Name des Redakteurs&amp;gt;&lt;br /&gt;
 TCAdefaults.pages.author_email = &amp;lt;EMail-Adresse des Redakteurs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert aber nur dann wenn eine Seite neu angelegt wird. Will man viele Seiten einem Redakteur zuordnen kann man das über eien MySQL abfrage machen:&lt;br /&gt;
&lt;br /&gt;
 UPDATE `pages` SET `author` = &amp;#039;&amp;lt;Name des Redakteurs&amp;gt;&amp;#039;, `author_email` =&lt;br /&gt;
 &amp;#039;&amp;lt;EMail-Adresse des Redakteurs&amp;gt;&amp;#039;&lt;br /&gt;
 WHERE 1 AND `perms_userid` = &amp;lt;UserId des Redakteurs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in perms_userid steht die ID des Besitzers der Seite, deshalb kann man diesen mit Hilfe des Whereclause ausfiltern.&lt;br /&gt;
&lt;br /&gt;
=== Author Feld, Email-Feld und News Author automatisch anlegen ===&lt;br /&gt;
Als weitere Möglichkeit gibt es die Extension cron_setdefaultauthor die genau diese Aufgaben übernimmt. Sie arbeitet im Prinzip wie oben angeführt.&lt;br /&gt;
&lt;br /&gt;
== Ändern von Extension Meldungen durch den Redakteur ==&lt;br /&gt;
&lt;br /&gt;
Adventskalender 2008 von Tim Lochmüller&lt;br /&gt;
Immer wieder erlebe ich es, dass der Kunde Texte selber ändern möchte, klar dafür hat er ja auch von uns TYPO3 bekommen. Leider Zum Glück, möchte der Kunde aber manchmal alles pflegen, also auch Texte die aus LocalLang-Dateien oder Templates kommen.&lt;br /&gt;
&lt;br /&gt;
Eine sehr einfache aber durchaus effektive Lösung dafür ist mal wieder ein wenig TypoScript:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      plugin.tx_myplugin_pi1.searchError = RECORDS&lt;br /&gt;
   2.&lt;br /&gt;
      plugin.tx_myplugin_pi1.searchError {&lt;br /&gt;
   3.&lt;br /&gt;
      tables = tt_content&lt;br /&gt;
   4.&lt;br /&gt;
      source = 123&lt;br /&gt;
   5.&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
Jetzt noch das ContentElement mit der UID 123 im Seitenbaum anlegen und folgenden PHP Code in der Extension verwenden:&lt;br /&gt;
&lt;br /&gt;
   1.&lt;br /&gt;
      $marker[&amp;#039;###ERR_SEARCH###&amp;#039;] = $this-&amp;gt;cObj-&amp;gt;cObjGetSingle(&lt;br /&gt;
   2.&lt;br /&gt;
      $this-&amp;gt;conf[&amp;#039;searchError&amp;#039;],&lt;br /&gt;
   3.&lt;br /&gt;
      $this-&amp;gt;conf[&amp;#039;searchError.&amp;#039;]&lt;br /&gt;
   4.&lt;br /&gt;
      );&lt;br /&gt;
&lt;br /&gt;
Das war es schon, jetzt enthält der Marker ###ERR_SEARCH### den Content, den der Kunde selbst eingepflegt hat. Natürlich muss man kein RECORD nehmen, sondern kann auch alle anderen TS-Objekte wie TEXT oder IMAGE.&lt;/div&gt;</summary>
		<author><name>91.47.50.37</name></author>
	</entry>
</feed>