<?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=Kholja</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=Kholja"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/Kholja"/>
	<updated>2026-05-06T17:00:24Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Google_Maps_API_-_Programmieren_f%C3%BCr_Google_Maps&amp;diff=19784</id>
		<title>Google Maps API - Programmieren für Google Maps</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Google_Maps_API_-_Programmieren_f%C3%BCr_Google_Maps&amp;diff=19784"/>
		<updated>2013-04-02T18:24:53Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die folgenden Code Beispiele basieren i.d.R. auf der Google API Version3, bei der kein API Key mehr benötigt wird.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Dokumentation Google Maps API&lt;br /&gt;
 [[https://developers.google.com/maps/documentation/javascript/]]&lt;br /&gt;
&lt;br /&gt;
Google Group zu Google Maps&lt;br /&gt;
 http://groups.google.com/group/google-maps-js-api-v3&lt;br /&gt;
&lt;br /&gt;
Developer Dokumentation von Apple&lt;br /&gt;
 http://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html&lt;br /&gt;
&lt;br /&gt;
Android Dokumentation&lt;br /&gt;
 http://developer.android.com/&lt;br /&gt;
&lt;br /&gt;
Code Completion (Intellisense) für Google Maps API&lt;br /&gt;
 https://gmapvsdoc.codeplex.com/&lt;br /&gt;
 [[Datei:Gmapvsdoc3.v1.zip]]&lt;br /&gt;
&lt;br /&gt;
=== API Links ===&lt;br /&gt;
Google Maps API-Familien (auf deutsch) http://code.google.com/intl/de-DE/apis/maps/&lt;br /&gt;
&lt;br /&gt;
Geocodierung: http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/services.html#Geocoding&lt;br /&gt;
&lt;br /&gt;
Ereignisse (Events): http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/events.html&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
[[Google Maps - Snippets]]&lt;br /&gt;
=== Weiterführende und fortgeschrittene Techniken für Google Maps ===&lt;br /&gt;
[[Google Maps - Benutzerdefinierte Stile]]&lt;br /&gt;
&lt;br /&gt;
[[Google Maps - eigene Marker und Symbole]]&lt;br /&gt;
&lt;br /&gt;
Hier kommen Links rein...&lt;br /&gt;
&lt;br /&gt;
=== Position des Nutzers bestimmen ===&lt;br /&gt;
http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/basics.html#DetectingUserLocation (11/2011)&lt;br /&gt;
&lt;br /&gt;
Google liefert folgendes Code Beispiel. Dabei wird zuerst getestet ob der Browser die HTML5 Geocoding Spezifikation des W3C unterstüzt (http://dev.w3.org/geo/api/spec-source.html). Wenn nicht wird Google Gears getestet und ansonsten eine Fehlermeldung ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Note that using Google Gears requires loading the Javascript&lt;br /&gt;
// at http://code.google.com/apis/gears/gears_init.js&lt;br /&gt;
&lt;br /&gt;
var initialLocation;&lt;br /&gt;
var siberia = new google.maps.LatLng(60, 105);&lt;br /&gt;
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687);&lt;br /&gt;
var browserSupportFlag =  new Boolean();&lt;br /&gt;
&lt;br /&gt;
function initialize() {&lt;br /&gt;
  var myOptions = {&lt;br /&gt;
    zoom: 6,&lt;br /&gt;
    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
  };&lt;br /&gt;
  var map = new google.maps.Map(document.getElementById(&amp;quot;map_canvas&amp;quot;), myOptions);&lt;br /&gt;
  &lt;br /&gt;
  // Try W3C Geolocation (Preferred)&lt;br /&gt;
  if(navigator.geolocation) {&lt;br /&gt;
    browserSupportFlag = true;&lt;br /&gt;
    navigator.geolocation.getCurrentPosition(function(position) {&lt;br /&gt;
      initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);&lt;br /&gt;
      map.setCenter(initialLocation);&lt;br /&gt;
    }, function() {&lt;br /&gt;
      handleNoGeolocation(browserSupportFlag);&lt;br /&gt;
    });&lt;br /&gt;
  // Try Google Gears Geolocation&lt;br /&gt;
  } else if (google.gears) {&lt;br /&gt;
    browserSupportFlag = true;&lt;br /&gt;
    var geo = google.gears.factory.create(&amp;#039;beta.geolocation&amp;#039;);&lt;br /&gt;
    geo.getCurrentPosition(function(position) {&lt;br /&gt;
      initialLocation = new google.maps.LatLng(position.latitude,position.longitude);&lt;br /&gt;
      map.setCenter(initialLocation);&lt;br /&gt;
    }, function() {&lt;br /&gt;
      handleNoGeoLocation(browserSupportFlag);&lt;br /&gt;
    });&lt;br /&gt;
  // Browser doesn&amp;#039;t support Geolocation&lt;br /&gt;
  } else {&lt;br /&gt;
    browserSupportFlag = false;&lt;br /&gt;
    handleNoGeolocation(browserSupportFlag);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function handleNoGeolocation(errorFlag) {&lt;br /&gt;
    if (errorFlag == true) {&lt;br /&gt;
      alert(&amp;quot;Geolocation service failed.&amp;quot;);&lt;br /&gt;
      initialLocation = newyork;&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Your browser doesn&amp;#039;t support geolocation. We&amp;#039;ve placed you in Siberia.&amp;quot;);&lt;br /&gt;
      initialLocation = siberia;&lt;br /&gt;
    }&lt;br /&gt;
    map.setCenter(initialLocation);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sensorparameter einstellen ===&lt;br /&gt;
&lt;br /&gt;
Die Anwendung muß angeben ob sie einen Sensor zur Positionsbestimmung benutzt. Z.B. der GPS Empfänger in einem Handy. Wenn nicht muß trotzdem &amp;quot;false&amp;quot; übergeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Example using sensor when loading the Maps JavaScript API&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://maps.google.com/maps/api/js?sensor=true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimierungen für Mobilgeräte ===&lt;br /&gt;
http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/basics.html#Mobile&lt;br /&gt;
&lt;br /&gt;
Umgebender Div Container (hier mapdiv) mit width:100%. Bei älteren Desktop Browsern kann dies aber zu Schwierigkeiten führen. &lt;br /&gt;
&lt;br /&gt;
Sie können iPhones und Android-Geräte anhand der navigator.userAgent-Eigenschaft im DOM erkennen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function detectBrowser() {&lt;br /&gt;
  var useragent = navigator.userAgent;&lt;br /&gt;
  var mapdiv = document.getElementById(&amp;quot;map_canvas&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
  if (useragent.indexOf(&amp;#039;iPhone&amp;#039;) != -1 || useragent.indexOf(&amp;#039;Android&amp;#039;) != -1 ) {&lt;br /&gt;
    mapdiv.style.width = &amp;#039;100%&amp;#039;;&lt;br /&gt;
    mapdiv.style.height = &amp;#039;100%&amp;#039;;&lt;br /&gt;
  } else {&lt;br /&gt;
    mapdiv.style.width = &amp;#039;600px&amp;#039;;&lt;br /&gt;
    mapdiv.style.height = &amp;#039;800px&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dadurch können Sie das Layout für bestimmte Geräte wie in diesem Beispiel verändern und beispielsweise den verfügbaren Platz auf dem Display für jedes Gerät anpassen.&lt;br /&gt;
&lt;br /&gt;
Das iPhone akzeptiert das folgende &amp;lt;meta&amp;gt;-Tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;initial-scale=1.0, user-scalable=no&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung gibt an, dass diese Karte im Vollbildmodus angezeigt werden soll und ihre Größe vom Nutzer nicht geändert werden kann. Android-Geräte mit Softwareversion 1.5 (Cupcake) unterstützen diese Parameter ebenfalls. Für den iPhone-Browser Safari muss dieses &amp;lt;meta&amp;gt;-Tag im &amp;lt;head&amp;gt;-Element der Seite enthalten sein.&lt;br /&gt;
&lt;br /&gt;
=== Lokalisierung einer v3 App (Sprachanpassung) ===&lt;br /&gt;
==== Sprachlokalisierung und Anpassung der Texte - language Parameter====&lt;br /&gt;
Normalerweise nicht notwendig weil die Sprache des Browsers verwendet wird. Wenn doch dann mit dem Language Parameter.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;amp;language=de&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Gebietslokalisierung - region Parameter ====&lt;br /&gt;
Normalerweise wird die Domain der Homepage für die Regionserkennung verwendet. Manchmal möchte man die Region verändern damit Google Maps richtig gewichtet. Z.B. kann die Suche nach dem Ort Toledo den Ort in Spanien finden oder in den USA. Wenn der Region Parameter auf es steht liefert er stets den Ort in Spanien.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;amp;region=GB&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Richtige API Version laden - der v Parameter ===&lt;br /&gt;
http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/basics.html#Versioning&lt;br /&gt;
&lt;br /&gt;
Wenn man den Parameter nicht nutzt, wird immer die aktuellste Version benutzt. Dies ist in einer Produktivumgebung nicht unbedingt wünschenswert, weil manche Funktionen plötzlich unter umständen nicht mehr funktionieren.&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;
http://maps.google.com/maps/api/js?v=3.1&amp;amp;sensor=true_or_false&lt;br /&gt;
&lt;br /&gt;
=== Kartentyp ändern ===&lt;br /&gt;
Kartentypen werden im Map options-Objekt der Karte mithilfe der mapTypeId-Eigenschaft festgelegt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Kartentypen sind im Google Maps-API verfügbar:&lt;br /&gt;
&lt;br /&gt;
    MapTypeId.ROADMAP zeigt die Standard-Straßenkartenansicht.&lt;br /&gt;
    MapTypeId.SATELLITE zeigt Google Earth-Satellitenbilder.&lt;br /&gt;
    MapTypeId.HYBRID zeigt eine Mischung aus der normalen und der Satellitenansicht.&lt;br /&gt;
    MapTypeId.TERRAIN zeigt eine physische Karte an, die auf Geländeinformationen basiert. &lt;br /&gt;
&lt;br /&gt;
Sie können den Kartentyp einer Karte ändern, indem Sie die setMapTypeId()-Methode der Karte aufrufen.&lt;br /&gt;
&lt;br /&gt;
== Wichtige Google Maps Objekte ==&lt;br /&gt;
Wichtige Objekte anhand von Beispiel Definitionen:&lt;br /&gt;
&lt;br /&gt;
=== LatLng Objekt === &lt;br /&gt;
 var myLatlng = new google.maps.LatLng(-34.397, 150.644);&lt;br /&gt;
&lt;br /&gt;
=== Options Objekt ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myOptions = {&lt;br /&gt;
  zoom: 8,&lt;br /&gt;
  center: myLatlng,&lt;br /&gt;
  mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird normalerweise nicht direkt erzeugt sondern als &amp;quot;Literalobjekt&amp;quot; (also als Zeichenfolge) definiert und dann direkt im Map Objekt verwendet und implizit erzeugt (siehe Map Objekt)&lt;br /&gt;
&lt;br /&gt;
==== Wichtige Optionen ====&lt;br /&gt;
Einige oft benötigte Optionen und was sie machen:&lt;br /&gt;
&lt;br /&gt;
http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/reference.html#MapOptions&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;zoom&amp;#039;&amp;#039; - anfänglicher Zoom Level (0 = World) &amp;#039;&amp;#039;&amp;#039;Erforderlich&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*  &amp;#039;&amp;#039;mapTypeId&amp;#039;&amp;#039; - anfängliche mapTypeId der Karte. &amp;#039;&amp;#039;&amp;#039;Erforderlich&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;center&amp;#039;&amp;#039; - anfängliches Kartenzentrum. &amp;#039;&amp;#039;&amp;#039;Erforderlich&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;disableDefaultUI&amp;#039;&amp;#039; - damit kann man die Standard Bedienelemente ausschalten (true,false). Man kann fast alles auch einzeln ein und ausschalten (Maussteuerung, Tastatursteuerung, verschieben der Karte, etc.). Siehe Link oben.&lt;br /&gt;
* &amp;#039;&amp;#039;navigationControlOptions&amp;#039;&amp;#039;	Anfängliche Anzeigeoptionen für die Navigationssteuerung (position, style).&lt;br /&gt;
&lt;br /&gt;
=== Map Objekt ===&lt;br /&gt;
Das Zentrale Objekt.&lt;br /&gt;
 var map = new google.maps.Map(document.getElementById(&amp;quot;map_canvas&amp;quot;), myOptions);&lt;br /&gt;
&lt;br /&gt;
=== Marker Objekt ===&lt;br /&gt;
Benötigt als Parameter eine Position und optional das Map Objekt. Wenn dies nicht vorhanden ist kann man den Marker später mit &amp;#039;&amp;#039;setMap&amp;#039;&amp;#039; hinzufügen. Mit setMap(null) kann man den Marker entfernen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig haben die Marker einen click Listener.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel - Marker hinzufügen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Marker für die Achalm&lt;br /&gt;
var posAchalm = new google.maps.LatLng(48.493978,9.244276);&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position: posAchalm, &lt;br /&gt;
    map: map,&lt;br /&gt;
    title:&amp;quot;Achalm&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Info Window Objekt ===&lt;br /&gt;
Das folgende Beispiel definiert ein InfoWindow, welches an einen Marker (&amp;quot;marker&amp;quot;) gehängt wird und sich bei Klick öffnet.&lt;br /&gt;
Es funktioniert also mit dem obigen Marker Beispiel zusammen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	// INFOWINDOW&lt;br /&gt;
	// Inhalt festlegen&lt;br /&gt;
	var contentString = &amp;#039;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;div id=&amp;quot;siteNotice&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;h1 id=&amp;quot;firstHeading&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Achalm&amp;lt;/h1&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;div id=&amp;quot;bodyContent&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;p&amp;gt;Die &amp;lt;b&amp;gt;Achalm&amp;lt;/b&amp;gt;, ist der Hausberg der Stadt Reutlingen, &amp;#039; +&lt;br /&gt;
	    &amp;#039;am Rande der schw&amp;amp;auml;bischen Alb gelegen. &amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;p&amp;gt;Attribution: Achalm, &amp;lt;a href=&amp;quot;http://de.wikipedia.org/wiki/Achalm&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;Achalm in der Wikipedia&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
	    &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
	// Fenster erzeugen...&lt;br /&gt;
	var infowindow = new google.maps.InfoWindow({&lt;br /&gt;
		content: contentString,&lt;br /&gt;
		maxWidth: 280&lt;br /&gt;
	});&lt;br /&gt;
	// Klick-Listener an Marker hängen der das Fenster öffnet.&lt;br /&gt;
	google.maps.event.addListener(marker, &amp;#039;click&amp;#039;, function() {&lt;br /&gt;
	  infowindow.open(map,marker);&lt;br /&gt;
	});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Maps Beispiele ==&lt;br /&gt;
=== Komplettes Anwendungsbeispiel (Horex) ===&lt;br /&gt;
Interessant mit ein paar netten Tricks&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var map, mapOptions, panoMap, resultBounds, timeout, markers = [];&lt;br /&gt;
function initialize() {&lt;br /&gt;
// MAP&lt;br /&gt;
//var myMapDiv = document.getElementById(&amp;quot;map_canvas&amp;quot;);&lt;br /&gt;
// or with jQuery&lt;br /&gt;
var myMapDiv = $(&amp;quot;#map_canvas&amp;quot;)[0];&lt;br /&gt;
var latlng = new google.maps.LatLng(51.4634, 9.5581);&lt;br /&gt;
// we need a ID for our new maptype&lt;br /&gt;
var HOREX_MAPTYPE_ID = &amp;#039;HOREX&amp;#039;;&lt;br /&gt;
var myOptions = {&lt;br /&gt;
zoom: 6,&lt;br /&gt;
center: latlng,&lt;br /&gt;
mapTypeId: google.maps.MapTypeId.ROADMAP,&lt;br /&gt;
// new control button to select the maptype id&lt;br /&gt;
mapTypeControlOptions: {&lt;br /&gt;
mapTypeIds: [google.maps.MapTypeId.ROADMAP, HOREX_MAPTYPE_ID]&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
var map = new google.maps.Map(myMapDiv, myOptions);&lt;br /&gt;
// MAP STYLING&lt;br /&gt;
// Neue Map Style Definition&lt;br /&gt;
//#D1A456&lt;br /&gt;
//#565451&lt;br /&gt;
var stylez =&lt;br /&gt;
[&lt;br /&gt;
{ // Strassen&lt;br /&gt;
featureType: &amp;quot;road&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;off&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ //Bahn&lt;br /&gt;
featureType: &amp;quot;transit&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;off&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // POI&lt;br /&gt;
featureType: &amp;quot;poi&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;off&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Landflächen&lt;br /&gt;
featureType: &amp;quot;landscape&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;on&amp;quot; },&lt;br /&gt;
{ hue: &amp;quot;#D1A456&amp;quot; },&lt;br /&gt;
{ saturation: 65 },&lt;br /&gt;
{ lightness: -33 },&lt;br /&gt;
{ gamma: 1 }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Landflächen besiedelung&lt;br /&gt;
featureType: &amp;quot;landscape.man_made&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;off&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Landflächen natur&lt;br /&gt;
featureType: &amp;quot;landscape.natural&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;off&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Grenzen allgemein&lt;br /&gt;
featureType: &amp;quot;administrative&amp;quot;,&lt;br /&gt;
elementType: &amp;quot;geometry&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ lightness: -50},&lt;br /&gt;
{ saturation: 0 },&lt;br /&gt;
{ gamma: 1 },&lt;br /&gt;
{ hue: &amp;quot;#565451&amp;quot; },&lt;br /&gt;
{ visibility: &amp;quot;on&amp;quot; }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Ländergrenzen&lt;br /&gt;
featureType: &amp;quot;administrative.country&amp;quot;,&lt;br /&gt;
elementType: &amp;quot;geometry&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ hue: &amp;quot;#FFFFFF&amp;quot; },&lt;br /&gt;
{ saturation: 100 },&lt;br /&gt;
{ lightness: 100 }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Bundesländer label&lt;br /&gt;
featureType: &amp;quot;administrative.province&amp;quot;,&lt;br /&gt;
elementType: &amp;quot;labels&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{&lt;br /&gt;
visibility: &amp;quot;on&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Bundesländer label&lt;br /&gt;
featureType: &amp;quot;administrative.locality&amp;quot;,&lt;br /&gt;
elementType: &amp;quot;labels&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;simplified&amp;quot; },&lt;br /&gt;
{ invert_lightness: true },&lt;br /&gt;
{ hue: &amp;quot;#565451&amp;quot; },&lt;br /&gt;
{ gamma: 1 },&lt;br /&gt;
{ saturation: 20 },&lt;br /&gt;
{ lightness: 25 }&lt;br /&gt;
]&lt;br /&gt;
},&lt;br /&gt;
{ // Wasser&lt;br /&gt;
featureType: &amp;quot;water&amp;quot;,&lt;br /&gt;
stylers: [&lt;br /&gt;
{ visibility: &amp;quot;on&amp;quot; },&lt;br /&gt;
{ hue: &amp;quot;#cfd1d2&amp;quot; },&lt;br /&gt;
{ lightness: 50 },&lt;br /&gt;
{ saturation: -100 },&lt;br /&gt;
{ gamma: 1 }&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
];&lt;br /&gt;
// Map Zuordnung und Name des Stils&lt;br /&gt;
var styledMapOptions = {&lt;br /&gt;
map: map,&lt;br /&gt;
name: HOREX_MAPTYPE_ID&lt;br /&gt;
}&lt;br /&gt;
var horexMapType = new google.maps.StyledMapType(stylez,styledMapOptions);&lt;br /&gt;
// Style auswählen&lt;br /&gt;
map.mapTypes.set(HOREX_MAPTYPE_ID, horexMapType);&lt;br /&gt;
map.setMapTypeId(HOREX_MAPTYPE_ID);&lt;br /&gt;
// Zoom auf Deutschland&lt;br /&gt;
//geocoder = new google.maps.Geocoder();&lt;br /&gt;
//findAddress(map,&amp;quot;Germany&amp;quot;);&lt;br /&gt;
// Marker setzen und in Array speichern&lt;br /&gt;
var markers=setMarkers(map);&lt;br /&gt;
}&lt;br /&gt;
function setMarkers(map) {&lt;br /&gt;
// This will hold all the markers for the clustering&lt;br /&gt;
// Get the JSON data that shall be mapped.&lt;br /&gt;
$.getJSON(&amp;quot;http://www.horex.com/fileadmin/js/sampledata/horex.json&amp;quot;, function(json){&lt;br /&gt;
//Make sure we have a markers array, holding some data.&lt;br /&gt;
//alert(json.markers.length);&lt;br /&gt;
if (json.markers &amp;amp;&amp;amp; json.markers.length){&lt;br /&gt;
//New bounds object for the total results&amp;#039; bb.&lt;br /&gt;
var bounds = new google.maps.LatLngBounds();&lt;br /&gt;
//Loop through the JSON array&amp;#039;s markers array.&lt;br /&gt;
$.each(json.markers, function(i){&lt;br /&gt;
///&amp;#039;this&amp;#039; refers to the array element of the current loop iteration index.&lt;br /&gt;
var data = this;&lt;br /&gt;
// Object position&lt;br /&gt;
var point = new google.maps.LatLng(data.lat,data.lng)&lt;br /&gt;
// New Object -&amp;gt; extend Bounds&lt;br /&gt;
bounds.extend(point);&lt;br /&gt;
// Data object that shall be assigned to the marker object.&lt;br /&gt;
var marker_data = {&lt;br /&gt;
&amp;quot;id&amp;quot;: data.id,&lt;br /&gt;
&amp;quot;name&amp;quot;: data.name,&lt;br /&gt;
&amp;quot;title&amp;quot;: data.title,&lt;br /&gt;
&amp;quot;street&amp;quot;: data.street,&lt;br /&gt;
&amp;quot;city&amp;quot;: data.city,&lt;br /&gt;
&amp;quot;country&amp;quot;: data.country,&lt;br /&gt;
&amp;quot;telephone&amp;quot;:data.telephone,&lt;br /&gt;
&amp;quot;postcode&amp;quot;:data.postcode,&lt;br /&gt;
&amp;quot;www&amp;quot;: data.www,&lt;br /&gt;
&amp;quot;email&amp;quot;: data.email,&lt;br /&gt;
&amp;quot;lat&amp;quot;: data.lat,&lt;br /&gt;
&amp;quot;lng&amp;quot;: data.lng,&lt;br /&gt;
&amp;quot;category&amp;quot;: data.category,&lt;br /&gt;
&amp;quot;icon&amp;quot;: data.icon,&lt;br /&gt;
&amp;quot;details&amp;quot;: data.details&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
* New google.maps.Marker object for &amp;#039;this&amp;#039; Object.&lt;br /&gt;
**/&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
map: map,&lt;br /&gt;
icon: &amp;#039;http://www.horex.com/fileadmin/js/&amp;#039;+data.icon,&lt;br /&gt;
flat: true,&lt;br /&gt;
category: data.category,&lt;br /&gt;
title: unescape(data.title),&lt;br /&gt;
data: marker_data&lt;br /&gt;
});&lt;br /&gt;
// Map markers with raising timeout (just eye-catching).&lt;br /&gt;
//$.doTimeout(i*300, function(){&lt;br /&gt;
marker.setValues({&lt;br /&gt;
position: point,&lt;br /&gt;
//animation:google.maps.Animation.DROP&lt;br /&gt;
});&lt;br /&gt;
//}); i++;&lt;br /&gt;
// Push the marker object to the markers array.&lt;br /&gt;
markers.push(marker);&lt;br /&gt;
// Add event listener that will trigger the infoWindow.&lt;br /&gt;
google.maps.event.addListener(marker, &amp;quot;click&amp;quot;, function(){&lt;br /&gt;
// panTo just looks &amp;#039;nicer&amp;#039; than setCenter.&lt;br /&gt;
map.panTo(marker.position);&lt;br /&gt;
// Add a delay for a smoother pop-up animation.&lt;br /&gt;
$.doTimeout(600, function(){&lt;br /&gt;
// Call the custom info Window function.&lt;br /&gt;
showDetails(marker.data);&lt;br /&gt;
/**&lt;br /&gt;
* Workaround for an issue that loads some tiles&lt;br /&gt;
* in plain grey when initializing a map and on-&lt;br /&gt;
* screen of that map object are timed very close.&lt;br /&gt;
**/&lt;br /&gt;
google.maps.event.trigger(panoMap, &amp;#039;resize&amp;#039;);&lt;br /&gt;
});// End doTimeout callback function&lt;br /&gt;
});// end eventListener for Marker&lt;br /&gt;
});// End JSON Loop&lt;br /&gt;
// Save all markers&amp;#039; bounding box to a global variable.&lt;br /&gt;
resultBounds = bounds;&lt;br /&gt;
// Set the viewport to optimal fit to all results&amp;#039; bb.&lt;br /&gt;
//map.fitBounds(resultBounds);&lt;br /&gt;
var actZoom = map.getZoom();&lt;br /&gt;
map.setZoom(6);&lt;br /&gt;
} // end if json markers&lt;br /&gt;
/*&lt;br /&gt;
// MarkerClusterer&lt;br /&gt;
var markerClusterer = null;&lt;br /&gt;
var markerClustererStyles = [{&lt;br /&gt;
url: &amp;#039;http://www.horex.com/fileadmin/js/images/m1.png&amp;#039;,&lt;br /&gt;
height: 35,&lt;br /&gt;
width: 35,&lt;br /&gt;
textColor: &amp;#039;#ffffff&amp;#039;,&lt;br /&gt;
textSize: 10&lt;br /&gt;
}, {&lt;br /&gt;
url: &amp;#039;http://www.horex.com/fileadmin/js/images/m2.png&amp;#039;,&lt;br /&gt;
height: 45,&lt;br /&gt;
width: 45,&lt;br /&gt;
textColor: &amp;#039;#ffffff&amp;#039;,&lt;br /&gt;
textSize: 11&lt;br /&gt;
}, {&lt;br /&gt;
url: &amp;#039;http://www.horex.com/fileadmin/js/images/m3.png&amp;#039;,&lt;br /&gt;
height: 55,&lt;br /&gt;
width: 55,&lt;br /&gt;
textColor: &amp;#039;#ffffff&amp;#039;,&lt;br /&gt;
textSize: 12&lt;br /&gt;
}]&lt;br /&gt;
var markerClustererOptions = {&lt;br /&gt;
gridSize: 35,&lt;br /&gt;
maxZoom: 10,&lt;br /&gt;
styles: markerClustererStyles&lt;br /&gt;
};&lt;br /&gt;
var markerCluster = new MarkerClusterer(map,markers,markerClustererOptions);&lt;br /&gt;
*/&lt;br /&gt;
});&lt;br /&gt;
return markers;&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
* Function showDetails&lt;br /&gt;
* @author: Stephan Schmitz &amp;lt;eyecatchup@gmail.com&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
* @description: Using jQueryUI modal dialogs instead of InfoWindows, to&lt;br /&gt;
* show the marker object&amp;#039;s data details. Dialog overlays&lt;br /&gt;
* contain all custom data that have been assigned to the&lt;br /&gt;
* marker and also a street-view map of the markers point&lt;br /&gt;
* to enhance the overview. (If there is no streetview&lt;br /&gt;
* available, a standard map will be shown.)&lt;br /&gt;
**/&lt;br /&gt;
function showDetails(data){&lt;br /&gt;
// Objects position as google.maps.LatLng object.&lt;br /&gt;
var point = new google.maps.LatLng(data.lat,data.lng);&lt;br /&gt;
// Set the options for the info window map object to be created.&lt;br /&gt;
/*&lt;br /&gt;
var panoMapOptions = {&lt;br /&gt;
center: point,&lt;br /&gt;
zoom: 14,&lt;br /&gt;
mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
};&lt;br /&gt;
*/&lt;br /&gt;
// Initialize the info window map.&lt;br /&gt;
/*&lt;br /&gt;
panoMap = new google.maps.Map($(&amp;#039;#panoMap&amp;#039;)[0],&lt;br /&gt;
panoMapOptions);&lt;br /&gt;
*/&lt;br /&gt;
// Set the options for the google.maps.StreetViewPanorama.&lt;br /&gt;
/*&lt;br /&gt;
var panoramaOptions = {&lt;br /&gt;
position: point,&lt;br /&gt;
pov:{&lt;br /&gt;
heading: 34,&lt;br /&gt;
pitch: 10,&lt;br /&gt;
zoom: 0}};&lt;br /&gt;
*/&lt;br /&gt;
// Initialize the google.maps.StreetViewPanorama.&lt;br /&gt;
/*&lt;br /&gt;
var panorama = new google.maps.StreetViewPanorama(&lt;br /&gt;
$(&amp;#039;#panoMap&amp;#039;)[0],panoramaOptions);&lt;br /&gt;
*/&lt;br /&gt;
// Set the Streeview Overlay.&lt;br /&gt;
//panoMap.setStreetView(panorama);&lt;br /&gt;
/**&lt;br /&gt;
* The &amp;#039;template&amp;#039; for the data, shown in the info window.&lt;br /&gt;
**/&lt;br /&gt;
var br = &amp;#039;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
$(&amp;#039;#data&amp;#039;).empty()&lt;br /&gt;
.html(&lt;br /&gt;
&amp;#039;&amp;lt;div class=&amp;quot;headerimg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://www.horex.com/fileadmin/js/images/vertrieb_logo.gif&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div class=&amp;quot;headline&amp;quot;&amp;gt;&amp;#039;+data.title+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div class=&amp;quot;headline2&amp;quot;&amp;gt;&amp;#039;+data.name+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div&amp;gt;&amp;#039;+data.postcode+&amp;#039; &amp;#039;+data.city+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+br+&lt;br /&gt;
&amp;#039;&amp;lt;div&amp;gt;&amp;#039;+data.street+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div&amp;gt;Tel.: &amp;#039;+data.telephone+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div&amp;gt;E-Mail: &amp;lt;a href=&amp;quot;mailto:&amp;#039;+data.email+&amp;#039;&amp;quot;&amp;gt;&amp;#039;+data.email+&amp;#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div&amp;gt;Website: &amp;lt;a href=&amp;quot;http://&amp;#039;+data.www+&amp;#039;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;#039;+data.www+&amp;#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div class=&amp;quot;geosearch-details&amp;quot;&amp;gt;&amp;#039;+data.details+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div class=&amp;quot;map-printlink&amp;quot; style=&amp;quot;cursor:pointer; width:21px;&amp;quot; onclick=&amp;quot;window.print();&amp;quot;&amp;gt;&amp;lt;img width=&amp;quot;21&amp;quot; height=&amp;quot;16&amp;quot; border=&amp;quot;0&amp;quot; title=&amp;quot;drucken&amp;quot; alt=&amp;quot;drucken&amp;quot; style=&amp;quot;margin-top: 20px;&amp;quot; src=&amp;quot;http://www.horex.com/fileadmin/templates_v2/media/print.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;div class=&amp;quot;route&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Route finden&amp;lt;/strong&amp;gt;&amp;#039;+br+&lt;br /&gt;
&amp;#039;&amp;lt;form id=&amp;quot;routefinder&amp;quot; action=&amp;quot;http://maps.google.de&amp;quot; method=&amp;quot;GET&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;saddr&amp;quot; name=&amp;quot;saddr&amp;quot; value=&amp;quot;Abfahrtsort&amp;quot; onclick=&amp;quot;if(this.value==\&amp;#039;Abfahrtsort\&amp;#039;)this.value=\&amp;#039;\&amp;#039;;&amp;quot;/&amp;gt;&amp;#039;+&lt;br /&gt;
&amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; id=&amp;quot;daddr&amp;quot; name=&amp;quot;daddr&amp;quot; value=&amp;quot;&amp;#039;+data.city+&amp;#039;,&amp;#039;+data.street+&amp;#039;&amp;quot;/&amp;gt;&amp;#039;+br+&lt;br /&gt;
&amp;#039;&amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;route_button&amp;quot; value=&amp;quot;Absenden&amp;quot;&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
);&lt;br /&gt;
/**&lt;br /&gt;
* Set the dialog options for the info windows.&lt;br /&gt;
**/&lt;br /&gt;
$(&amp;#039;#dialog&amp;#039;).dialog({&lt;br /&gt;
width: 675,&lt;br /&gt;
modal: true,&lt;br /&gt;
position: [&amp;#039;center&amp;#039;,&amp;#039;center&amp;#039;],&lt;br /&gt;
title: &amp;quot; &amp;quot;,&lt;br /&gt;
autoOpen: true,&lt;br /&gt;
closeOnEscape:true,&lt;br /&gt;
draggable: true,&lt;br /&gt;
show: &amp;quot;slide&amp;quot;,&lt;br /&gt;
hide: &amp;quot;slide&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
// Zoom auf Adresse Funktion (mit geocoder siehe init)&lt;br /&gt;
function findAddress(map,address) {&lt;br /&gt;
if (!address)&lt;br /&gt;
var address=document.getElementById(&amp;quot;countryselect&amp;quot;).value;&lt;br /&gt;
if ((address != &amp;#039;&amp;#039;) &amp;amp;&amp;amp; geocoder) {&lt;br /&gt;
geocoder.geocode( { &amp;#039;address&amp;#039;: address}, function(results, status) {&lt;br /&gt;
if (status == google.maps.GeocoderStatus.OK) {&lt;br /&gt;
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {&lt;br /&gt;
if (results &amp;amp;&amp;amp; results[0] &amp;amp;&amp;amp; results[0].geometry &amp;amp;&amp;amp; results[0].geometry.viewport)&lt;br /&gt;
map.fitBounds(results[0].geometry.viewport);&lt;br /&gt;
} else {&lt;br /&gt;
alert(&amp;quot;No results found&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
} else {&lt;br /&gt;
alert(&amp;quot;Geocode was not successful for the following reason: &amp;quot; + status);&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
* jQuery doTimeout: Like setTimeout, but better! - v1.0 - 3/3/2010&lt;br /&gt;
* http://benalman.com/projects/jquery-dotimeout-plugin/&lt;br /&gt;
*&lt;br /&gt;
* Copyright (c) 2010 &amp;quot;Cowboy&amp;quot; Ben Alman&lt;br /&gt;
* Dual licensed under the MIT and GPL licenses.&lt;br /&gt;
* http://benalman.com/about/license/&lt;br /&gt;
**/&lt;br /&gt;
(function($){var a={},c=&amp;quot;doTimeout&amp;quot;,d=Array.prototype.slice;$[c]=function(){return b.apply(window,[0].concat(d.call(arguments)))};$.fn[c]=function(){var f=d.call(arguments),e=b.apply(this,[c+f[0]].concat(f));return typeof f[0]===&amp;quot;number&amp;quot;||typeof f[1]===&amp;quot;number&amp;quot;?this:e};function b(l){var m=this,h,k={},g=l?$.fn:$,n=arguments,i=4,f=n[1],j=n[2],p=n[3];if(typeof f!==&amp;quot;string&amp;quot;){i--;f=l=0;j=n[1];p=n[2]}if(l){h=m.eq(0);h.data(l,k=h.data(l)||{})}else{if(f){k=a[f]||(a[f]={})}}k.id&amp;amp;&amp;amp;clearTimeout(k.id);delete k.id;function e(){if(l){h.removeData(l)}else{if(f){delete a[f]}}}function o(){k.id=setTimeout(function(){k.fn()},j)}if(p){k.fn=function(q){if(typeof p===&amp;quot;string&amp;quot;){p=g[p]}p.apply(m,d.call(n,i))===true&amp;amp;&amp;amp;!q?o():e()};o()}else{if(k.fn){j===undefined?e():k.fn(j===false);return true}else{e()}}}})(jQuery);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiele auf Google: http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/examples/index.html&lt;br /&gt;
=== Simple Map ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;initial-scale=1.0, user-scalable=no&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://maps.google.com/maps/api/js?sensor=set_to_true_or_false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  function initialize() {&lt;br /&gt;
    var latlng = new google.maps.LatLng(-34.397, 150.644);&lt;br /&gt;
    var myOptions = {&lt;br /&gt;
      zoom: 8,&lt;br /&gt;
      center: latlng,&lt;br /&gt;
      mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
    };&lt;br /&gt;
    var map = new google.maps.Map(document.getElementById(&amp;quot;map_canvas&amp;quot;), myOptions);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body onload=&amp;quot;initialize()&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;map_canvas&amp;quot; style=&amp;quot;width:100%; height:100%&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Gmapvsdoc3.v1.zip&amp;diff=19783</id>
		<title>Datei:Gmapvsdoc3.v1.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Gmapvsdoc3.v1.zip&amp;diff=19783"/>
		<updated>2013-04-02T18:23:36Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Google Maps Code Completion für Aptana Studio und VisualStudio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Maps Code Completion für Aptana Studio und VisualStudio&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19400</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19400"/>
		<updated>2012-11-05T09:34:29Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* eID AJAX mit jQuery und JSON Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eID AJAX mit jQuery und JSON Beispiel ==&lt;br /&gt;
Beispiel der Extension gbglossary&lt;br /&gt;
=== eID Parameter registrieren ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 // Register eid&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;gbglossaryeid&amp;#039;] = &amp;#039;EXT:gbglossary/eid/class.gbglossary_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Typo3 sucht nach der angegebenen Klasse wenn der Parameter&lt;br /&gt;
 eID=gbglossaryeid in der URL angegeben wird.&lt;br /&gt;
&lt;br /&gt;
=== PHP Klasse erstellen ===&lt;br /&gt;
Über die Klasse tx_gbglossary_eid holen wir uns alle Datensätze aus der Datenbank und geben Sie als JSON Objekt aus. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.gbglossary_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbglossary_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbglossary_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbglossary_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbglossary&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
		&lt;br /&gt;
		// Create select&lt;br /&gt;
		$select = &amp;#039;&amp;#039;;&lt;br /&gt;
		$dbFields = array(&lt;br /&gt;
			&amp;#039;tx_gbglossary_terms.uid AS terms_uid&amp;#039;,&lt;br /&gt;
			&amp;#039;tx_gbglossary_terms.title AS terms_title&amp;#039;&lt;br /&gt;
		);&lt;br /&gt;
		foreach ($dbFields as $key =&amp;gt; $value){&lt;br /&gt;
			$select.=$value.&amp;#039;, &amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		$select = rtrim(rtrim($select),&amp;#039;,&amp;#039;);&lt;br /&gt;
		// Create from (example for n:m JOIN)&lt;br /&gt;
		$from = &amp;#039;&amp;#039;;&lt;br /&gt;
		$from = &amp;#039;&lt;br /&gt;
			(	&lt;br /&gt;
				( &lt;br /&gt;
						tx_gbglossary_terms LEFT OUTER JOIN tx_gbglossary_terms_topic_mm &lt;br /&gt;
						ON tx_gbglossary_terms.uid = tx_gbglossary_terms_topic_mm.uid_local&lt;br /&gt;
				)&lt;br /&gt;
				LEFT OUTER JOIN tx_gbglossary_topic &lt;br /&gt;
				ON tx_gbglossary_terms_topic_mm.uid_foreign = tx_gbglossary_topic.uid&lt;br /&gt;
				)&lt;br /&gt;
		&amp;#039;;&lt;br /&gt;
		// Create where&lt;br /&gt;
		$where = &amp;#039;&amp;#039;;&lt;br /&gt;
		$where = &amp;quot;tx_gbglossary_terms.deleted=0 AND tx_gbglossary_terms.hidden=0&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
		 	$select,&lt;br /&gt;
		 	$from,&lt;br /&gt;
		 	$where,&lt;br /&gt;
			$groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
			$orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
		 	$limit=&amp;#039;&amp;#039;&lt;br /&gt;
		);&lt;br /&gt;
		$arrJSON = array();&lt;br /&gt;
		while (($row = $GLOBALS[&amp;quot;TYPO3_DB&amp;quot;]-&amp;gt;sql_fetch_assoc($res))){&lt;br /&gt;
			$arrJSON[]=$row;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
		$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbglossary_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Test im Browser zeigt einen schönen JSON String mit den abgefragten Daten.&lt;br /&gt;
&lt;br /&gt;
 http://localhost/typo3_test/index.php?id=178&amp;amp;eID=gbglossaryeid&lt;br /&gt;
&lt;br /&gt;
=== JSON Daten per jQuery AJAX holen und in der Webseite darstellen ===&lt;br /&gt;
jQuery macht das Handling einfach.&lt;br /&gt;
&lt;br /&gt;
In unserer HP können wir so etwas bauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX-Test&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myContainer&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	$(document).ready(function() {&lt;br /&gt;
		$(&amp;quot;#myButton&amp;quot;).click(function(){&lt;br /&gt;
        	$.getJSON(&amp;quot;index.php?eID=gbglossaryeid&amp;quot;, function(data){&lt;br /&gt;
				$.each(data,function(key,obj){&lt;br /&gt;
					$(&amp;quot;#myContainer&amp;quot;).append(&amp;#039;&amp;lt;div&amp;gt;&amp;#039; + key + &amp;#039; &amp;#039; + obj.terms_title + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;);&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	} );&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zuerst wird auf dem Button myButton ein Click Handler angelegt, der wiederum löst eine JSON Anfrage an unsere PHP Datei aus. Diese gibt den JSON String zurück. Der String wird in einer each Schleife durchlaufen und alle Titel werden in das Div myContainer geschrieben.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JSON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JQuery_-_AJAX&amp;diff=19399</id>
		<title>JQuery - AJAX</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JQuery_-_AJAX&amp;diff=19399"/>
		<updated>2012-11-05T09:25:38Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Datensätze aus einem JSON Objekt holen mit each */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wie funktioniert AJAX ? ==&lt;br /&gt;
&lt;br /&gt;
Früher mußte man bei jeder Anfrage die Webseite komplett neu laden. Auch wenn nur ein kleiner Teil neu benötigt wird (z.B. ein Suchergebnis). Mit AJAX kann man Teile einer Website neu laden. Das funktioniert über ein JavaScript Objekt den sogenannten &amp;#039;&amp;#039;&amp;#039;XML-HTTP Request&amp;#039;&amp;#039;&amp;#039; oder kurz &amp;#039;&amp;#039;&amp;#039;XHR&amp;#039;&amp;#039;&amp;#039;. Dieser kommuniziert quasi am Browser vorbei mit dem Server. &lt;br /&gt;
&lt;br /&gt;
Die alte Kommunikationsart ist Synchron: Eine Anfrage - eine Webseite. Die neue Art ist asynchron. Alle Eigenschaften zusammengefaßt spricht man von &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;synchronous &amp;#039;&amp;#039;&amp;#039;J&amp;#039;&amp;#039;&amp;#039;avaScript &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039;nd &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039;ML - AJAX&lt;br /&gt;
&lt;br /&gt;
Übertragen wird immer Klartext, allerdings selten XML-Daten. Heute nutzt man eher HTML-Fragmente oder JSON Daten.&lt;br /&gt;
&lt;br /&gt;
==jQuery und AJAX==&lt;br /&gt;
jQuery bietet eine gute AJAX Unterstützung, und macht es dem Programmierer leicht mit den Besonderheiten der verschiedenen Browser umzugehen. &lt;br /&gt;
&lt;br /&gt;
== Datenanforderung mit jQuery und AJAX ==&lt;br /&gt;
Daten werden vom Server immer im Klartext geliefert und über das http Protokoll übertragen.&lt;br /&gt;
=== Textdatei anfordern ===&lt;br /&gt;
ajax1.html&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    $(document).ready(function(){&lt;br /&gt;
      $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
        $.get(&amp;quot;ajax.txt&amp;quot;, function(data){&lt;br /&gt;
          $(&amp;quot;#ausgabe&amp;quot;).text(data);&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
      $(&amp;quot;button:eq(1)&amp;quot;).click(function(){&lt;br /&gt;
        $.post(&amp;quot;ajax.txt&amp;quot;, function(data){&lt;br /&gt;
          $(&amp;quot;#ausgabe&amp;quot;).text(data);&lt;br /&gt;
        });			 &lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;AJAX-Anfrage mit $.get()&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;AJAX-Anfrage mit $.post()&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ajax.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Es gibt zwei Sachen, denen ich mir völlig sicher bin. Erstens: Männer sind viel schlauer als Frauen! Und zweitens? Die Erde ist flach. Genau.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erklärung:&lt;br /&gt;
&lt;br /&gt;
Die 2 Buttons bekommen eine Klickfunktion zugewiesen. &lt;br /&gt;
Button 1 führt einen AJAX Request über GET aus. Button 2 über Post ($.get() bzw. $.post()). Als Parameter enthält die Funktion die Datei und eine weitere Funktion (oder Referenz auf eine Funktion). Diese neue Funktion bekommt als Parameter die erhaltenen Daten und schreibt sie in das div mit der id #ausgabe.&lt;br /&gt;
&lt;br /&gt;
=== HTML Anfordern ===&lt;br /&gt;
Enthält die Antwort HTML Daten sollte der Browser sie auch so interpretieren. Dazu kann man jQuery direkt mitteilen, dass es sich um HTML Daten handelt. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//$(&amp;quot;#ausgabe&amp;quot;).text(data);&lt;br /&gt;
$(&amp;quot;#ausgabe&amp;quot;).html(data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommunikation mit dem Server über AJAX und jQuery ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ajax.html&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; &lt;br /&gt;
      src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
          $.get(&amp;quot;login_get.php&amp;quot;,  &lt;br /&gt;
            { &lt;br /&gt;
              username: $(&amp;quot;input:first&amp;quot;).val(), &lt;br /&gt;
              password: $(&amp;quot;input:last&amp;quot;).val() &lt;br /&gt;
            }, &lt;br /&gt;
            function(data){&lt;br /&gt;
             $(&amp;quot;#ausgabe&amp;quot;).html(data);&lt;br /&gt;
            }&lt;br /&gt;
          );&lt;br /&gt;
        });&lt;br /&gt;
        $(&amp;quot;button:last&amp;quot;).click(function(){&lt;br /&gt;
          $.post(&amp;quot;login_post.php&amp;quot;,  &lt;br /&gt;
            { &lt;br /&gt;
              username: $(&amp;quot;input:first&amp;quot;).val(), &lt;br /&gt;
              password: $(&amp;quot;input:last&amp;quot;).val() &lt;br /&gt;
            }, &lt;br /&gt;
            function(data){&lt;br /&gt;
             $(&amp;quot;#ausgabe&amp;quot;).html(data);&lt;br /&gt;
            }&lt;br /&gt;
          );&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Bitte Benutzername und Passwort eingeben&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;f1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;table width=&amp;quot;200&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;30&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;Passwort&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;password&amp;quot; size=&amp;quot;30&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;button&amp;gt;AJAX-Login mit $.get()&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button&amp;gt;AJAX-Login mit $.post()&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt fast gleich. Nur werden in diesem Fall 3 Parameter übergeben. &lt;br /&gt;
1. Der Name des Skriptes. 2. Die Daten die übermittelt werden. 3. Eine (anonyme) Funktion die die Antwort des Servers verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Interessant ist also Parameter2. Hier wird einfach wie in jQuery an vielen Stellen üblich mit einem Optionen-Objekt gearbeitet. Dieses enthält die Deklarationen der Übergabewerte in der Form&lt;br /&gt;
&lt;br /&gt;
 bezeichner : wert&lt;br /&gt;
&lt;br /&gt;
ln diesem Fall ist der Wert die Eingabe der HTML Input Felder (hier das erste Input der Seite).&lt;br /&gt;
&lt;br /&gt;
 username : $(&amp;quot;input:first&amp;quot;).val(), &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;login_get.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$host = &amp;quot;localhost&amp;quot;; // Der MySQL-Server&lt;br /&gt;
$user = &amp;quot;root&amp;quot;;// Der Datenbank Benutzername&lt;br /&gt;
$password = &amp;quot;&amp;quot;; // Das Passwort für die Datenbank&lt;br /&gt;
$dbname = &amp;quot;jquery&amp;quot;; // Der Name der Datenbank&lt;br /&gt;
$tabelle =&amp;quot;logindaten&amp;quot;; // Der Name der Tabelle&lt;br /&gt;
$loginrichtig =false;&lt;br /&gt;
$dbverbindung = mysql_connect ($host, $user, $password);&lt;br /&gt;
$dbanfrage = &amp;quot;SELECT * from $tabelle&amp;quot;;&lt;br /&gt;
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);&lt;br /&gt;
while ($ausgabe = mysql_fetch_array ($result)) {&lt;br /&gt;
if (($ausgabe[&amp;#039;username&amp;#039;] == $_GET[&amp;#039;username&amp;#039;]) &amp;amp;&amp;amp; ($ausgabe[&amp;#039;password&amp;#039;] == $_GET[&amp;#039;password&amp;#039;]) )&lt;br /&gt;
   {$loginrichtig=true; &lt;br /&gt;
	 break;&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
if($loginrichtig) {&lt;br /&gt;
  echo &amp;quot;Login erfolgreich&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
  echo &amp;quot;Leider war ihr Login nicht erfolgreich, bitte &amp;amp;uuml;berpr&amp;amp;uuml;fen sie ihre Eingaben.&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mysql_close ($dbverbindung);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf Seite des PHP-Skriptes kommen die Daten als GET oder POST Variablen an (Hier GET). &lt;br /&gt;
&lt;br /&gt;
Als Antwort erwartet AJAX ja Klartext. Das bedeutet wir können einfach eine ganz normale Ausgabe über Echo machen. Möchten wir Daten zurückgeben muß das ebenfalls über Klartext funktionieren. Dazu können wir dann z.B. JSON oder XML nehmen. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommunikation über JSON ==&lt;br /&gt;
Eine gute Methode Strukturierte Daten (Objekte, Arrays, etc.) zu übertragen ist JSON. JSON ist eine Methode strukturierte Daten als platzsparenden String zu speichern, der trotzdem für den Menschen lesbar bleibt, aber auch vom Rechner leicht verarbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
=== JSON - Daten ===&lt;br /&gt;
So sieht es aus.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ajax.json&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  &amp;quot;name&amp;quot; : &amp;quot;Stephan Schlegel&amp;quot;, &lt;br /&gt;
  &amp;quot;beruf&amp;quot; : &amp;quot;Dipl Ing audiovisuelle Medien&amp;quot;,&lt;br /&gt;
  &amp;quot;ort&amp;quot; : &amp;quot;Nürtingen&amp;quot;,&lt;br /&gt;
  &amp;quot;webseiten&amp;quot; :	 { &lt;br /&gt;
    &amp;quot;url1&amp;quot; : &amp;quot;www.geo-bit.de&amp;quot;, &lt;br /&gt;
    &amp;quot;url2&amp;quot; : &amp;quot;www.3d-relief.com&amp;quot;, &lt;br /&gt;
    &amp;quot;url3&amp;quot; : &amp;quot;www.ko-rockband.de&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Prinzip ist es wieder ein Objekt indem es Bezeichner und Wertzuweisungen gibt. Im Fall Webseiten ist der Wert wiederum ein Objekt, bestehend aus Bezeichnern und Werten.&lt;br /&gt;
&lt;br /&gt;
=== JSON Daten über jQuery lesen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;  src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
          $.getJSON(&amp;quot;ajax.json&amp;quot;, function(data){&lt;br /&gt;
            $(&amp;quot;#ausgabe&amp;quot;).append(data.name + &amp;quot;, &amp;quot; + data.webseiten.url1);&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;button&amp;gt;getJSON&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Daten werden über getJSON geladen:&lt;br /&gt;
 $.getJSON(&amp;quot;ajax.json&amp;quot;, function(data){ $(&amp;quot;#ausgabe&amp;quot;).append(data.name + &amp;quot;, &amp;quot; + data.webseiten.url1); });&lt;br /&gt;
 $.getJSON(&amp;quot;Datei&amp;quot;, meineFunktion(data));&lt;br /&gt;
&lt;br /&gt;
An die Funktion wird das Bezeichner-Objekt data übergeben und über dieses kann man auf die enthaltenen Daten zugreifen. Hier z.B. auf Name oder die erste URL.&lt;br /&gt;
&lt;br /&gt;
 data.name&lt;br /&gt;
 data.webseiten.url1&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; über die getJSON Funktion werden die Daten direkt in ein jQuery Objekt umgewandelt. Über get und post würde man einfach den Text bekommen. Man kann aber einen JSON String auch nachträglich umwandeln. Dafür gibt es die jQuery Funkion parseJSON(json).&lt;br /&gt;
&lt;br /&gt;
==== Beispiel Datensätze aus einem JSON Objekt verarbeiten mit each ====&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion aus dem 3d-relief map-editor. Im Beispiel wird ein Dropdown-Feld erzeugt, in dem sich alle Produkte auswählen lassen. Zusätzlich wird ein Click Handler registriert. Der bei Klick wiederum eine JS Funktion &amp;quot;loadMap&amp;quot; ausführt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$.getJSON(&amp;quot;dataHandler.php&amp;quot;,{action:&amp;quot;loadMaps&amp;quot;},function(data){&lt;br /&gt;
	//mapData = data;&lt;br /&gt;
	createMapSelector(data);&lt;br /&gt;
});&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übergeben wird das Data Objekt an diese Funktion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function createMapSelector(data){&lt;br /&gt;
	$(&amp;quot;#map_selector_wrap&amp;quot;).html(&amp;#039;&amp;lt;div&amp;gt;&amp;lt;h3&amp;gt;Select Relief Map&amp;lt;/h3&amp;gt;&amp;lt;select id=&amp;quot;map_selector&amp;quot; name=&amp;quot;map_selector&amp;quot;&amp;gt;&amp;#039;);&lt;br /&gt;
	$(&amp;quot;#map_selector&amp;quot;).append(&amp;#039;&amp;lt;option value=&amp;quot;na&amp;quot;&amp;gt;Select product to view details&amp;lt;/option&amp;gt;&amp;#039;);&lt;br /&gt;
	$.each(data,function(key,obj){&lt;br /&gt;
		if(obj.products_name != null)&lt;br /&gt;
			$(&amp;quot;#map_selector&amp;quot;).append(&amp;#039;&amp;lt;option value=&amp;quot;&amp;#039; + obj.products_id + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + obj.products_name + &amp;#039;&amp;lt;/option&amp;gt;&amp;#039;);&lt;br /&gt;
	});&lt;br /&gt;
	$(&amp;quot;#map_selector_wrap&amp;quot;).append(&amp;#039;&amp;lt;/select&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;);&lt;br /&gt;
	// click handler for selector&lt;br /&gt;
	$(&amp;quot;#map_selector&amp;quot;).change(function(){&lt;br /&gt;
  		actID=$(&amp;quot;#map_selector option:selected&amp;quot;).val()&lt;br /&gt;
  		if(actID != &amp;quot;na&amp;quot;)&lt;br /&gt;
  			loadMap(actID);&lt;br /&gt;
  	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JSON Daten von fremden Servern ===&lt;br /&gt;
Normalerweise holt JavaScript Daten nur vom gleichen Server, auf dem das Skript läuft. Dies kann man mit JSONP umgehen.&lt;br /&gt;
Das etwas umfangreichere Beispiel liest Twitterdaten über JSON und die Twitter API.&lt;br /&gt;
&lt;br /&gt;
[[jQuery und JSONP - Tweets von Twitter lesen]]&lt;br /&gt;
&lt;br /&gt;
siehe auch nächstes Beispiel &amp;quot;JavaScript&amp;quot; nachladen.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript nachladen ===&lt;br /&gt;
Mit jQuery kann man JavaScripte nachladen. Die enthaltenen Statements werden automatisch ausgeführt, bzw. enthaltene Funktionen verfügbar gemacht.&lt;br /&gt;
So kann man sehr schön seine Funktionen auf mehrere Bibliotheken aufteilen und bei Bedarf laden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.getScript(&amp;quot;ajax/test.js&amp;quot;, function(data, textStatus, jqxhr) {&lt;br /&gt;
   console.log(data); //data returned&lt;br /&gt;
   console.log(textStatus); //success&lt;br /&gt;
   console.log(jqxhr.status); //200&lt;br /&gt;
   console.log(&amp;#039;Load was performed.&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ajax.html&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; &lt;br /&gt;
      src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
          $.getScript(&amp;quot;zufall.js&amp;quot;, function(){&lt;br /&gt;
            $(&amp;quot;#ausgabe&amp;quot;).text(zufallsZahl());&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
        $(&amp;quot;button:last&amp;quot;).click(function(){&lt;br /&gt;
          $.getScript(&amp;quot;http://mydomain.de/jquery/zufall.js&amp;quot;, function(){&lt;br /&gt;
            $(&amp;quot;#ausgabe&amp;quot;).text(zufallsZahl());&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;Lade Skript von gleicher Domain&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;Lade Skript von fremder Domain&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;zufall.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function zufallsZahl(){&lt;br /&gt;
  return Math.random();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JQuery_-_AJAX&amp;diff=19398</id>
		<title>JQuery - AJAX</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JQuery_-_AJAX&amp;diff=19398"/>
		<updated>2012-11-05T09:25:06Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* JSON Daten über jQuery lesen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wie funktioniert AJAX ? ==&lt;br /&gt;
&lt;br /&gt;
Früher mußte man bei jeder Anfrage die Webseite komplett neu laden. Auch wenn nur ein kleiner Teil neu benötigt wird (z.B. ein Suchergebnis). Mit AJAX kann man Teile einer Website neu laden. Das funktioniert über ein JavaScript Objekt den sogenannten &amp;#039;&amp;#039;&amp;#039;XML-HTTP Request&amp;#039;&amp;#039;&amp;#039; oder kurz &amp;#039;&amp;#039;&amp;#039;XHR&amp;#039;&amp;#039;&amp;#039;. Dieser kommuniziert quasi am Browser vorbei mit dem Server. &lt;br /&gt;
&lt;br /&gt;
Die alte Kommunikationsart ist Synchron: Eine Anfrage - eine Webseite. Die neue Art ist asynchron. Alle Eigenschaften zusammengefaßt spricht man von &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;synchronous &amp;#039;&amp;#039;&amp;#039;J&amp;#039;&amp;#039;&amp;#039;avaScript &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039;nd &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039;ML - AJAX&lt;br /&gt;
&lt;br /&gt;
Übertragen wird immer Klartext, allerdings selten XML-Daten. Heute nutzt man eher HTML-Fragmente oder JSON Daten.&lt;br /&gt;
&lt;br /&gt;
==jQuery und AJAX==&lt;br /&gt;
jQuery bietet eine gute AJAX Unterstützung, und macht es dem Programmierer leicht mit den Besonderheiten der verschiedenen Browser umzugehen. &lt;br /&gt;
&lt;br /&gt;
== Datenanforderung mit jQuery und AJAX ==&lt;br /&gt;
Daten werden vom Server immer im Klartext geliefert und über das http Protokoll übertragen.&lt;br /&gt;
=== Textdatei anfordern ===&lt;br /&gt;
ajax1.html&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    $(document).ready(function(){&lt;br /&gt;
      $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
        $.get(&amp;quot;ajax.txt&amp;quot;, function(data){&lt;br /&gt;
          $(&amp;quot;#ausgabe&amp;quot;).text(data);&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
      $(&amp;quot;button:eq(1)&amp;quot;).click(function(){&lt;br /&gt;
        $.post(&amp;quot;ajax.txt&amp;quot;, function(data){&lt;br /&gt;
          $(&amp;quot;#ausgabe&amp;quot;).text(data);&lt;br /&gt;
        });			 &lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;AJAX-Anfrage mit $.get()&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;AJAX-Anfrage mit $.post()&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ajax.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Es gibt zwei Sachen, denen ich mir völlig sicher bin. Erstens: Männer sind viel schlauer als Frauen! Und zweitens? Die Erde ist flach. Genau.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erklärung:&lt;br /&gt;
&lt;br /&gt;
Die 2 Buttons bekommen eine Klickfunktion zugewiesen. &lt;br /&gt;
Button 1 führt einen AJAX Request über GET aus. Button 2 über Post ($.get() bzw. $.post()). Als Parameter enthält die Funktion die Datei und eine weitere Funktion (oder Referenz auf eine Funktion). Diese neue Funktion bekommt als Parameter die erhaltenen Daten und schreibt sie in das div mit der id #ausgabe.&lt;br /&gt;
&lt;br /&gt;
=== HTML Anfordern ===&lt;br /&gt;
Enthält die Antwort HTML Daten sollte der Browser sie auch so interpretieren. Dazu kann man jQuery direkt mitteilen, dass es sich um HTML Daten handelt. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//$(&amp;quot;#ausgabe&amp;quot;).text(data);&lt;br /&gt;
$(&amp;quot;#ausgabe&amp;quot;).html(data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommunikation mit dem Server über AJAX und jQuery ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ajax.html&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; &lt;br /&gt;
      src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
          $.get(&amp;quot;login_get.php&amp;quot;,  &lt;br /&gt;
            { &lt;br /&gt;
              username: $(&amp;quot;input:first&amp;quot;).val(), &lt;br /&gt;
              password: $(&amp;quot;input:last&amp;quot;).val() &lt;br /&gt;
            }, &lt;br /&gt;
            function(data){&lt;br /&gt;
             $(&amp;quot;#ausgabe&amp;quot;).html(data);&lt;br /&gt;
            }&lt;br /&gt;
          );&lt;br /&gt;
        });&lt;br /&gt;
        $(&amp;quot;button:last&amp;quot;).click(function(){&lt;br /&gt;
          $.post(&amp;quot;login_post.php&amp;quot;,  &lt;br /&gt;
            { &lt;br /&gt;
              username: $(&amp;quot;input:first&amp;quot;).val(), &lt;br /&gt;
              password: $(&amp;quot;input:last&amp;quot;).val() &lt;br /&gt;
            }, &lt;br /&gt;
            function(data){&lt;br /&gt;
             $(&amp;quot;#ausgabe&amp;quot;).html(data);&lt;br /&gt;
            }&lt;br /&gt;
          );&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Bitte Benutzername und Passwort eingeben&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;f1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;table width=&amp;quot;200&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;30&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;Passwort&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;password&amp;quot; size=&amp;quot;30&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;button&amp;gt;AJAX-Login mit $.get()&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;button&amp;gt;AJAX-Login mit $.post()&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt fast gleich. Nur werden in diesem Fall 3 Parameter übergeben. &lt;br /&gt;
1. Der Name des Skriptes. 2. Die Daten die übermittelt werden. 3. Eine (anonyme) Funktion die die Antwort des Servers verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Interessant ist also Parameter2. Hier wird einfach wie in jQuery an vielen Stellen üblich mit einem Optionen-Objekt gearbeitet. Dieses enthält die Deklarationen der Übergabewerte in der Form&lt;br /&gt;
&lt;br /&gt;
 bezeichner : wert&lt;br /&gt;
&lt;br /&gt;
ln diesem Fall ist der Wert die Eingabe der HTML Input Felder (hier das erste Input der Seite).&lt;br /&gt;
&lt;br /&gt;
 username : $(&amp;quot;input:first&amp;quot;).val(), &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;login_get.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$host = &amp;quot;localhost&amp;quot;; // Der MySQL-Server&lt;br /&gt;
$user = &amp;quot;root&amp;quot;;// Der Datenbank Benutzername&lt;br /&gt;
$password = &amp;quot;&amp;quot;; // Das Passwort für die Datenbank&lt;br /&gt;
$dbname = &amp;quot;jquery&amp;quot;; // Der Name der Datenbank&lt;br /&gt;
$tabelle =&amp;quot;logindaten&amp;quot;; // Der Name der Tabelle&lt;br /&gt;
$loginrichtig =false;&lt;br /&gt;
$dbverbindung = mysql_connect ($host, $user, $password);&lt;br /&gt;
$dbanfrage = &amp;quot;SELECT * from $tabelle&amp;quot;;&lt;br /&gt;
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);&lt;br /&gt;
while ($ausgabe = mysql_fetch_array ($result)) {&lt;br /&gt;
if (($ausgabe[&amp;#039;username&amp;#039;] == $_GET[&amp;#039;username&amp;#039;]) &amp;amp;&amp;amp; ($ausgabe[&amp;#039;password&amp;#039;] == $_GET[&amp;#039;password&amp;#039;]) )&lt;br /&gt;
   {$loginrichtig=true; &lt;br /&gt;
	 break;&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
if($loginrichtig) {&lt;br /&gt;
  echo &amp;quot;Login erfolgreich&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
  echo &amp;quot;Leider war ihr Login nicht erfolgreich, bitte &amp;amp;uuml;berpr&amp;amp;uuml;fen sie ihre Eingaben.&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mysql_close ($dbverbindung);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf Seite des PHP-Skriptes kommen die Daten als GET oder POST Variablen an (Hier GET). &lt;br /&gt;
&lt;br /&gt;
Als Antwort erwartet AJAX ja Klartext. Das bedeutet wir können einfach eine ganz normale Ausgabe über Echo machen. Möchten wir Daten zurückgeben muß das ebenfalls über Klartext funktionieren. Dazu können wir dann z.B. JSON oder XML nehmen. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommunikation über JSON ==&lt;br /&gt;
Eine gute Methode Strukturierte Daten (Objekte, Arrays, etc.) zu übertragen ist JSON. JSON ist eine Methode strukturierte Daten als platzsparenden String zu speichern, der trotzdem für den Menschen lesbar bleibt, aber auch vom Rechner leicht verarbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
=== JSON - Daten ===&lt;br /&gt;
So sieht es aus.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ajax.json&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
  &amp;quot;name&amp;quot; : &amp;quot;Stephan Schlegel&amp;quot;, &lt;br /&gt;
  &amp;quot;beruf&amp;quot; : &amp;quot;Dipl Ing audiovisuelle Medien&amp;quot;,&lt;br /&gt;
  &amp;quot;ort&amp;quot; : &amp;quot;Nürtingen&amp;quot;,&lt;br /&gt;
  &amp;quot;webseiten&amp;quot; :	 { &lt;br /&gt;
    &amp;quot;url1&amp;quot; : &amp;quot;www.geo-bit.de&amp;quot;, &lt;br /&gt;
    &amp;quot;url2&amp;quot; : &amp;quot;www.3d-relief.com&amp;quot;, &lt;br /&gt;
    &amp;quot;url3&amp;quot; : &amp;quot;www.ko-rockband.de&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Prinzip ist es wieder ein Objekt indem es Bezeichner und Wertzuweisungen gibt. Im Fall Webseiten ist der Wert wiederum ein Objekt, bestehend aus Bezeichnern und Werten.&lt;br /&gt;
&lt;br /&gt;
=== JSON Daten über jQuery lesen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;  src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
          $.getJSON(&amp;quot;ajax.json&amp;quot;, function(data){&lt;br /&gt;
            $(&amp;quot;#ausgabe&amp;quot;).append(data.name + &amp;quot;, &amp;quot; + data.webseiten.url1);&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;button&amp;gt;getJSON&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Daten werden über getJSON geladen:&lt;br /&gt;
 $.getJSON(&amp;quot;ajax.json&amp;quot;, function(data){ $(&amp;quot;#ausgabe&amp;quot;).append(data.name + &amp;quot;, &amp;quot; + data.webseiten.url1); });&lt;br /&gt;
 $.getJSON(&amp;quot;Datei&amp;quot;, meineFunktion(data));&lt;br /&gt;
&lt;br /&gt;
An die Funktion wird das Bezeichner-Objekt data übergeben und über dieses kann man auf die enthaltenen Daten zugreifen. Hier z.B. auf Name oder die erste URL.&lt;br /&gt;
&lt;br /&gt;
 data.name&lt;br /&gt;
 data.webseiten.url1&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; über die getJSON Funktion werden die Daten direkt in ein jQuery Objekt umgewandelt. Über get und post würde man einfach den Text bekommen. Man kann aber einen JSON String auch nachträglich umwandeln. Dafür gibt es die jQuery Funkion parseJSON(json).&lt;br /&gt;
&lt;br /&gt;
==== Datensätze aus einem JSON Objekt holen mit each ====&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktion aus dem 3d-relief map-editor. Im Beispiel wird ein Dropdown-Feld erzeugt, in dem sich alle Produkte auswählen lassen. Zusätzlich wird ein Click Handler registriert. Der bei Klick wiederum eine JS Funktion &amp;quot;loadMap&amp;quot; ausführt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$.getJSON(&amp;quot;dataHandler.php&amp;quot;,{action:&amp;quot;loadMaps&amp;quot;},function(data){&lt;br /&gt;
	//mapData = data;&lt;br /&gt;
	createMapSelector(data);&lt;br /&gt;
});&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Übergeben wird das Data Objekt an diese Funktion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function createMapSelector(data){&lt;br /&gt;
	$(&amp;quot;#map_selector_wrap&amp;quot;).html(&amp;#039;&amp;lt;div&amp;gt;&amp;lt;h3&amp;gt;Select Relief Map&amp;lt;/h3&amp;gt;&amp;lt;select id=&amp;quot;map_selector&amp;quot; name=&amp;quot;map_selector&amp;quot;&amp;gt;&amp;#039;);&lt;br /&gt;
	$(&amp;quot;#map_selector&amp;quot;).append(&amp;#039;&amp;lt;option value=&amp;quot;na&amp;quot;&amp;gt;Select product to view details&amp;lt;/option&amp;gt;&amp;#039;);&lt;br /&gt;
	$.each(data,function(key,obj){&lt;br /&gt;
		if(obj.products_name != null)&lt;br /&gt;
			$(&amp;quot;#map_selector&amp;quot;).append(&amp;#039;&amp;lt;option value=&amp;quot;&amp;#039; + obj.products_id + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + obj.products_name + &amp;#039;&amp;lt;/option&amp;gt;&amp;#039;);&lt;br /&gt;
	});&lt;br /&gt;
	$(&amp;quot;#map_selector_wrap&amp;quot;).append(&amp;#039;&amp;lt;/select&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;);&lt;br /&gt;
	// click handler for selector&lt;br /&gt;
	$(&amp;quot;#map_selector&amp;quot;).change(function(){&lt;br /&gt;
  		actID=$(&amp;quot;#map_selector option:selected&amp;quot;).val()&lt;br /&gt;
  		if(actID != &amp;quot;na&amp;quot;)&lt;br /&gt;
  			loadMap(actID);&lt;br /&gt;
  	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JSON Daten von fremden Servern ===&lt;br /&gt;
Normalerweise holt JavaScript Daten nur vom gleichen Server, auf dem das Skript läuft. Dies kann man mit JSONP umgehen.&lt;br /&gt;
Das etwas umfangreichere Beispiel liest Twitterdaten über JSON und die Twitter API.&lt;br /&gt;
&lt;br /&gt;
[[jQuery und JSONP - Tweets von Twitter lesen]]&lt;br /&gt;
&lt;br /&gt;
siehe auch nächstes Beispiel &amp;quot;JavaScript&amp;quot; nachladen.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript nachladen ===&lt;br /&gt;
Mit jQuery kann man JavaScripte nachladen. Die enthaltenen Statements werden automatisch ausgeführt, bzw. enthaltene Funktionen verfügbar gemacht.&lt;br /&gt;
So kann man sehr schön seine Funktionen auf mehrere Bibliotheken aufteilen und bei Bedarf laden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.getScript(&amp;quot;ajax/test.js&amp;quot;, function(data, textStatus, jqxhr) {&lt;br /&gt;
   console.log(data); //data returned&lt;br /&gt;
   console.log(textStatus); //success&lt;br /&gt;
   console.log(jqxhr.status); //200&lt;br /&gt;
   console.log(&amp;#039;Load was performed.&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ajax.html&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; &lt;br /&gt;
      src=&amp;quot;lib/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;button:first&amp;quot;).click(function(){&lt;br /&gt;
          $.getScript(&amp;quot;zufall.js&amp;quot;, function(){&lt;br /&gt;
            $(&amp;quot;#ausgabe&amp;quot;).text(zufallsZahl());&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
        $(&amp;quot;button:last&amp;quot;).click(function(){&lt;br /&gt;
          $.getScript(&amp;quot;http://mydomain.de/jquery/zufall.js&amp;quot;, function(){&lt;br /&gt;
            $(&amp;quot;#ausgabe&amp;quot;).text(zufallsZahl());&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;Lade Skript von gleicher Domain&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;button&amp;gt;Lade Skript von fremder Domain&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;ausgabe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;zufall.js&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function zufallsZahl(){&lt;br /&gt;
  return Math.random();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19397</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19397"/>
		<updated>2012-11-05T09:01:30Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* eID AJAX mit jQuery und JSON Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eID AJAX mit jQuery und JSON Beispiel ==&lt;br /&gt;
Beispiel der Extension gbglossary&lt;br /&gt;
=== eID Parameter registrieren ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 // Register eid&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;gbglossaryeid&amp;#039;] = &amp;#039;EXT:gbglossary/eid/class.gbglossary_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Typo3 sucht nach der angegebenen Klasse wenn der Parameter&lt;br /&gt;
 eID=gbglossaryeid in der URL angegeben wird.&lt;br /&gt;
&lt;br /&gt;
=== PHP Klasse erstellen ===&lt;br /&gt;
Über die Klasse tx_gbglossary_eid holen wir uns alle Datensätze aus der Datenbank und geben Sie als JSON Objekt aus. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.gbglossary_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbglossary_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbglossary_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbglossary_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbglossary&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
		&lt;br /&gt;
		// Create select&lt;br /&gt;
		$select = &amp;#039;&amp;#039;;&lt;br /&gt;
		$dbFields = array(&lt;br /&gt;
			&amp;#039;tx_gbglossary_terms.uid AS terms_uid&amp;#039;,&lt;br /&gt;
			&amp;#039;tx_gbglossary_terms.title AS terms_title&amp;#039;&lt;br /&gt;
		);&lt;br /&gt;
		foreach ($dbFields as $key =&amp;gt; $value){&lt;br /&gt;
			$select.=$value.&amp;#039;, &amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		$select = rtrim(rtrim($select),&amp;#039;,&amp;#039;);&lt;br /&gt;
		// Create from (example for n:m JOIN)&lt;br /&gt;
		$from = &amp;#039;&amp;#039;;&lt;br /&gt;
		$from = &amp;#039;&lt;br /&gt;
			(	&lt;br /&gt;
				( &lt;br /&gt;
						tx_gbglossary_terms LEFT OUTER JOIN tx_gbglossary_terms_topic_mm &lt;br /&gt;
						ON tx_gbglossary_terms.uid = tx_gbglossary_terms_topic_mm.uid_local&lt;br /&gt;
				)&lt;br /&gt;
				LEFT OUTER JOIN tx_gbglossary_topic &lt;br /&gt;
				ON tx_gbglossary_terms_topic_mm.uid_foreign = tx_gbglossary_topic.uid&lt;br /&gt;
				)&lt;br /&gt;
		&amp;#039;;&lt;br /&gt;
		// Create where&lt;br /&gt;
		$where = &amp;#039;&amp;#039;;&lt;br /&gt;
		$where = &amp;quot;tx_gbglossary_terms.deleted=0 AND tx_gbglossary_terms.hidden=0&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
		 	$select,&lt;br /&gt;
		 	$from,&lt;br /&gt;
		 	$where,&lt;br /&gt;
			$groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
			$orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
		 	$limit=&amp;#039;&amp;#039;&lt;br /&gt;
		);&lt;br /&gt;
		$arrJSON = array();&lt;br /&gt;
		while (($row = $GLOBALS[&amp;quot;TYPO3_DB&amp;quot;]-&amp;gt;sql_fetch_assoc($res))){&lt;br /&gt;
			$arrJSON[]=$row;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
		$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbglossary_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Test im Browser zeigt einen schönen JSON String mit den abgefragten Daten.&lt;br /&gt;
&lt;br /&gt;
 http://localhost/typo3_test/index.php?id=178&amp;amp;eID=gbglossaryeid&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JSON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19396</id>
		<title>PHP und JSON</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19396"/>
		<updated>2012-11-05T08:45:16Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Daten aus mySQL in eine JSON Datei schreiben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Daten aus mySQL in eine JSON Datei schreiben ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
&lt;br /&gt;
$sql=mysql_query(&amp;quot;select * from Posts limit 20&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
$response = array();&lt;br /&gt;
$posts = array();&lt;br /&gt;
$result=mysql_query($sql);&lt;br /&gt;
while($row=mysql_fetch_array($result)) &lt;br /&gt;
{ &lt;br /&gt;
$title=$row[&amp;#039;title&amp;#039;]; &lt;br /&gt;
$url=$row[&amp;#039;url&amp;#039;]; &lt;br /&gt;
&lt;br /&gt;
$posts[] = array(&amp;#039;title&amp;#039;=&amp;gt; $title, &amp;#039;url&amp;#039;=&amp;gt; $url);&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
$response[&amp;#039;posts&amp;#039;] = $posts;&lt;br /&gt;
&lt;br /&gt;
$fp = fopen(&amp;#039;results.json&amp;#039;, &amp;#039;w&amp;#039;);&lt;br /&gt;
fwrite($fp, json_encode($response));&lt;br /&gt;
fclose($fp);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Korrekte Header für JSON-Daten ==&lt;br /&gt;
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arrJSON = array(&amp;#039;text&amp;#039;=&amp;gt;&amp;#039;Hallo Welt&amp;#039;);&lt;br /&gt;
// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
header(&amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;);&lt;br /&gt;
echo $ajax_return_data;&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Content-Type: application/json ist nach Internet Recherche korrekt. Jedoch gibt es auch Aussagen über mögliche oder für manche Anwendungen sogar notwendige anders lautende Angaben:&lt;br /&gt;
&lt;br /&gt;
Für JSONP (für Zugriff auf Server anderer Domains)&lt;br /&gt;
 Content-Type: application/javascript&lt;br /&gt;
&lt;br /&gt;
Funktionieren soll angeblich auch:&lt;br /&gt;
 application/x-javascript&lt;br /&gt;
 text/x-javascript&lt;br /&gt;
 text/x-json&lt;br /&gt;
&lt;br /&gt;
Wichtig ist die Angabe des charset. Firebug moniert sofort, daß es nicht weiß um was es sich handelt. Und es kann später Probleme mit Sonderzeichen geben.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19395</id>
		<title>PHP und JSON</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19395"/>
		<updated>2012-11-05T08:44:33Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Korrekte Header für JSON-Daten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Daten aus mySQL in eine JSON Datei schreiben ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$sql=mysql_query(&amp;quot;select * from Posts limit 20&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
$response = array();&lt;br /&gt;
$posts = array();&lt;br /&gt;
$result=mysql_query($sql);&lt;br /&gt;
while($row=mysql_fetch_array($result)) &lt;br /&gt;
{ &lt;br /&gt;
$title=$row[&amp;#039;title&amp;#039;]; &lt;br /&gt;
$url=$row[&amp;#039;url&amp;#039;]; &lt;br /&gt;
&lt;br /&gt;
$posts[] = array(&amp;#039;title&amp;#039;=&amp;gt; $title, &amp;#039;url&amp;#039;=&amp;gt; $url);&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
$response[&amp;#039;posts&amp;#039;] = $posts;&lt;br /&gt;
&lt;br /&gt;
$fp = fopen(&amp;#039;results.json&amp;#039;, &amp;#039;w&amp;#039;);&lt;br /&gt;
fwrite($fp, json_encode($response));&lt;br /&gt;
fclose($fp);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Korrekte Header für JSON-Daten ==&lt;br /&gt;
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arrJSON = array(&amp;#039;text&amp;#039;=&amp;gt;&amp;#039;Hallo Welt&amp;#039;);&lt;br /&gt;
// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
header(&amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;);&lt;br /&gt;
echo $ajax_return_data;&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Content-Type: application/json ist nach Internet Recherche korrekt. Jedoch gibt es auch Aussagen über mögliche oder für manche Anwendungen sogar notwendige anders lautende Angaben:&lt;br /&gt;
&lt;br /&gt;
Für JSONP (für Zugriff auf Server anderer Domains)&lt;br /&gt;
 Content-Type: application/javascript&lt;br /&gt;
&lt;br /&gt;
Funktionieren soll angeblich auch:&lt;br /&gt;
 application/x-javascript&lt;br /&gt;
 text/x-javascript&lt;br /&gt;
 text/x-json&lt;br /&gt;
&lt;br /&gt;
Wichtig ist die Angabe des charset. Firebug moniert sofort, daß es nicht weiß um was es sich handelt. Und es kann später Probleme mit Sonderzeichen geben.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19394</id>
		<title>PHP und JSON</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19394"/>
		<updated>2012-11-05T08:38:22Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Korrekte Header Informationen für JSON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Daten aus mySQL in eine JSON Datei schreiben ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$sql=mysql_query(&amp;quot;select * from Posts limit 20&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
$response = array();&lt;br /&gt;
$posts = array();&lt;br /&gt;
$result=mysql_query($sql);&lt;br /&gt;
while($row=mysql_fetch_array($result)) &lt;br /&gt;
{ &lt;br /&gt;
$title=$row[&amp;#039;title&amp;#039;]; &lt;br /&gt;
$url=$row[&amp;#039;url&amp;#039;]; &lt;br /&gt;
&lt;br /&gt;
$posts[] = array(&amp;#039;title&amp;#039;=&amp;gt; $title, &amp;#039;url&amp;#039;=&amp;gt; $url);&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
$response[&amp;#039;posts&amp;#039;] = $posts;&lt;br /&gt;
&lt;br /&gt;
$fp = fopen(&amp;#039;results.json&amp;#039;, &amp;#039;w&amp;#039;);&lt;br /&gt;
fwrite($fp, json_encode($response));&lt;br /&gt;
fclose($fp);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Korrekte Header für JSON-Daten ==&lt;br /&gt;
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arrJSON = array(&amp;#039;text&amp;#039;=&amp;gt;&amp;#039;Hallo Welt&amp;#039;);&lt;br /&gt;
// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
header(&amp;#039;Content-Type: application/json&amp;#039;);&lt;br /&gt;
echo $ajax_return_data;&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Content-Type: application/json ist nach Internet Recherche korrekt. Jedoch gibt es auch Aussagen über mögliche oder für manche Anwendungen sogar notwendige anders lautende Angaben:&lt;br /&gt;
&lt;br /&gt;
Für JSONP (für Zugriff auf Server anderer Domains)&lt;br /&gt;
 Content-Type: application/javascript&lt;br /&gt;
&lt;br /&gt;
Funktionieren soll angeblich auch:&lt;br /&gt;
 application/x-javascript&lt;br /&gt;
 text/x-javascript&lt;br /&gt;
 text/x-json&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19393</id>
		<title>PHP und JSON</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=PHP_und_JSON&amp;diff=19393"/>
		<updated>2012-11-05T08:37:51Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Daten aus mySQL in eine JSON Datei schreiben ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$sql=mysql_query(&amp;quot;select * from Posts limit 20&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
$response = array();&lt;br /&gt;
$posts = array();&lt;br /&gt;
$result=mysql_query($sql);&lt;br /&gt;
while($row=mysql_fetch_array($result)) &lt;br /&gt;
{ &lt;br /&gt;
$title=$row[&amp;#039;title&amp;#039;]; &lt;br /&gt;
$url=$row[&amp;#039;url&amp;#039;]; &lt;br /&gt;
&lt;br /&gt;
$posts[] = array(&amp;#039;title&amp;#039;=&amp;gt; $title, &amp;#039;url&amp;#039;=&amp;gt; $url);&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
$response[&amp;#039;posts&amp;#039;] = $posts;&lt;br /&gt;
&lt;br /&gt;
$fp = fopen(&amp;#039;results.json&amp;#039;, &amp;#039;w&amp;#039;);&lt;br /&gt;
fwrite($fp, json_encode($response));&lt;br /&gt;
fclose($fp);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Korrekte Header Informationen für JSON ==&lt;br /&gt;
Wenn man Header Infos mit zurückgibt kann das z.B. so aussehen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	$arrJSON = array(&amp;#039;text&amp;#039;=&amp;gt;&amp;#039;Hallo Welt&amp;#039;);&lt;br /&gt;
	// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
	$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
	header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
	header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
	header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
	header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
	header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
	header(&amp;#039;Content-Type: application/json&amp;#039;);&lt;br /&gt;
	echo $ajax_return_data;&lt;br /&gt;
	exit;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Content-Type: application/json ist nach Internet Recherche korrekt. Jedoch gibt es auch Aussagen über mögliche oder für manche Anwendungen sogar notwendige anders lautende Angaben:&lt;br /&gt;
&lt;br /&gt;
Für JSONP (für Zugriff auf Server anderer Domains)&lt;br /&gt;
 Content-Type: application/javascript&lt;br /&gt;
&lt;br /&gt;
Funktionieren soll angeblich auch:&lt;br /&gt;
 application/x-javascript&lt;br /&gt;
 text/x-javascript&lt;br /&gt;
 text/x-json&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19392</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19392"/>
		<updated>2012-11-05T08:22:10Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Der eid Mechanismus und AJAX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eID AJAX mit jQuery und JSON Beispiel ==&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JSON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19391</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19391"/>
		<updated>2012-11-05T08:21:27Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* eid ajax mit jQuery Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JSON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19390</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19390"/>
		<updated>2012-11-05T07:27:08Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Probleme mit cc_debug und JSON Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit jQuery Beispiel ==&lt;br /&gt;
Quelle: s.o.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JSON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19389</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19389"/>
		<updated>2012-11-05T07:26:15Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Probleme mit cc_debug und JASON Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit jQuery Beispiel ==&lt;br /&gt;
Quelle: s.o.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JSON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19297</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19297"/>
		<updated>2012-10-15T16:34:21Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* 1. Import der Shapefiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[Datei:QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;br /&gt;
Beispiel: Export der Reutlinger Landkreisgrenze als Geojson.&lt;br /&gt;
&lt;br /&gt;
=== 1. Import der Shapefiles ===&lt;br /&gt;
Verschiedene Firmen haben sich darauf spezialisiert, Shapefiles aus OpenStreetmap Daten zu generieren.&lt;br /&gt;
 http://wiki.openstreetmap.org/wiki/Shapefiles#Download_pre-made_shapefiles&lt;br /&gt;
 &lt;br /&gt;
fündig werden wir hier:&lt;br /&gt;
 http://downloads.cloudmade.com/europe/western_europe/germany/baden-wurttemberg/baden-wurttemberg.shapefiles.zip&lt;br /&gt;
&lt;br /&gt;
Auspacken und im QGIS&lt;br /&gt;
 Neuer Verktorlayer -&amp;gt; Datei: baden-wurttemberg_administrative.shp&lt;br /&gt;
&lt;br /&gt;
Wenn nichts angezeigt wird evtl. noch das automatische Umrechnen der Koordinatensysteme aktivieren:&lt;br /&gt;
 Settings -&amp;gt; Project Settings -&amp;gt; Coordinate Reference System -&amp;gt; Enable “on the fly” CRS transformation&lt;br /&gt;
&lt;br /&gt;
Über das Kontextmenü im Layerfenster,kann man auch den Linienstil einstellen, wenn man es deutlicher mag.&lt;br /&gt;
&lt;br /&gt;
== Plugins Installieren ==&lt;br /&gt;
&lt;br /&gt;
 Erweiterungen -&amp;gt; Python Erweiterungen herunterladen...&lt;br /&gt;
&lt;br /&gt;
Im Karteireiter Repositories kann man außer dem offiziellen Repository noch weitere der Liste hinzufügen (geht dann automatisch)&lt;br /&gt;
&lt;br /&gt;
Unter Erweiterungen kann man dann suchen und Installieren. Nürtzlich ist z.B. das OpenLayers Plugin, mit dem sich Layer aus den gängigen Karten über das Framework OpenLayers laden lassen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Plugin installiert ist, kann man bei einem leeren Projekt mal einen OpenLayers-Layer hinzufügen: Plugins -&amp;gt;OpenLayers plugin -&amp;gt; Add OpenStreetMap Layer. Dann sollte man die OpenStreetMap-Weltkarte sehen.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19296</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19296"/>
		<updated>2012-10-15T16:17:59Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[Datei:QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;br /&gt;
Beispiel: Export der Reutlinger Landkreisgrenze als Geojson.&lt;br /&gt;
&lt;br /&gt;
=== 1. Import der Shapefiles ===&lt;br /&gt;
Verschiedene Firmen haben sich darauf spezialisiert, Shapefiles aus OpenStreetmap Daten zu generieren.&lt;br /&gt;
 http://wiki.openstreetmap.org/wiki/Shapefiles#Download_pre-made_shapefiles&lt;br /&gt;
 &lt;br /&gt;
fündig werden wir hier:&lt;br /&gt;
 http://downloads.cloudmade.com/europe/western_europe/germany/baden-wurttemberg/baden-wurttemberg.shapefiles.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugins Installieren ==&lt;br /&gt;
&lt;br /&gt;
 Erweiterungen -&amp;gt; Python Erweiterungen herunterladen...&lt;br /&gt;
&lt;br /&gt;
Im Karteireiter Repositories kann man außer dem offiziellen Repository noch weitere der Liste hinzufügen (geht dann automatisch)&lt;br /&gt;
&lt;br /&gt;
Unter Erweiterungen kann man dann suchen und Installieren. Nürtzlich ist z.B. das OpenLayers Plugin, mit dem sich Layer aus den gängigen Karten über das Framework OpenLayers laden lassen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Plugin installiert ist, kann man bei einem leeren Projekt mal einen OpenLayers-Layer hinzufügen: Plugins -&amp;gt;OpenLayers plugin -&amp;gt; Add OpenStreetMap Layer. Dann sollte man die OpenStreetMap-Weltkarte sehen.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=OpenStreetMap(OSM)&amp;diff=19295</id>
		<title>OpenStreetMap(OSM)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=OpenStreetMap(OSM)&amp;diff=19295"/>
		<updated>2012-10-15T16:11:28Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Die Seite wurde neu angelegt: „== Links == http://planet.openstreetmap.org/  http://openstreetmap.org“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
http://planet.openstreetmap.org/&lt;br /&gt;
&lt;br /&gt;
http://openstreetmap.org&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Webmapping&amp;diff=19294</id>
		<title>Webmapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Webmapping&amp;diff=19294"/>
		<updated>2012-10-15T16:10:58Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Webmapping ==&lt;br /&gt;
Stichworte: Google Maps, OpenLayers, Bing Maps, Map24, Mapnik, OpenStreetMap&lt;br /&gt;
=== OpenStreetMap (OSM) ===&lt;br /&gt;
[[OpenStreetMap(OSM)]]&lt;br /&gt;
&lt;br /&gt;
=== OpenLayers ===&lt;br /&gt;
[[Openlayers]]&lt;br /&gt;
&lt;br /&gt;
Als reine Javascript-Anwendung openlayers [http://openlayers.org] interessant ist hier die einbindung von openstreetmap, gibt es mit Anleitung.&lt;br /&gt;
&lt;br /&gt;
Interessante Beispiele:&lt;br /&gt;
http://openlayers.org/dev/examples/&lt;br /&gt;
mit KML-Support&lt;br /&gt;
&lt;br /&gt;
=== Google Maps ===&lt;br /&gt;
[[Google Maps]]&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19293</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19293"/>
		<updated>2012-10-15T15:55:22Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Plugins Installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[Datei:QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;br /&gt;
&lt;br /&gt;
== Plugins Installieren ==&lt;br /&gt;
&lt;br /&gt;
 Erweiterungen -&amp;gt; Python Erweiterungen herunterladen...&lt;br /&gt;
&lt;br /&gt;
Im Karteireiter Repositories kann man außer dem offiziellen Repository noch weitere der Liste hinzufügen (geht dann automatisch)&lt;br /&gt;
&lt;br /&gt;
Unter Erweiterungen kann man dann suchen und Installieren. Nürtzlich ist z.B. das OpenLayers Plugin, mit dem sich Layer aus den gängigen Karten über das Framework OpenLayers laden lassen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Plugin installiert ist, kann man bei einem leeren Projekt mal einen OpenLayers-Layer hinzufügen: Plugins -&amp;gt;OpenLayers plugin -&amp;gt; Add OpenStreetMap Layer. Dann sollte man die OpenStreetMap-Weltkarte sehen.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19292</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19292"/>
		<updated>2012-10-15T15:52:23Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* OpenStreetMap Plugin installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[Datei:QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;br /&gt;
&lt;br /&gt;
== Plugins Installieren ==&lt;br /&gt;
&lt;br /&gt;
 Erweiterungen -&amp;gt; Python Erweiterungen herunterladen...&lt;br /&gt;
&lt;br /&gt;
Im Karteireiter Repositories kann man außer dem offiziellen Repository noch weitere der Liste hinzufügen (geht dann automatisch)&lt;br /&gt;
&lt;br /&gt;
Unter Erweiterungen kann man dann suchen und Installieren. Nürtzlich ist z.B. das OpenStreetMap Plugin&lt;br /&gt;
&lt;br /&gt;
Wenn das Plugin installiert ist, kann man bei einem leeren Projekt mal einen OpenStreetMap-Layer hinzufügen: Plugins -&amp;gt;OpenLayers plugin -&amp;gt; Add OpenStreetMap Layer. Dann sollte man die OpenStreetMap-Weltkarte sehen.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19291</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19291"/>
		<updated>2012-10-15T15:45:19Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[Datei:QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;br /&gt;
&lt;br /&gt;
== OpenStreetMap Plugin installieren ==&lt;br /&gt;
&lt;br /&gt;
 Plugins -&amp;gt; Fetch Python Plugins -&amp;gt; Repositories -&amp;gt; Add 3rd parties repositories &lt;br /&gt;
&lt;br /&gt;
auswählen und dann unter Repositories das OpenLayers Plugin (evtl. zuvor filtern mit OpenLayers) installieren.&lt;br /&gt;
&lt;br /&gt;
Wenn das Plugin installiert ist, kann man bei einem leeren Projekt mal einen OpenStreetMap-Layer hinzufügen: Plugins -&amp;gt;OpenLayers plugin -&amp;gt; Add OpenStreetMap Layer. Dann sollte man die OpenStreetMap-Weltkarte sehen.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19290</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19290"/>
		<updated>2012-10-15T15:43:47Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[Datei:QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19289</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19289"/>
		<updated>2012-10-15T15:43:07Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
Creating Maps Quick Guide [[QGISGuide_Qian.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:QGISGuide_Qian.pdf&amp;diff=19288</id>
		<title>Datei:QGISGuide Qian.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:QGISGuide_Qian.pdf&amp;diff=19288"/>
		<updated>2012-10-15T15:40:44Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Creating Maps in QGIS: A Quick Quide
Quelle: http://www.lib.uwaterloo.ca/locations/umd/documents/QGISGuide_Qian.pdf (Zugriff 10/2012)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating Maps in QGIS: A Quick Quide&lt;br /&gt;
Quelle: http://www.lib.uwaterloo.ca/locations/umd/documents/QGISGuide_Qian.pdf (Zugriff 10/2012)&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19287</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19287"/>
		<updated>2012-10-15T15:38:59Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Einführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19286</id>
		<title>QGIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=QGIS&amp;diff=19286"/>
		<updated>2012-10-15T15:38:48Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Einführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung ==&lt;br /&gt;
Benutzerhandbuch [[Datei:Qgis-1.7.0 user guide de.pdf]]&lt;br /&gt;
http://www.qgis.org/de/dokumentation/handbuecher.html&lt;br /&gt;
&lt;br /&gt;
== GeoJSON Exportieren ==&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Qgis-1.7.0_user_guide_de.pdf&amp;diff=19285</id>
		<title>Datei:Qgis-1.7.0 user guide de.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Qgis-1.7.0_user_guide_de.pdf&amp;diff=19285"/>
		<updated>2012-10-15T15:36:19Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Quantum GIS 1.7.0 Benutzerhandbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quantum GIS 1.7.0 Benutzerhandbuch&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19275</id>
		<title>TYPO3 - Probleme lösen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19275"/>
		<updated>2012-10-11T10:55:26Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Problem: Chinesische Zeichen werden nicht gespeichert */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MySQL Tabellen liegen im falschen Zeichensatz vor ===&lt;br /&gt;
&lt;br /&gt;
dafür gibt es ein schönes Skript:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Db_utf8_fix.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Beim Update gehen Teile der Templates verloren ===&lt;br /&gt;
Nach der Version 4.1 wurden Tabellenfelder von blob auf Text umgestellt. TYPO 3 versucht das ohne Angabe des Zeichensatzen. Dabei bricht mysql das Umwandeln nach einem Umlaut o.ä. ab und verwirft den Rest. &lt;br /&gt;
Meist passiert das in TS Templates wenn in Kommentaren Umlaute sind. Folge, nach dem Update geht das Frontend nicht mehr.&lt;br /&gt;
&lt;br /&gt;
Lösung: die Umwandlung von Hand machen (siehe auch [[Typo3 - Update]]) Prinzipell geht das so:&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist dabei die Angabe des Character Set in dem die Zeichen vorliegen, damit mySQL weiß wie es die Konvertierung machen. Normalerweise ist das latin1.&lt;br /&gt;
&lt;br /&gt;
siehe auch: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html&lt;br /&gt;
&lt;br /&gt;
eventuell hilft es auch vorher die DB umzustellen (siehe falscher Zeichensatz)&lt;br /&gt;
&lt;br /&gt;
=== Problem: Chinesische Zeichen werden nicht gespeichert ===&lt;br /&gt;
Beim speichern mit chinesischen Zeichen tritt der Fehler:&lt;br /&gt;
&lt;br /&gt;
 102: These fields are not properly updated in database: (title) Probably value mismatch with fieldtype.&lt;br /&gt;
&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Tritt auf wenn TYPO3 mit utf-8 arbeitet, aber die Datenbank in latin Felder speichert. Die Datenbank sollte überall mit utf-8 arbeiten. Einfach per phpmyadmin umstellen. Achtung, wenn TYPO3 noch nicht auf utf-8 umgestellt ist, dann muß TYPO3 umgestellt werden (Stichwort force utf-8) UND die Datenbank inhalte konvertiert werden (utf8_fix Skript) Es gibt auch andere Lösungsansätze im Internet, diese sind aber nicht sinnvoll, wenn die Voraussetzungen der DB nicht stimmen. &lt;br /&gt;
&lt;br /&gt;
Tipp: Auch im Falle das Typo3 schon mit utf-8 arbeitet, aber die DB noch latin hat, kann man sich Zeit sparten und das utf-8 fix Skript nehmen, allerdings muß man es etwas anpassen:&lt;br /&gt;
&lt;br /&gt;
Wenn TYPO3 mit utf-8 arbeitet, aber die Datenbank mit latin speichert kann man das Skript [[Datei:Db_utf8_fix-solo.zip]] anpassen. Es wandelt zuerst Textfelder in Binaries und diese dann zurück in Textfelder mit utf-8. Einfach das erste mysql Statement auskommentieren, dann stellt es nur die Datenbank um und konvertiert nichts.&lt;br /&gt;
&lt;br /&gt;
=== Problem: Funktion xyz deprecated ===&lt;br /&gt;
Todo: ausführlicher schreiben&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Entweder den &amp;#039;&amp;#039;&amp;#039;Code änder&amp;#039;&amp;#039;&amp;#039;n oder wenn es schnell gehen muß &amp;#039;&amp;#039;&amp;#039;php-deprecated warning level&amp;#039;&amp;#039;&amp;#039; Ändern oder wenn es nur im TYPO3 auftritt im &amp;#039;&amp;#039;&amp;#039;Install Tool&amp;#039;&amp;#039;&amp;#039; ändern.&lt;br /&gt;
&lt;br /&gt;
localconf (Zahlencode entspricht php):&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;SYS&amp;#039;][&amp;#039;exceptionalErrors&amp;#039;] = &amp;#039;6133&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
oder (geht auch über install Tool&lt;br /&gt;
&lt;br /&gt;
 displayErrors&lt;br /&gt;
auf 0 setzen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[htaccess]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; JavaScript Schnipsel auf der Seite werden zerhackt.&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039; htmlcleaning = all kann dazu führen das JavaScript Code zerstört wird. In diesem Fall den Code in separate Datei auslagern oder htmlcleaning = none&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem&amp;#039;&amp;#039;&amp;#039; failed to open Stream === &lt;br /&gt;
&lt;br /&gt;
Nach dem Löschen des Caches dauert es sehr lange bis die Seite aufgebaut wird und es erscheint eine &amp;#039;&amp;#039;&amp;#039;php Warnung (finfo_file -&amp;gt; failed to open Stream).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt nicht bei 4.1 aber bei 4.2 (gesehen auf 4.2.8) auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fehlermeldung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Warning: finfo_file(http://aufbau.blablub.com/) [function.finfo-file]: failed to open stream: HTTP request failed! in /www/htdocs/blablub/cms/typo3/sysext/cms/tslib/class.tslib_pagegen.php on line 490&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt auf wenn ein favicon über TS eingebunden wird (page.shortcuticon = fileadmin/mein/pfad/favicon.ico), die Datei aber nicht vorliegt oder nicht darauf zugegriffen werden kann.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19274</id>
		<title>TYPO3 - Probleme lösen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19274"/>
		<updated>2012-10-11T09:55:15Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Beim Update gehen Teile der Templates verloren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MySQL Tabellen liegen im falschen Zeichensatz vor ===&lt;br /&gt;
&lt;br /&gt;
dafür gibt es ein schönes Skript:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Db_utf8_fix.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Beim Update gehen Teile der Templates verloren ===&lt;br /&gt;
Nach der Version 4.1 wurden Tabellenfelder von blob auf Text umgestellt. TYPO 3 versucht das ohne Angabe des Zeichensatzen. Dabei bricht mysql das Umwandeln nach einem Umlaut o.ä. ab und verwirft den Rest. &lt;br /&gt;
Meist passiert das in TS Templates wenn in Kommentaren Umlaute sind. Folge, nach dem Update geht das Frontend nicht mehr.&lt;br /&gt;
&lt;br /&gt;
Lösung: die Umwandlung von Hand machen (siehe auch [[Typo3 - Update]]) Prinzipell geht das so:&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist dabei die Angabe des Character Set in dem die Zeichen vorliegen, damit mySQL weiß wie es die Konvertierung machen. Normalerweise ist das latin1.&lt;br /&gt;
&lt;br /&gt;
siehe auch: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html&lt;br /&gt;
&lt;br /&gt;
eventuell hilft es auch vorher die DB umzustellen (siehe falscher Zeichensatz)&lt;br /&gt;
&lt;br /&gt;
=== Problem: Chinesische Zeichen werden nicht gespeichert ===&lt;br /&gt;
Beim speichern mit chinesischen Zeichen tritt der Fehler:&lt;br /&gt;
&lt;br /&gt;
 102: These fields are not properly updated in database: (title) Probably value mismatch with fieldtype.&lt;br /&gt;
&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problem: Funktion xyz deprecated ===&lt;br /&gt;
Todo: ausführlicher schreiben&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Entweder den &amp;#039;&amp;#039;&amp;#039;Code änder&amp;#039;&amp;#039;&amp;#039;n oder wenn es schnell gehen muß &amp;#039;&amp;#039;&amp;#039;php-deprecated warning level&amp;#039;&amp;#039;&amp;#039; Ändern oder wenn es nur im TYPO3 auftritt im &amp;#039;&amp;#039;&amp;#039;Install Tool&amp;#039;&amp;#039;&amp;#039; ändern.&lt;br /&gt;
&lt;br /&gt;
localconf (Zahlencode entspricht php):&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;SYS&amp;#039;][&amp;#039;exceptionalErrors&amp;#039;] = &amp;#039;6133&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
oder (geht auch über install Tool&lt;br /&gt;
&lt;br /&gt;
 displayErrors&lt;br /&gt;
auf 0 setzen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[htaccess]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; JavaScript Schnipsel auf der Seite werden zerhackt.&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039; htmlcleaning = all kann dazu führen das JavaScript Code zerstört wird. In diesem Fall den Code in separate Datei auslagern oder htmlcleaning = none&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem&amp;#039;&amp;#039;&amp;#039; failed to open Stream === &lt;br /&gt;
&lt;br /&gt;
Nach dem Löschen des Caches dauert es sehr lange bis die Seite aufgebaut wird und es erscheint eine &amp;#039;&amp;#039;&amp;#039;php Warnung (finfo_file -&amp;gt; failed to open Stream).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt nicht bei 4.1 aber bei 4.2 (gesehen auf 4.2.8) auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fehlermeldung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Warning: finfo_file(http://aufbau.blablub.com/) [function.finfo-file]: failed to open stream: HTTP request failed! in /www/htdocs/blablub/cms/typo3/sysext/cms/tslib/class.tslib_pagegen.php on line 490&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt auf wenn ein favicon über TS eingebunden wird (page.shortcuticon = fileadmin/mein/pfad/favicon.ico), die Datei aber nicht vorliegt oder nicht darauf zugegriffen werden kann.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19273</id>
		<title>TYPO3 - Probleme lösen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19273"/>
		<updated>2012-10-11T09:53:33Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Beim Update gehen Teile der Templates verloren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MySQL Tabellen liegen im falschen Zeichensatz vor ===&lt;br /&gt;
&lt;br /&gt;
dafür gibt es ein schönes Skript:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Db_utf8_fix.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Beim Update gehen Teile der Templates verloren ===&lt;br /&gt;
Nach der Version 4.1 wurden Tabellenfelder von blob auf Text umgestellt. TYPO 3 versucht das ohne Angabe des Zeichensatzen. Dabei bricht mysql das Umwandeln nach einem Umlaut o.ä. ab und verwirft den Rest. &lt;br /&gt;
Meist passiert das in TS Templates wenn in Kommentaren Umlaute sind. Folge, nach dem Update geht das Frontend nicht mehr.&lt;br /&gt;
&lt;br /&gt;
Lösung: die Umwandlung von Hand machen (siehe auch [[Typo3 - Update]]) Prinzipell geht das so:&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;&lt;br /&gt;
&lt;br /&gt;
siehe auch: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html&lt;br /&gt;
&lt;br /&gt;
eventuell hilft es auch vorher die DB umzustellen (siehe falscher Zeichensatz)&lt;br /&gt;
&lt;br /&gt;
=== Problem: Chinesische Zeichen werden nicht gespeichert ===&lt;br /&gt;
Beim speichern mit chinesischen Zeichen tritt der Fehler:&lt;br /&gt;
&lt;br /&gt;
 102: These fields are not properly updated in database: (title) Probably value mismatch with fieldtype.&lt;br /&gt;
&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problem: Funktion xyz deprecated ===&lt;br /&gt;
Todo: ausführlicher schreiben&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Entweder den &amp;#039;&amp;#039;&amp;#039;Code änder&amp;#039;&amp;#039;&amp;#039;n oder wenn es schnell gehen muß &amp;#039;&amp;#039;&amp;#039;php-deprecated warning level&amp;#039;&amp;#039;&amp;#039; Ändern oder wenn es nur im TYPO3 auftritt im &amp;#039;&amp;#039;&amp;#039;Install Tool&amp;#039;&amp;#039;&amp;#039; ändern.&lt;br /&gt;
&lt;br /&gt;
localconf (Zahlencode entspricht php):&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;SYS&amp;#039;][&amp;#039;exceptionalErrors&amp;#039;] = &amp;#039;6133&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
oder (geht auch über install Tool&lt;br /&gt;
&lt;br /&gt;
 displayErrors&lt;br /&gt;
auf 0 setzen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[htaccess]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; JavaScript Schnipsel auf der Seite werden zerhackt.&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039; htmlcleaning = all kann dazu führen das JavaScript Code zerstört wird. In diesem Fall den Code in separate Datei auslagern oder htmlcleaning = none&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem&amp;#039;&amp;#039;&amp;#039; failed to open Stream === &lt;br /&gt;
&lt;br /&gt;
Nach dem Löschen des Caches dauert es sehr lange bis die Seite aufgebaut wird und es erscheint eine &amp;#039;&amp;#039;&amp;#039;php Warnung (finfo_file -&amp;gt; failed to open Stream).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt nicht bei 4.1 aber bei 4.2 (gesehen auf 4.2.8) auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fehlermeldung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Warning: finfo_file(http://aufbau.blablub.com/) [function.finfo-file]: failed to open stream: HTTP request failed! in /www/htdocs/blablub/cms/typo3/sysext/cms/tslib/class.tslib_pagegen.php on line 490&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt auf wenn ein favicon über TS eingebunden wird (page.shortcuticon = fileadmin/mein/pfad/favicon.ico), die Datei aber nicht vorliegt oder nicht darauf zugegriffen werden kann.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Db_utf8_fix-solo.zip&amp;diff=19272</id>
		<title>Datei:Db utf8 fix-solo.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Db_utf8_fix-solo.zip&amp;diff=19272"/>
		<updated>2012-10-11T09:31:10Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Umwandeln einer Datenbank nach utf-8. Ursprünglich für TYPO3 Installationen gedacht. Direkte Eingabe der Daten im Skript.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Umwandeln einer Datenbank nach utf-8. Ursprünglich für TYPO3 Installationen gedacht. Direkte Eingabe der Daten im Skript.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19271</id>
		<title>TYPO3 - Probleme lösen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19271"/>
		<updated>2012-10-11T09:27:56Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Beim Update gehen Teile der Templates verloren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MySQL Tabellen liegen im falschen Zeichensatz vor ===&lt;br /&gt;
&lt;br /&gt;
dafür gibt es ein schönes Skript:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Db_utf8_fix.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Beim Update gehen Teile der Templates verloren ===&lt;br /&gt;
Nach der Version 4.1 wurden Tabellenfelder von blob auf Text umgestellt. TYPO 3 versucht das ohne Angabe des Zeichensatzen. Dabei bricht mysql das Umwandeln nach einem Umlaut o.ä. ab und verwirft den Rest. &lt;br /&gt;
Meist passiert das in TS Templates wenn in Kommentaren Umlaute sind. Folge, nach dem Update geht das Frontend nicht mehr.&lt;br /&gt;
&lt;br /&gt;
Lösung: die Umwandlung von Hand machen (siehe auch [[Typo3 - Update]]) Prinzipell geht das so:&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;&lt;br /&gt;
&lt;br /&gt;
eventuell hilft es auch vorher die DB umzustellen (siehe falscher Zeichensatz)&lt;br /&gt;
&lt;br /&gt;
=== Problem: Chinesische Zeichen werden nicht gespeichert ===&lt;br /&gt;
Beim speichern mit chinesischen Zeichen tritt der Fehler:&lt;br /&gt;
&lt;br /&gt;
 102: These fields are not properly updated in database: (title) Probably value mismatch with fieldtype.&lt;br /&gt;
&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problem: Funktion xyz deprecated ===&lt;br /&gt;
Todo: ausführlicher schreiben&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Entweder den &amp;#039;&amp;#039;&amp;#039;Code änder&amp;#039;&amp;#039;&amp;#039;n oder wenn es schnell gehen muß &amp;#039;&amp;#039;&amp;#039;php-deprecated warning level&amp;#039;&amp;#039;&amp;#039; Ändern oder wenn es nur im TYPO3 auftritt im &amp;#039;&amp;#039;&amp;#039;Install Tool&amp;#039;&amp;#039;&amp;#039; ändern.&lt;br /&gt;
&lt;br /&gt;
localconf (Zahlencode entspricht php):&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;SYS&amp;#039;][&amp;#039;exceptionalErrors&amp;#039;] = &amp;#039;6133&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
oder (geht auch über install Tool&lt;br /&gt;
&lt;br /&gt;
 displayErrors&lt;br /&gt;
auf 0 setzen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[htaccess]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; JavaScript Schnipsel auf der Seite werden zerhackt.&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039; htmlcleaning = all kann dazu führen das JavaScript Code zerstört wird. In diesem Fall den Code in separate Datei auslagern oder htmlcleaning = none&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem&amp;#039;&amp;#039;&amp;#039; failed to open Stream === &lt;br /&gt;
&lt;br /&gt;
Nach dem Löschen des Caches dauert es sehr lange bis die Seite aufgebaut wird und es erscheint eine &amp;#039;&amp;#039;&amp;#039;php Warnung (finfo_file -&amp;gt; failed to open Stream).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt nicht bei 4.1 aber bei 4.2 (gesehen auf 4.2.8) auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fehlermeldung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Warning: finfo_file(http://aufbau.blablub.com/) [function.finfo-file]: failed to open stream: HTTP request failed! in /www/htdocs/blablub/cms/typo3/sysext/cms/tslib/class.tslib_pagegen.php on line 490&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt auf wenn ein favicon über TS eingebunden wird (page.shortcuticon = fileadmin/mein/pfad/favicon.ico), die Datei aber nicht vorliegt oder nicht darauf zugegriffen werden kann.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19270</id>
		<title>TYPO3 - Probleme lösen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Probleme_l%C3%B6sen&amp;diff=19270"/>
		<updated>2012-10-11T09:27:06Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* MySQL Tabellen liegen im falschen Zeichensatz vor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MySQL Tabellen liegen im falschen Zeichensatz vor ===&lt;br /&gt;
&lt;br /&gt;
dafür gibt es ein schönes Skript:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Db_utf8_fix.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Beim Update gehen Teile der Templates verloren ===&lt;br /&gt;
Nach der Version 4.1 wurden Tabellenfelder von blob auf Text umgestellt. TYPO 3 versucht das ohne Angabe des Zeichensatzen. Dabei bricht mysql das Umwandeln nach einem Umlaut o.ä. ab und verwirft den Rest. &lt;br /&gt;
Meist passiert das in TS Templates wenn in Kommentaren Umlaute sind. Folge, nach dem Update geht das Frontend nicht mehr.&lt;br /&gt;
&lt;br /&gt;
Lösung: die Umwandlung von Hand machen (siehe auch [[Typo3 - Update]]) Prinzipell geht das so:&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;&lt;br /&gt;
&lt;br /&gt;
=== Problem: Chinesische Zeichen werden nicht gespeichert ===&lt;br /&gt;
Beim speichern mit chinesischen Zeichen tritt der Fehler:&lt;br /&gt;
&lt;br /&gt;
 102: These fields are not properly updated in database: (title) Probably value mismatch with fieldtype.&lt;br /&gt;
&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problem: Funktion xyz deprecated ===&lt;br /&gt;
Todo: ausführlicher schreiben&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Entweder den &amp;#039;&amp;#039;&amp;#039;Code änder&amp;#039;&amp;#039;&amp;#039;n oder wenn es schnell gehen muß &amp;#039;&amp;#039;&amp;#039;php-deprecated warning level&amp;#039;&amp;#039;&amp;#039; Ändern oder wenn es nur im TYPO3 auftritt im &amp;#039;&amp;#039;&amp;#039;Install Tool&amp;#039;&amp;#039;&amp;#039; ändern.&lt;br /&gt;
&lt;br /&gt;
localconf (Zahlencode entspricht php):&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;SYS&amp;#039;][&amp;#039;exceptionalErrors&amp;#039;] = &amp;#039;6133&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
oder (geht auch über install Tool&lt;br /&gt;
&lt;br /&gt;
 displayErrors&lt;br /&gt;
auf 0 setzen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[htaccess]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; JavaScript Schnipsel auf der Seite werden zerhackt.&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung:&amp;#039;&amp;#039;&amp;#039; htmlcleaning = all kann dazu führen das JavaScript Code zerstört wird. In diesem Fall den Code in separate Datei auslagern oder htmlcleaning = none&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Problem&amp;#039;&amp;#039;&amp;#039; failed to open Stream === &lt;br /&gt;
&lt;br /&gt;
Nach dem Löschen des Caches dauert es sehr lange bis die Seite aufgebaut wird und es erscheint eine &amp;#039;&amp;#039;&amp;#039;php Warnung (finfo_file -&amp;gt; failed to open Stream).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt nicht bei 4.1 aber bei 4.2 (gesehen auf 4.2.8) auf.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fehlermeldung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Warning: finfo_file(http://aufbau.blablub.com/) [function.finfo-file]: failed to open stream: HTTP request failed! in /www/htdocs/blablub/cms/typo3/sysext/cms/tslib/class.tslib_pagegen.php on line 490&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lösung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Fehler tritt auf wenn ein favicon über TS eingebunden wird (page.shortcuticon = fileadmin/mein/pfad/favicon.ico), die Datei aber nicht vorliegt oder nicht darauf zugegriffen werden kann.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Db_utf8_fix.zip&amp;diff=19269</id>
		<title>Datei:Db utf8 fix.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Db_utf8_fix.zip&amp;diff=19269"/>
		<updated>2012-10-11T09:23:56Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Skript für das Umstellen einer TYPO3 Datenbank auf utf-8. Inkl. Zeichenkonvertierung.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Skript für das Umstellen einer TYPO3 Datenbank auf utf-8. Inkl. Zeichenkonvertierung.&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Update_typo3.zip&amp;diff=19268</id>
		<title>Datei:Update typo3.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Update_typo3.zip&amp;diff=19268"/>
		<updated>2012-10-11T09:22:33Z</updated>

		<summary type="html">&lt;p&gt;Kholja: PHP Skript für automatisches Update von TYPO3 mit Download und Symlinks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PHP Skript für automatisches Update von TYPO3 mit Download und Symlinks&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:CreateSymlinks.zip&amp;diff=19267</id>
		<title>Datei:CreateSymlinks.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:CreateSymlinks.zip&amp;diff=19267"/>
		<updated>2012-10-11T09:21:33Z</updated>

		<summary type="html">&lt;p&gt;Kholja: PHP Skript zum erstellen von Symlinks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PHP Skript zum erstellen von Symlinks&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_Snippets&amp;diff=19170</id>
		<title>Typo3 Extensions programmieren - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_Snippets&amp;diff=19170"/>
		<updated>2012-05-16T17:18:02Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Session Variablen in Typo3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Templates ==&lt;br /&gt;
=== Template Code holen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function getTemplateCode($mySubpart){&lt;br /&gt;
        $tsTemplateFile = $this-&amp;gt;conf[&amp;#039;templateFile&amp;#039;];&lt;br /&gt;
        // Wenn Flextemplate dann code aus diesem, sonst aus TS&lt;br /&gt;
	$this-&amp;gt;flexConf[&amp;#039;template&amp;#039;] ? $templateCode = this-&amp;gt;cObj-&amp;gt;fileResource(&amp;quot;uploads/tx_&amp;quot;.$this-&amp;gt;extKey.&amp;quot;/&amp;quot;.$this-&amp;gt;flexConf[&amp;#039;template&amp;#039;]) : $templateCode=$this-&amp;gt;cObj-&amp;gt;fileResource($tsTemplateFile);&lt;br /&gt;
        return $templateCode;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Saubere Links in Extensions erzeugen ===&lt;br /&gt;
Kommentar von Elmar Hinz:&lt;br /&gt;
&lt;br /&gt;
Die Linkfunktionen der tslib_pibase sind nicht garade eine Hilfe. 2/3&lt;br /&gt;
davon streichen und die Extension wird 1/3 besser. Wenn Du Dich allein auf&lt;br /&gt;
die Funktion pi_linkTP_keepPIvars konzentrierst, kannst du damit aber fast&lt;br /&gt;
alles stemmen. Noch konsequenter wendest du gleich selbst die&lt;br /&gt;
zugrundeliegende typolink Funktion an.&lt;br /&gt;
&lt;br /&gt;
Das Thema mit dem Fokus auf ein sauberes Caching hier:&lt;br /&gt;
&lt;br /&gt;
http://t3flyers.wordpress.com/2006/09/11/a-quick-guide-to-proper-caching-with-tslib_pibase-episode-1/&lt;br /&gt;
&lt;br /&gt;
== Session Variablen in Typo3 ==&lt;br /&gt;
Mit Hilfe von Sessions kann man Benutzerbezogene Daten speichern, ohne daß Parameter per Get oder Post übertragenwerden müssen. Auch Seiten über Links etc. neu geladen werden.&lt;br /&gt;
&lt;br /&gt;
Im Prinzip kann man Session Variablen folgendermaßen spreichern.&lt;br /&gt;
  $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;,&amp;quot;$data&amp;quot;, &amp;quot;$zustand&amp;quot;);&lt;br /&gt;
  $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;storeSessionData();&lt;br /&gt;
&lt;br /&gt;
=== Benutzer-Session oder Browser-Session ===&lt;br /&gt;
In Typo3 gibt es Standardmäßig 2 Sessions die man nutzen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;User data&amp;#039;&amp;#039;&amp;#039; =&amp;gt; Eingeloggter User. Kein Zugriff mehr wenn ausgeloggt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Session data&amp;#039;&amp;#039;&amp;#039; =&amp;gt; Jeder User. Eingeloggt oder nicht. Daten sind an die &amp;quot;browsing-session&amp;quot; gebunden und nicht an die user-id. Bleibt erhalten bis der Browser geschlossen wird.&lt;br /&gt;
&lt;br /&gt;
Default expire-time: 24h&lt;br /&gt;
&lt;br /&gt;
=== Mit Session und Token überprüfen ob Benutzer eine Formularseite nochmal neu geladen hat ===&lt;br /&gt;
Manchmal ist es nützlich zu wissen ob der Benutzer mittels reload Button oder den Navigationsbuttons die Seite neu aufgerufen hat oder diese nach dem Absenden eines Formulars erreicht hat. Nach dem Senden will man evtl. Werte in der Datenbank speichern, aber dies nicht mehr tun, wenn der Benutzer Reload gedrückt hat. Mit einem Trick kann man dies verhindern.&lt;br /&gt;
&lt;br /&gt;
# Man erzeugt ein Token mit einem Hash-Wert und speichert diesen in der Session und zudem als Verstecktes Feld im Formular. &lt;br /&gt;
# Nach Absenden des Formulars vergleicht man den Post-Wert mit der Session. Wenn diese gleich sind ist alles in Ordnung. Danach erzeugt man ein neues Token und speichert es wieder in der Session. Wenn der Nutzer  die Seite mit Reload nocheinmal lädt stimmt das Session Token mit dem Post Wert nicht mehr überein, dieser hat sich ja nicht verändert. Der Session Wert hingegen schon. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Session &lt;br /&gt;
$this-&amp;gt;sesData = array();&lt;br /&gt;
$this-&amp;gt;sesData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;#039;ses&amp;#039;,&amp;quot;sesData&amp;quot;);&lt;br /&gt;
// Token Vergleich &lt;br /&gt;
$this-&amp;gt;sesData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;,&amp;quot;sesData&amp;quot;);&lt;br /&gt;
$this-&amp;gt;is_reloaded = $this-&amp;gt;is_reloaded();&lt;br /&gt;
// Neues Token in Session speichern&lt;br /&gt;
$this-&amp;gt;sesData[&amp;#039;token&amp;#039;] = hash(&amp;#039;md5&amp;#039;,mktime());&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;#039;ses&amp;#039;,&amp;quot;sesData&amp;quot;, $this-&amp;gt;sesData);&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;storeSessionData();&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
// Token in verstecktes Feld speichern&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;&amp;#039;.$this-&amp;gt;prefixId.&amp;#039;[token]&amp;quot; value=&amp;quot;&amp;#039;.$this-&amp;gt;sesData[&amp;#039;token&amp;#039;].&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
// Check if last token fits piVarToken then page is not reloaded&lt;br /&gt;
function is_reloaded(){&lt;br /&gt;
	if(!empty($this-&amp;gt;piVars[&amp;#039;token&amp;#039;])){&lt;br /&gt;
		if($this-&amp;gt;piVars[&amp;#039;token&amp;#039;] == $this-&amp;gt;sesData[&amp;#039;token&amp;#039;]){&lt;br /&gt;
			$reloaded = 0; // if piVar fits last session token everything is alright&lt;br /&gt;
		}else{ &lt;br /&gt;
			$reloaded = 1;&lt;br /&gt;
		}&lt;br /&gt;
	} else $reloaded = 0;//no piVar =&amp;gt; page is fresh&lt;br /&gt;
	return $reloaded;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(type, key)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;#039;&amp;#039;&amp;#039;type&amp;#039;&amp;#039;&amp;#039;&amp;quot; Entweder &amp;quot;user&amp;quot; or &amp;quot;ses&amp;quot;, definiert den Namensraum (data-space), user-session oder browsing-session (siehe oben)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;#039;&amp;#039;&amp;#039;key&amp;#039;&amp;#039;&amp;#039;&amp;quot; der &amp;quot;name&amp;quot; unter dem die Daten gespeichert werden. Arrays oder Scalars.&lt;br /&gt;
&lt;br /&gt;
Note that the key &amp;quot;recs&amp;quot; is reserved for the built-in &amp;quot;shopping-basket&amp;quot;. As is &amp;quot;sys&amp;quot; (for TYPO3 standard modules and code)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;loginUser){&lt;br /&gt;
    $myData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;user&amp;quot;,&amp;quot;myData&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    $myData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey(&amp;quot;ses&amp;quot;,&amp;quot;myData&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Liest die Benutzerdaten (user) mit dem Schlüssel &amp;quot;myData&amp;quot;. Wenn kein Benutzer eingeloggt ist werden die Daten aus der Browser Session verwendet.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Daten Speichern&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(type, key, data)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;type&amp;quot; ist wieder &amp;quot;user&amp;quot; oder &amp;quot;ses&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;key&amp;quot; ist der Name oder auch Schlüssel unter dem die Daten gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Note that the key &amp;quot;recs&amp;quot; is reserved for the built-in &amp;quot;shopping-basket&amp;quot;. As is &amp;quot;sys&amp;quot; (for TYPO3 standard modules and code)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;data&amp;quot; ist der Wert der Variablen die gespeichert werden sollen. Arrays oder normale Skalare (einfache Variablen).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$myConfig[&amp;quot;name&amp;quot;] = &amp;quot;paul&amp;quot;;&lt;br /&gt;
$myConfig[&amp;quot;address&amp;quot;] = &amp;quot;Main street&amp;quot;;&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey(&amp;quot;ses&amp;quot;,&amp;quot;myData&amp;quot;, $myConfig);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stores the array $myConfig under the key &amp;quot;myData&amp;quot; in the session-data. This lasts as long as &amp;quot;paul&amp;quot; is surfing the site!&lt;br /&gt;
&lt;br /&gt;
=== Beispiel Prüfen ob Seite aktualisiert wurde ===&lt;br /&gt;
Manchmal ist es notwendig zu prüfen ob eine Seite mit einem Formular mit dem Submit-Button abgesendet wurde, oder ob die Daten durch Klick auf den Reload Button des Browsers nochmal aufgerufen wurde. In diesem Fall sollten etwa Berechnungen mit den Formulardaten nicht noch einmal ausgeführt werden.&lt;br /&gt;
Mit einer Session läßt sich das lösen:&lt;br /&gt;
&lt;br /&gt;
Session initialisieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// User Session (bei Login) oder &amp;quot;normale&amp;quot; Session nutzen&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;sesData = array();&lt;br /&gt;
($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;loginUser)?{$this-&amp;gt;sesType = &amp;quot;user&amp;quot;:$this-&amp;gt;sesType = &amp;quot;ses&amp;quot;;&lt;br /&gt;
$this-&amp;gt;sesData = $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;getKey($this-&amp;gt;sesType,&amp;quot;sesData&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Formular abgeschickt wird, dann senden wir einen Wert mit, der sich immer verändert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$content .= &amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;&amp;#039;.$this-&amp;gt;prefixId.&amp;#039;[token]&amp;quot; value=&amp;quot;&amp;#039;.hash(&amp;quot;md5&amp;quot;,time()).&amp;#039;&amp;quot; /&amp;gt;!;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Funktion wird bei jedem Abruf festgestellt, ob der im Formular übermittelte Wert in der Session existiert. Falls nicht wird er in der Session gespeichert, die Seite wurde nicht durch klicken auf Reload generiert. Klickt der User hingegen auf Reload, wird der alte Formular Wert noch einmal übermittelt. In diesem Fall stimmt er mit dem beim ersten Aufruf gespeicherten &amp;quot;Token&amp;quot; Wert überein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function is_reloaded(){&lt;br /&gt;
  if(!empty($this-&amp;gt;piVars[&amp;#039;token&amp;#039;])){&lt;br /&gt;
    if($this-&amp;gt;piVars[&amp;#039;token&amp;#039;] == $this-&amp;gt;sesData[&amp;#039;token&amp;#039;]){&lt;br /&gt;
      $reloaded = 1;&lt;br /&gt;
      $this-&amp;gt;piVars = array();&lt;br /&gt;
    }else{&lt;br /&gt;
      $reloaded = 0;&lt;br /&gt;
      $this-&amp;gt;sesData[&amp;#039;token&amp;#039;] = $this-&amp;gt;piVars[&amp;#039;token&amp;#039;];&lt;br /&gt;
      $GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;fe_user-&amp;gt;setKey($this-&amp;gt;sesType,&amp;quot;sesData&amp;quot;, $this-&amp;gt;sesData);&lt;br /&gt;
    }&lt;br /&gt;
  } else $reloaded = 1;&lt;br /&gt;
  return $reloaded;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Größe von Dateien lesbar ausgeben ==&lt;br /&gt;
Aus Typo3 Adventskalender 2008 von Tim Lochmüller&lt;br /&gt;
röße von Dateien ausgeben, jedoch speichert TYPO3 diese Dateigrößen in der Regel in Bytes. Um nun eine für den normalen Menschen lesbare Ausgabe zu bekommen, bietet die Klasse t3lib_div eine nette Funktion zur Formatierung:&lt;br /&gt;
&lt;br /&gt;
      t3lib_div::formatSize($sizeInBytes, $labels=&amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Während sich der erste Parameter wie ich denke von selbst erklärt, bedarf der zweite eine kurze Erläuterung. Der zweite Parameter ist eine durch &amp;quot;|&amp;quot;-Zeichen separierte Liste von Labels für Bytes, Kilobytes, Megabytes und Gigabytes. Der Standard ist &amp;quot; | K| M| G&amp;quot;. In Deutschland zumindest ist man eine andere Schreibweise gewohnt, also gleich mal ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
      $fileSize1 = 370&lt;br /&gt;
      $fileSize2 = 378880&lt;br /&gt;
      $fileSize3 = 387973120&lt;br /&gt;
      $fileSize4 = 397284474880&lt;br /&gt;
       &lt;br /&gt;
      echo t3lib_div::formatSize($fileSize1, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 Bytes&lt;br /&gt;
      echo t3lib_div::formatSize($fileSize2, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 KB&lt;br /&gt;
      echo t3lib_div::formatSize($fileSize3, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 MB&lt;br /&gt;
      echo t3lib_div::formatSize($fileSize4, $labels=&amp;#039; Bytes | KB | MB | GB&amp;#039;);&lt;br /&gt;
      // Ausgabe: 370 GB&lt;br /&gt;
&lt;br /&gt;
== Auf die TypoScript Konfiguration einer anderen Extension zugreifen ==&lt;br /&gt;
Auf TSconf einer anderen Extension zugreifen&lt;br /&gt;
&lt;br /&gt;
Wenn man in einer Extension auf den TypoScript-Setupteil einer anderen Extension zugreifen möchte und im TypoScript-Code die Variablen nicht mehrfach aufführen möchte, kann man dies mit folgender Zeile machen:&lt;br /&gt;
&lt;br /&gt;
 $extConf = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;tmpl-&amp;gt;setup[&amp;#039;plugin.&amp;#039;][&amp;#039;tx_MYEXT_pi1.&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
Dadurch erhält man den kompletten conf-Teil der Extension. Einzelne Variablen bzw. Bereiche erhält man, wenn man die Variable mit [VAR] anhängt.&lt;br /&gt;
&lt;br /&gt;
(Quelle: Typo3 Snippets Juni 2009)&lt;br /&gt;
siehe auch: http://www.lisardo.biz/wiki/GLOBALS-TSFE/&lt;br /&gt;
&lt;br /&gt;
== Wo finde ich was ==&lt;br /&gt;
=== Das Globale TSFE Objekt ===&lt;br /&gt;
Über GLOBAL[‘TSFE’] kann man bei der Extension-Programmierung mehr oder weniger auf das gesamte TypoScript-Setup von Typo3 zugreifen. Man kann aktuelle Konfigurationen abfragen oder auch ändern, so dass sich die Ausgabe ins Frontend abhängig vom installierten Plugin auf jeder Seite ändern kann.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel können damit zusätzliche JavaScript- oder CSS-Definitionen im Kopfbereich ausgegeben werden (siehe CSS und JavaScript im Kopfbereich ausgeben) oder der Bodytag erweitert werden. Folgende Zeile fügt z. B. auf jeder Seite, auf der das Plugin installiert wirde, dem Body-Tag einen onload-Befehl hinzu, wie er für Google-Maps benötigt wird:&lt;br /&gt;
&lt;br /&gt;
* Sessions&lt;br /&gt;
* Datenbankabfragen&lt;br /&gt;
* Zusätzliche Header Daten&lt;br /&gt;
* vieles Mehr&lt;br /&gt;
&lt;br /&gt;
[[TYPO3 - TSFE Objekt]]&lt;br /&gt;
&lt;br /&gt;
=== Das Content Objekt cObj ===&lt;br /&gt;
Hiermit kann man quasi auf alle Informationen und Inhalte der dazugehörigen übergeordneten Seite zugreifen.&lt;br /&gt;
&lt;br /&gt;
Außerdem kapselt es den Zugriff auf die Funktionen die auch per TypoScript zur Verfügung stehen. &lt;br /&gt;
&lt;br /&gt;
Beispiel Inhalte auslesen:&lt;br /&gt;
 $content = $this-&amp;gt;cObj-&amp;gt;data[&amp;#039;header&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
Beispiel auf Seiteneigenschaften zugreifen&lt;br /&gt;
 $content = $this-&amp;gt;cObj-&amp;gt;parentRecord[&amp;#039;data&amp;#039;][&amp;#039;title&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
Mal durchschauen: Die Klasse tslib_cObj in der Systemextension cms&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Funktionen aus t3lib ===&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
 t3lib_extMgm::extRelPath($this-&amp;gt;extKey)&lt;br /&gt;
&lt;br /&gt;
== Pfade ==&lt;br /&gt;
=== Konstanten nutzen ===&lt;br /&gt;
Beispiele:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once (PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
require_once (t3lib_extMgm::extPath(&amp;#039;tt_news&amp;#039;) . &amp;#039;lib/class.tx_ttnews_catmenu.php&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19169</id>
		<title>Validate (jQuery Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19169"/>
		<updated>2012-05-16T16:35:29Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Media:jquery-validate-js.zip]]&lt;br /&gt;
&lt;br /&gt;
http://docs.jquery.com/Plugins/Validation&lt;br /&gt;
&lt;br /&gt;
http://bassistance.de/jquery-plugins/jquery-plugin-validation/&lt;br /&gt;
&lt;br /&gt;
http://blogs.fau.de/webworking/2011/05/13/tutorial-zur-eingabevalidierung-von-formularen-mit-hilfe-von-jquery/ (Zugriff: 2012-05)&lt;br /&gt;
&lt;br /&gt;
== Anleitung ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Validierung ===&lt;br /&gt;
Standardmäßig wird einfach in der Initialisierung das Formular mitgegeben (jQuery Standards)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
     $(&amp;quot;#Formular&amp;quot;).validate();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In den Formularen werden einfach Klassen mitgegeben. Anhand dieser validiert das Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;required&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; name=&amp;quot;tx_gbtelecash_pi1[firstname]&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Standard Klassen zur Validierung ====&lt;br /&gt;
Die wichtigsten sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 class=”required”: Feld muss gesetzt sein&lt;br /&gt;
 class=”url”: Feld muss eine gültige URL enthalten&lt;br /&gt;
 class=”email”: Feld muss eine gültige E-Mail enthalten&lt;br /&gt;
 class=”required email”: Feld muss gesetzt und eine gültige E-Mail enthalten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weitere Validierungsmöglichkeiten über die validate() Funktion ===&lt;br /&gt;
Neben diese Klassen gibt es weitere Möglichkeiten zur Überprüfung. Die wichtigsten hierbei sind:&lt;br /&gt;
&lt;br /&gt;
 minlength=”int” (Bsp.: minlength=”3″)&lt;br /&gt;
 maxlength=”int” (Bsp.: maxlength=”7″) &lt;br /&gt;
 min=”int” (Bsp.: min=”3″)&lt;br /&gt;
 max=”int” (Bsp.: max=”7″)&lt;br /&gt;
 equalTo=”id” (Bsp.: equalTo=”#passwort”)&lt;br /&gt;
 range=”int1int2″ (Bsp.: Zahlen zwischen 3 und 7: range=”37″)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
validate({&lt;br /&gt;
     rules: {&lt;br /&gt;
          vorname: &amp;quot;required&amp;quot;,&lt;br /&gt;
          nachname: &amp;quot;required&amp;quot;,&lt;br /&gt;
          passwort: {&lt;br /&gt;
               required: true,&lt;br /&gt;
               minlength: 6&lt;br /&gt;
          },&lt;br /&gt;
          passwort2: {&lt;br /&gt;
               required: true,&lt;br /&gt;
               equalTo: &amp;quot;#passwort&amp;quot;,&lt;br /&gt;
               minlength: 6&lt;br /&gt;
          },&lt;br /&gt;
          email: {&lt;br /&gt;
               required: true,&lt;br /&gt;
               email: true&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Eigene Validierungsmeldungen definieren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
validate({&lt;br /&gt;
     messages: {&lt;br /&gt;
          vorname: &amp;quot;Bitte Vornamen angeben!&amp;quot;,&lt;br /&gt;
          nachname: &amp;quot;Bitte Nachnamen angeben!&amp;quot;,&lt;br /&gt;
          passwort: {&lt;br /&gt;
               required: &amp;quot;Bitte Passwort angeben!&amp;quot;,&lt;br /&gt;
               minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
          },&lt;br /&gt;
          passwort2: {&lt;br /&gt;
               required: &amp;quot;Bitte Passwort wiederholen!&amp;quot;,&lt;br /&gt;
               equalTo: &amp;quot;Passwort wiederholen&amp;quot;,&lt;br /&gt;
               minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben&amp;quot;)&lt;br /&gt;
          },&lt;br /&gt;
          email: {&lt;br /&gt;
               required: &amp;quot;Bitte E-Mail-Adresse eingeben!&amp;quot;,&lt;br /&gt;
               email: &amp;quot;E-Mail im Format name@domain.de eingeben!&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Validierung debuggen ===&lt;br /&gt;
Das Plugin hilft über den Parameter debug beim validieren:&lt;br /&gt;
 validate({ debug: true })&lt;br /&gt;
Aktiviert den Debug-Modus. Das Formular wird nicht abgeschickt und vorhandene Fehler werden in der Fehlerkonsole angezeigt (benötigt Firebug oder Firebug Lite)&lt;br /&gt;
&lt;br /&gt;
=== Eigene Funktionen ausführen ===&lt;br /&gt;
 validate({ submitHandler: function(){###} })&lt;br /&gt;
Sollte das Formular valide sein, wird der durch ### symbolisierte Quellcode ausgeführt. Ersetzt dabei das Standardverhalten beim Absenden des Formulars.&lt;br /&gt;
&lt;br /&gt;
== Komplettes Beispiel ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Eingabevalidierung von Formularen mit Hilfe von jQuery&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
	* { font-family: Verdana; font-size: 10pt; }&lt;br /&gt;
	label { width: 10em; float: left; }&lt;br /&gt;
	label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }&lt;br /&gt;
	p { clear: both; }&lt;br /&gt;
	.submit { margin-left: 12em; }&lt;br /&gt;
	em { font-weight: bold; padding-right: 1em; vertical-align: top; }&lt;br /&gt;
	form { width: 40em; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://view.jquery.com/trunk/plugins/validate/jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	$(document).ready(function(){&lt;br /&gt;
		$(&amp;quot;#Formular&amp;quot;).validate({&lt;br /&gt;
			rules: {&lt;br /&gt;
				vorname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10			&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					equalTo: &amp;quot;#passwort&amp;quot;,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					email: true				&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			messages: {&lt;br /&gt;
				vorname: &amp;quot;Bitte Vornamen angeben!&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;Bitte Nachnamen angeben!&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort angeben!&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben!&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort wiederholen!&amp;quot;,&lt;br /&gt;
					equalTo: &amp;quot;Passwort wiederholen&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: &amp;quot;Bitte E-Mail-Adresse eingeben!&amp;quot;,&lt;br /&gt;
					email: &amp;quot;E-Mail im Format name@domain.de eingeben!&amp;quot;	&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			submitHandler: function() {&lt;br /&gt;
				alert(&amp;quot;submitted!&amp;quot;)	&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;Formular&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;validate.php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;fieldset&amp;gt;&lt;br /&gt;
	&amp;lt;legend&amp;gt;Ein einfaches Formular&amp;lt;/legend&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;vorname&amp;quot;&amp;gt;Vorname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;vorname&amp;quot; name=&amp;quot;vorname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;nachname&amp;quot;&amp;gt;Nachname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;nachname&amp;quot; name=&amp;quot;nachname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort&amp;quot;&amp;gt;Passwort&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort&amp;quot; name=&amp;quot;passwort&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort2&amp;quot;&amp;gt;Passwort erneut&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort2&amp;quot; name=&amp;quot;passwort2&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;E-Mail&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;input class=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; value=&amp;quot;abschicken&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19168</id>
		<title>Validate (jQuery Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19168"/>
		<updated>2012-05-16T16:33:03Z</updated>

		<summary type="html">&lt;p&gt;Kholja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Media:jquery-validate-js.zip]]&lt;br /&gt;
&lt;br /&gt;
http://docs.jquery.com/Plugins/Validation&lt;br /&gt;
&lt;br /&gt;
http://bassistance.de/jquery-plugins/jquery-plugin-validation/&lt;br /&gt;
&lt;br /&gt;
http://blogs.fau.de/webworking/2011/05/13/tutorial-zur-eingabevalidierung-von-formularen-mit-hilfe-von-jquery/ (Zugriff: 2012-05)&lt;br /&gt;
&lt;br /&gt;
== Anleitung ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Validierung ===&lt;br /&gt;
Standardmäßig wird einfach in der Initialisierung das Formular mitgegeben (jQuery Standards)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
     $(&amp;quot;#Formular&amp;quot;).validate();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In den Formularen werden einfach Klassen mitgegeben. Anhand dieser validiert das Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;required&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; name=&amp;quot;tx_gbtelecash_pi1[firstname]&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weitere Validierungsmöglichkeiten über die validate() Funktion ===&lt;br /&gt;
Neben diese Klassen gibt es weitere Möglichkeiten zur Überprüfung. Die wichtigsten hierbei sind:&lt;br /&gt;
&lt;br /&gt;
 minlength=”int” (Bsp.: minlength=”3″)&lt;br /&gt;
 maxlength=”int” (Bsp.: maxlength=”7″) &lt;br /&gt;
 min=”int” (Bsp.: min=”3″)&lt;br /&gt;
 max=”int” (Bsp.: max=”7″)&lt;br /&gt;
 equalTo=”id” (Bsp.: equalTo=”#passwort”)&lt;br /&gt;
 range=”int1int2″ (Bsp.: Zahlen zwischen 3 und 7: range=”37″)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
validate({&lt;br /&gt;
     rules: {&lt;br /&gt;
          vorname: &amp;quot;required&amp;quot;,&lt;br /&gt;
          nachname: &amp;quot;required&amp;quot;,&lt;br /&gt;
          passwort: {&lt;br /&gt;
               required: true,&lt;br /&gt;
               minlength: 6&lt;br /&gt;
          },&lt;br /&gt;
          passwort2: {&lt;br /&gt;
               required: true,&lt;br /&gt;
               equalTo: &amp;quot;#passwort&amp;quot;,&lt;br /&gt;
               minlength: 6&lt;br /&gt;
          },&lt;br /&gt;
          email: {&lt;br /&gt;
               required: true,&lt;br /&gt;
               email: true&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Eigene Validierungsmeldungen definieren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
validate({&lt;br /&gt;
     messages: {&lt;br /&gt;
          vorname: &amp;quot;Bitte Vornamen angeben!&amp;quot;,&lt;br /&gt;
          nachname: &amp;quot;Bitte Nachnamen angeben!&amp;quot;,&lt;br /&gt;
          passwort: {&lt;br /&gt;
               required: &amp;quot;Bitte Passwort angeben!&amp;quot;,&lt;br /&gt;
               minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
          },&lt;br /&gt;
          passwort2: {&lt;br /&gt;
               required: &amp;quot;Bitte Passwort wiederholen!&amp;quot;,&lt;br /&gt;
               equalTo: &amp;quot;Passwort wiederholen&amp;quot;,&lt;br /&gt;
               minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben&amp;quot;)&lt;br /&gt;
          },&lt;br /&gt;
          email: {&lt;br /&gt;
               required: &amp;quot;Bitte E-Mail-Adresse eingeben!&amp;quot;,&lt;br /&gt;
               email: &amp;quot;E-Mail im Format name@domain.de eingeben!&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Validierung debuggen ===&lt;br /&gt;
Das Plugin hilft über den Parameter debug beim validieren:&lt;br /&gt;
 validate({ debug: true })&lt;br /&gt;
Aktiviert den Debug-Modus. Das Formular wird nicht abgeschickt und vorhandene Fehler werden in der Fehlerkonsole angezeigt (benötigt Firebug oder Firebug Lite)&lt;br /&gt;
&lt;br /&gt;
=== Eigene Funktionen ausführen ===&lt;br /&gt;
 validate({ submitHandler: function(){###} })&lt;br /&gt;
Sollte das Formular valide sein, wird der durch ### symbolisierte Quellcode ausgeführt. Ersetzt dabei das Standardverhalten beim Absenden des Formulars.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Standard Klassen zur Validierung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 class=”required”: Feld muss gesetzt sein&lt;br /&gt;
 class=”url”: Feld muss eine gültige URL enthalten&lt;br /&gt;
 class=”email”: Feld muss eine gültige E-Mail enthalten&lt;br /&gt;
 class=”required email”: Feld muss gesetzt und eine gültige E-Mail enthalten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Komplettes Beispiel ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Eingabevalidierung von Formularen mit Hilfe von jQuery&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
	* { font-family: Verdana; font-size: 10pt; }&lt;br /&gt;
	label { width: 10em; float: left; }&lt;br /&gt;
	label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }&lt;br /&gt;
	p { clear: both; }&lt;br /&gt;
	.submit { margin-left: 12em; }&lt;br /&gt;
	em { font-weight: bold; padding-right: 1em; vertical-align: top; }&lt;br /&gt;
	form { width: 40em; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://view.jquery.com/trunk/plugins/validate/jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	$(document).ready(function(){&lt;br /&gt;
		$(&amp;quot;#Formular&amp;quot;).validate({&lt;br /&gt;
			rules: {&lt;br /&gt;
				vorname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10			&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					equalTo: &amp;quot;#passwort&amp;quot;,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					email: true				&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			messages: {&lt;br /&gt;
				vorname: &amp;quot;Bitte Vornamen angeben!&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;Bitte Nachnamen angeben!&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort angeben!&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben!&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort wiederholen!&amp;quot;,&lt;br /&gt;
					equalTo: &amp;quot;Passwort wiederholen&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: &amp;quot;Bitte E-Mail-Adresse eingeben!&amp;quot;,&lt;br /&gt;
					email: &amp;quot;E-Mail im Format name@domain.de eingeben!&amp;quot;	&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			submitHandler: function() {&lt;br /&gt;
				alert(&amp;quot;submitted!&amp;quot;)	&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;Formular&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;validate.php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;fieldset&amp;gt;&lt;br /&gt;
	&amp;lt;legend&amp;gt;Ein einfaches Formular&amp;lt;/legend&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;vorname&amp;quot;&amp;gt;Vorname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;vorname&amp;quot; name=&amp;quot;vorname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;nachname&amp;quot;&amp;gt;Nachname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;nachname&amp;quot; name=&amp;quot;nachname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort&amp;quot;&amp;gt;Passwort&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort&amp;quot; name=&amp;quot;passwort&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort2&amp;quot;&amp;gt;Passwort erneut&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort2&amp;quot; name=&amp;quot;passwort2&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;E-Mail&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;input class=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; value=&amp;quot;abschicken&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19167</id>
		<title>Validate (jQuery Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19167"/>
		<updated>2012-05-16T16:13:45Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Validate Snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Media:jquery-validate-js.zip]]&lt;br /&gt;
&lt;br /&gt;
http://docs.jquery.com/Plugins/Validation/validate#options&lt;br /&gt;
&lt;br /&gt;
http://blogs.fau.de/webworking/2011/05/13/tutorial-zur-eingabevalidierung-von-formularen-mit-hilfe-von-jquery/ (Zugriff: 2012-05)&lt;br /&gt;
&lt;br /&gt;
== Validate Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Validierung ===&lt;br /&gt;
Standardmäßig wird einfach in der Initialisierung das Formular mitgegeben (jQuery Standards)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
     $(&amp;quot;#Formular&amp;quot;).validate();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In den Formularen werden einfach Klassen mitgegeben. Anhand dieser validiert das Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;required&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; name=&amp;quot;tx_gbtelecash_pi1[firstname]&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard Klassen zur Validierung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 class=”required”: Feld muss gesetzt sein&lt;br /&gt;
 class=”url”: Feld muss eine gültige URL enthalten&lt;br /&gt;
 class=”email”: Feld muss eine gültige E-Mail enthalten&lt;br /&gt;
 class=”required email”: Feld muss gesetzt und eine gültige E-Mail enthalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Komplettes Beispiel ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Eingabevalidierung von Formularen mit Hilfe von jQuery&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
	* { font-family: Verdana; font-size: 10pt; }&lt;br /&gt;
	label { width: 10em; float: left; }&lt;br /&gt;
	label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }&lt;br /&gt;
	p { clear: both; }&lt;br /&gt;
	.submit { margin-left: 12em; }&lt;br /&gt;
	em { font-weight: bold; padding-right: 1em; vertical-align: top; }&lt;br /&gt;
	form { width: 40em; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://view.jquery.com/trunk/plugins/validate/jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	$(document).ready(function(){&lt;br /&gt;
		$(&amp;quot;#Formular&amp;quot;).validate({&lt;br /&gt;
			rules: {&lt;br /&gt;
				vorname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10			&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					equalTo: &amp;quot;#passwort&amp;quot;,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					email: true				&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			messages: {&lt;br /&gt;
				vorname: &amp;quot;Bitte Vornamen angeben!&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;Bitte Nachnamen angeben!&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort angeben!&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben!&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort wiederholen!&amp;quot;,&lt;br /&gt;
					equalTo: &amp;quot;Passwort wiederholen&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: &amp;quot;Bitte E-Mail-Adresse eingeben!&amp;quot;,&lt;br /&gt;
					email: &amp;quot;E-Mail im Format name@domain.de eingeben!&amp;quot;	&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			submitHandler: function() {&lt;br /&gt;
				alert(&amp;quot;submitted!&amp;quot;)	&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;Formular&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;validate.php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;fieldset&amp;gt;&lt;br /&gt;
	&amp;lt;legend&amp;gt;Ein einfaches Formular&amp;lt;/legend&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;vorname&amp;quot;&amp;gt;Vorname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;vorname&amp;quot; name=&amp;quot;vorname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;nachname&amp;quot;&amp;gt;Nachname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;nachname&amp;quot; name=&amp;quot;nachname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort&amp;quot;&amp;gt;Passwort&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort&amp;quot; name=&amp;quot;passwort&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort2&amp;quot;&amp;gt;Passwort erneut&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort2&amp;quot; name=&amp;quot;passwort2&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;E-Mail&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;input class=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; value=&amp;quot;abschicken&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19166</id>
		<title>Validate (jQuery Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Validate_(jQuery_Plugin)&amp;diff=19166"/>
		<updated>2012-05-16T14:26:28Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Media:jquery-validate-js.zip]]&lt;br /&gt;
&lt;br /&gt;
http://docs.jquery.com/Plugins/Validation/validate#options&lt;br /&gt;
&lt;br /&gt;
http://blogs.fau.de/webworking/2011/05/13/tutorial-zur-eingabevalidierung-von-formularen-mit-hilfe-von-jquery/ (Zugriff: 2012-05)&lt;br /&gt;
&lt;br /&gt;
== Validate Snippets ==&lt;br /&gt;
&lt;br /&gt;
== Komplettes Beispiel ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Eingabevalidierung von Formularen mit Hilfe von jQuery&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
	* { font-family: Verdana; font-size: 10pt; }&lt;br /&gt;
	label { width: 10em; float: left; }&lt;br /&gt;
	label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }&lt;br /&gt;
	p { clear: both; }&lt;br /&gt;
	.submit { margin-left: 12em; }&lt;br /&gt;
	em { font-weight: bold; padding-right: 1em; vertical-align: top; }&lt;br /&gt;
	form { width: 40em; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://view.jquery.com/trunk/plugins/validate/jquery.validate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	$(document).ready(function(){&lt;br /&gt;
		$(&amp;quot;#Formular&amp;quot;).validate({&lt;br /&gt;
			rules: {&lt;br /&gt;
				vorname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;required&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10			&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					equalTo: &amp;quot;#passwort&amp;quot;,&lt;br /&gt;
					minlength: 6,&lt;br /&gt;
					maxlength: 10&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: true,&lt;br /&gt;
					email: true				&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			messages: {&lt;br /&gt;
				vorname: &amp;quot;Bitte Vornamen angeben!&amp;quot;,&lt;br /&gt;
				nachname: &amp;quot;Bitte Nachnamen angeben!&amp;quot;,&lt;br /&gt;
				passwort: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort angeben!&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben!&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				passwort2: {&lt;br /&gt;
					required: &amp;quot;Bitte Passwort wiederholen!&amp;quot;,&lt;br /&gt;
					equalTo: &amp;quot;Passwort wiederholen&amp;quot;,&lt;br /&gt;
					minlength: jQuery.format(&amp;quot;mindestens {0} Zeichen eingeben&amp;quot;),&lt;br /&gt;
					maxlength: jQuery.format(&amp;quot;maximal {0} Zeichen eingeben!&amp;quot;)&lt;br /&gt;
				},&lt;br /&gt;
				email: {&lt;br /&gt;
					required: &amp;quot;Bitte E-Mail-Adresse eingeben!&amp;quot;,&lt;br /&gt;
					email: &amp;quot;E-Mail im Format name@domain.de eingeben!&amp;quot;	&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			submitHandler: function() {&lt;br /&gt;
				alert(&amp;quot;submitted!&amp;quot;)	&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;Formular&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;validate.php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;fieldset&amp;gt;&lt;br /&gt;
	&amp;lt;legend&amp;gt;Ein einfaches Formular&amp;lt;/legend&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;vorname&amp;quot;&amp;gt;Vorname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;vorname&amp;quot; name=&amp;quot;vorname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;nachname&amp;quot;&amp;gt;Nachname&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;nachname&amp;quot; name=&amp;quot;nachname&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort&amp;quot;&amp;gt;Passwort&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort&amp;quot; name=&amp;quot;passwort&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;passwort2&amp;quot;&amp;gt;Passwort erneut&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;passwort2&amp;quot; name=&amp;quot;passwort2&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;E-Mail&amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&lt;br /&gt;
			&amp;lt;input class=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; value=&amp;quot;abschicken&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Jquery-validate-js.zip&amp;diff=19165</id>
		<title>Datei:Jquery-validate-js.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Jquery-validate-js.zip&amp;diff=19165"/>
		<updated>2012-05-16T14:25:43Z</updated>

		<summary type="html">&lt;p&gt;Kholja: jQuery Validation Plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;jQuery Validation Plugin&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_einrichten&amp;diff=19085</id>
		<title>Typo3 - Benutzer einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_einrichten&amp;diff=19085"/>
		<updated>2012-04-04T13:08:19Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Kurzanleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kurzanleitung ==&lt;br /&gt;
* Benutzergruppe &amp;quot;alle Benutzer&amp;quot; anlegen (keine Rechte und Filemounts). Dieser ist nur dafür zuständig, daß neue Seiten immer dem gleichen Benutzer gehören und alle darauf zugreifen können (benötigt das PageTS unten).&lt;br /&gt;
* Benutzergruppen mit DB Mounts für alle gewünschten Bereiche (z.B. Bereich:Produkte). Diese Gruppen Regeln welche Teile der Webseite ein Redakteur bearbeiten kann.&lt;br /&gt;
* Benutzergruppe für Redakteure anlegen (siehe Link)&lt;br /&gt;
* PageTS (Seiteneigenschaften Root Seite) anlegen damit neue Seiten automatisch der Gruppe &amp;quot;alle Benutzer&amp;quot; zugeordnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Standardrechte und Gruppe (hier Gruppe 1) setzen&lt;br /&gt;
TCEMAIN.permissions.groupid = 1&lt;br /&gt;
TCEMAIN.permissions.user = show, editcontent, new, edit, delete&lt;br /&gt;
TCEMAIN.permissions.group = show, editcontent, new, edit, delete&lt;br /&gt;
TCEMAIN.permissions.everybody = show, edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard Redakteur:&lt;br /&gt;
[[Media:Typo3-redakteur.t3d]]&lt;br /&gt;
&lt;br /&gt;
== Standard Benutzer ==&lt;br /&gt;
Aktuelle Standardeinstellungen finden sich hier:&lt;br /&gt;
[[Typo3 - Standardeinstellungen]]&lt;br /&gt;
&lt;br /&gt;
== Kurzübersicht Standard Benutzereinstellungen ==&lt;br /&gt;
optionen &amp;#039;&amp;#039;kursiv&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Module ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Backendmodule&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Web&lt;br /&gt;
*** Seite&lt;br /&gt;
*** Anzeigen&lt;br /&gt;
*** Liste&lt;br /&gt;
** Datei&lt;br /&gt;
*** Dateiliste&lt;br /&gt;
*** Dokumente&lt;br /&gt;
** Benutzer&lt;br /&gt;
*** Aufgaben&lt;br /&gt;
*** Einstellungen&lt;br /&gt;
*** Workspace&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tables&amp;#039;&amp;#039;&amp;#039; - Tabellen die gesehen werden&lt;br /&gt;
** Seite&lt;br /&gt;
** Seiteninhalt&lt;br /&gt;
** alternative Seitensprache&lt;br /&gt;
** &amp;#039;&amp;#039;interne Notiz&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;Acronym&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tables (modify)&amp;#039;&amp;#039;&amp;#039; - Tabellen die geändert werden dürfen&lt;br /&gt;
** i.d.R. wie Tables&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Page Types&amp;#039;&amp;#039;&amp;#039; - Seitentypen die zur Verfügung stehen&lt;br /&gt;
** Standard&lt;br /&gt;
** Erweitert&lt;br /&gt;
** Externe URL&lt;br /&gt;
** Shortcut&lt;br /&gt;
** Nicht im Menü&lt;br /&gt;
** &amp;#039;&amp;#039;Abstand&amp;#039;&amp;#039;&lt;br /&gt;
** SysOrdner&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Allowed Exclude Fields&amp;#039;&amp;#039;&amp;#039; - Verfügbare Felder&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Seite&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** Typo&lt;br /&gt;
*** Seite verstecken&lt;br /&gt;
*** Start&lt;br /&gt;
*** Stop&lt;br /&gt;
*** Layout&lt;br /&gt;
*** Navigationstitel&lt;br /&gt;
*** Im Menü verstecken&lt;br /&gt;
*** Shortcut Modus&lt;br /&gt;
*** Stichworte (Meta Tag)&lt;br /&gt;
*** Beschreibung (Meta Tag)&lt;br /&gt;
*** &amp;#039;&amp;#039;Inhaltsangabe - z.B. f. Sitemap&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Autor - z.B. für Seiten als Artikel&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Email - z.B. für Seiten als Artikel&amp;#039;&amp;#039;&lt;br /&gt;
*** Enthält Erweiterung&lt;br /&gt;
*** &amp;#039;&amp;#039;Spracheinstellungen&amp;#039;&amp;#039; - für Multilanguage Sites (One Tree Fits all)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Seiteninhalt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** Verstecken&lt;br /&gt;
*** Start&lt;br /&gt;
*** Stop&lt;br /&gt;
*** &amp;#039;&amp;#039;Sprache&amp;#039;&amp;#039; ??? - evt. besser in der Seiteneinstellung&lt;br /&gt;
*** &amp;#039;&amp;#039;Orginalübersetzung&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Layout&amp;#039;&amp;#039; - Wenn Layouts angelegt sind&lt;br /&gt;
*** Spalten&lt;br /&gt;
*** Datum&lt;br /&gt;
*** Typ&lt;br /&gt;
*** &amp;#039;&amp;#039;Untertitel&amp;#039;&amp;#039; - s.o.&lt;br /&gt;
*** &amp;#039;&amp;#039;Breite&amp;#039;&amp;#039; (Bilder)&lt;br /&gt;
*** &amp;#039;&amp;#039;Höhe&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;keine Reihen&amp;#039;&amp;#039;&lt;br /&gt;
*** Verweis - Bilder&lt;br /&gt;
*** Klick vergrößern  (Bilder)&lt;br /&gt;
*** alternativer Text (Meta)&lt;br /&gt;
*** Titeltext (Meta)&lt;br /&gt;
*** Vor&lt;br /&gt;
*** Nach&lt;br /&gt;
*** &amp;#039;&amp;#039;Index&amp;#039;&amp;#039; - Wenn indizierte Suche benutzt wird&lt;br /&gt;
*** Nach oben&lt;br /&gt;
*** RTE abschalten&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Alternative Seitensprache&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Verstecken&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Start&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Stop&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Navigationstitel&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Stichworte&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Beschreibung&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Inhaltsangabe&amp;#039;&amp;#039; (s.o.)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Explicitly allow/deny field values&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Seiteninhalt Typ&amp;#039;&amp;#039;&amp;#039; - verbieten&lt;br /&gt;
*** Skript&lt;br /&gt;
*** HTML&lt;br /&gt;
&lt;br /&gt;
=== DB Mount ===&lt;br /&gt;
Startpunkt im Seitenbaum für die Benutzergruppe&lt;br /&gt;
&lt;br /&gt;
=== Filemounts ==&lt;br /&gt;
Freigabe im Dateisystem damit Dateien geholt bzw. hochgespielt werden können&lt;br /&gt;
&lt;br /&gt;
=== Workspace Permissions ===&lt;br /&gt;
Draft und Live&lt;br /&gt;
Siehe auch [[Workflow in Typo3 (Workspaces)]]&lt;br /&gt;
&lt;br /&gt;
=== TS Config ===&lt;br /&gt;
Sinnvolle Einstellungen für die Benutzergruppe&lt;br /&gt;
&lt;br /&gt;
== Benutzergruppe und Benutzer anlegen ==&lt;br /&gt;
=== Allgemeines Vorgehen ===&lt;br /&gt;
* Todo -&amp;gt; Überarbeiten Beispiel mit Gruppe &amp;quot;alle Benutzer&amp;quot;, Gruppen für Bereiche (DB-Mounts,Filemounts) und Rechte - Einstellungen   &lt;br /&gt;
* eine &amp;#039;&amp;#039;&amp;#039;Benutzergruppe&amp;#039;&amp;#039;&amp;#039; einrichten in der die Grundsätzlichen Einstellungen gemacht werden. (Was sollen die Benutzer dieser Gruppe alles tun, und auf welche Seiten sowie auf welche Dateien sollen sie zugreifen) Die Gruppe gibt den kleinsten gemeinsamen Nenner für alle Benutzer dieser Gruppe vor. Die Benutzer dieser Gruppe können dann später noch zusätzliche Rechte bekommen.&lt;br /&gt;
* Alle &amp;#039;&amp;#039;&amp;#039;Benutzer&amp;#039;&amp;#039;&amp;#039; werden einer Gruppe zugeordnet.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Zugriffsrechte auf die Seiten&amp;#039;&amp;#039;&amp;#039; setzen&lt;br /&gt;
* Am Ende müssen noch die &amp;#039;&amp;#039;&amp;#039;Dateiordner&amp;#039;&amp;#039;&amp;#039; für den Benutzer freigegeben werden in die er seine Dateien (pdf,Bilder, Dokumente...)hochladen kann.&lt;br /&gt;
&lt;br /&gt;
=== Benutzergruppe anlegen ===&lt;br /&gt;
* Listenansicht &amp;gt; Weltkugel anklicken neue Backend Benutzergruppe (Datensatz)&lt;br /&gt;
* Gruppenname eingeben und include Access Lists anklicken dadurch können die Gruppeneigenschaften per Auswahlfelder angelegt werden.&lt;br /&gt;
* Module auswählen. Sinnvoll sind: Web, Web&amp;gt;Seite, Web&amp;gt;Anzeigen, Web&amp;gt;Liste, Datei, Datei&amp;gt;Dateiliste, evt. Datei&amp;gt;Bilder, Benutzer, Benutzer&amp;gt;Aufgaben, Benutzer&amp;gt;Einstellungen&lt;br /&gt;
* Tabellen auswählen in denen Datensätze gesehen werden können – das sind z.B. die Tabellen der PlugIns ( Gästebuch etc.) z.B. Seite, Seiteninhalt, News, Galerien, Gästebuch-Eintrag, Kalender&lt;br /&gt;
* Tabellen auswählen in denen Datensätze verändert werden können (s.o.)&lt;br /&gt;
* Page Types auswählen – das sind die Arten von Seiten die der Benutzer anlegen kann. Z.B. Standard, Erweitert, Externe URL, Shortcut.&lt;br /&gt;
* Weitere Felder erlauben oder verbieten&lt;br /&gt;
* DB-Mounts das ist die Stelle ab der überhaupt Seiten angeguckt / verändert werden können&lt;br /&gt;
* File-Mounts das ist die Stelle im Dateisystem wo Dateien (Bilder, pdf, etc.) abgelegt, oder verändert werden können.)&lt;br /&gt;
&lt;br /&gt;
=== Benutzer einrichten ===&lt;br /&gt;
* Listenansicht &amp;gt; Weltkugel anklicken und neuen Backend Benutzer anlegen (Datensatz)&lt;br /&gt;
* Name anlegen und eine (oder mehrere) Gruppe auswählen der der Benutzer angehören soll. Die Rechte der Gruppen werden übernommen müssen also nicht neu angewählt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; Solange im Modul Access (Zugriff) nicht die Seitenrechte für alle benötigten Seiten auf Show stehen sieht der Benutzer nichts (siehe Zugriff auf die Seiten einstellen). Das gleiche gilt für das Dateisystem.&lt;br /&gt;
&lt;br /&gt;
== Zugriff auf die Seiten einstellen ==&lt;br /&gt;
Wenn die Seiten zu Beginn von einem Admin erstellt wurden, wie es meistens der Fall sein dürfte. Dann gehören die Seiten Standardmäßig (läßt sich soweit ich weiß ändern)dem Admin und können nur von diesem gesehen werden. Deshalb müssen die Seitenrechte für die Gruppe geändert werden.&lt;br /&gt;
&lt;br /&gt;
Für jede Seite gibt es folgende Rechte: &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Show&amp;#039;&amp;#039;&amp;#039; Page&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Edit&amp;#039;&amp;#039;&amp;#039; Page&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Edit&amp;#039;&amp;#039;&amp;#039; Content&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Delete&amp;#039;&amp;#039;&amp;#039; Page&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;New&amp;#039;&amp;#039;&amp;#039; Pages&lt;br /&gt;
&lt;br /&gt;
=== So geht&amp;#039;s ===&lt;br /&gt;
* Modul Zugriff (&amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039;) wählen.&lt;br /&gt;
* dann den Bearbeitungsstift der Seite auswählen &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Gruppe einstellen&amp;#039;&amp;#039;&amp;#039; für die die Rechte geändert werden sollen.&lt;br /&gt;
* evt. Rekursiv auf die &amp;#039;&amp;#039;&amp;#039;Unterseiten&amp;#039;&amp;#039;&amp;#039; anwenden (unteres Drop Down-Feld)&lt;br /&gt;
* Speichern.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich lassen sich auch der Besitzer oder die Rechte für jeden einstellen. Grundsätzlich gilt wenn Benutzer zu mehreren Gruppen gehören:&lt;br /&gt;
&lt;br /&gt;
Rechte addieren sich.&lt;br /&gt;
&lt;br /&gt;
== Zugriff auf das Filesystem (fileadmin) einstellen ==&lt;br /&gt;
Sinnvollerweise legt man für die Benutzer eigene Ordner an in denen nicht gerade die Bilder für die Templates etc. liegen.&lt;br /&gt;
&lt;br /&gt;
Diese Ordner müssen ähnlich wie die Seitenbäume gemounted werden.&lt;br /&gt;
&lt;br /&gt;
=== So geht&amp;#039;s ===&lt;br /&gt;
* Die Ordner müssen vorher natürlich im Filesystem (fileadmin) angelegt werden (z.B. userImages)&lt;br /&gt;
* In den Einstellungen für die Gruppe (oder den Benutzer) kann ein neuer Filemount mit Klick im Abschnitt &amp;#039;File Mount&amp;#039; angelegt werden.&lt;br /&gt;
* Es kann anschließend ein beliebiger Name (Label) vergeben werden. Das ist der Name den der Benutzer sieht.&lt;br /&gt;
* Wenn der Ordner unterhalb von fileadmin liegt am besten auf relativ klicken und den Pfad ohne &amp;#039;fileadmin&amp;#039; eingeben (z.B. userImages/pics)&lt;br /&gt;
&lt;br /&gt;
== Welche Rechteeinstellungen sind sinnvoll? ==&lt;br /&gt;
&lt;br /&gt;
== Fortgeschrittene Benutzerkonfiguration ==&lt;br /&gt;
Über das Feld User TSConfig kann die Anzeige des Backends bzw. für das Frontend Editing für verschiedene Benutzer und Benutzergruppen eingestellt werden. Folgende Bereiche sind möglich:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;admPanel&amp;#039;&amp;#039;&amp;#039; - hiermit kann man das admin Panel im Frontend einstellen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;options&amp;#039;&amp;#039;&amp;#039; - einige globale Einstellungen im Backend&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;setup&amp;#039;&amp;#039;&amp;#039; - damit steuert man die Einstellungen, die man auch unter Benutzer &amp;gt; Einstellungen (User &amp;gt; Setup) einstellen kann; nur eben mit Typo Script. Mit default kann der Admin sogar Standard Vorgaben für neue Benutzer(gruppen) erstellen. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mod&amp;#039;&amp;#039;&amp;#039; - hiermit kann man das Modul &amp;#039;Web&amp;#039; konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Die Benutzer-Einstellungen lassen sich (als Admin) über das Modul &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; User Admin&amp;#039;&amp;#039;&amp;#039; vergleichen (TSConfig und TSConfig HL anklicken). Hier sieht man auch gut wie die TS Befehle heißen.&lt;br /&gt;
&lt;br /&gt;
Mehr Info in [[Typo3 - TSConfig]]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Dropdown Feld für Cache ====&lt;br /&gt;
(PageTS oder UserTS)&lt;br /&gt;
&lt;br /&gt;
 options.clearCache.pages = 1&lt;br /&gt;
 options.clearCache.all = 1&lt;br /&gt;
&lt;br /&gt;
stellt ein Dropdownfeld zur Verfügung mit dem der Benutzer für einzelne und für alle Seiten den &amp;#039;&amp;#039;&amp;#039;Cache löschen&amp;#039;&amp;#039;&amp;#039; kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sichtbare Spalten festlegen====&lt;br /&gt;
PageTS oder User TS&lt;br /&gt;
&lt;br /&gt;
 mod {&lt;br /&gt;
   SHARED.colPos_list = 0,2&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Zeigt nur die mittlere und die Spalte Normal und Rechts angezeigt (Links=1, Normal=0, Rechts=2,Rand =3).&lt;br /&gt;
&lt;br /&gt;
==== Dropdown-Feld für die Überschrift anpassen ====&lt;br /&gt;
PageTS&lt;br /&gt;
&lt;br /&gt;
So kann man die überflüssigen Menüeinträge im Feld Header löschen(100 steht für den Wert versteckt):&lt;br /&gt;
 TCEFORM.tt_content.header_layout.removeItems = 2,3,4,5,100&lt;br /&gt;
Trick: Wenn man nicht weiß welchen Wert ein eintrag hat, einfach diesen Wert verwenden und in der Datenbank nachgucken.&lt;br /&gt;
&lt;br /&gt;
==== Überschreiben der Menüeinträge: ====&lt;br /&gt;
Page TS&lt;br /&gt;
&lt;br /&gt;
 TCEFORM.tt_content.header_layout.altLabels.0 = Überschrift Text&lt;br /&gt;
 TCEFORM.tt_content.header_layout.altLabels.1 = Überschrift Grafik&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Neue Seiten automatisch einer Benutzergruppe zuordnen ====&lt;br /&gt;
Im PageTS wird die Gruppe festgelegt der neue Seiten zugeordnet werden. Außerdem die Rechte für den Besitzer usw. festgelegt.&lt;br /&gt;
&lt;br /&gt;
 TCEMAIN.permissions.groupid = 1&lt;br /&gt;
 TCEMAIN.permissions.user = show, editcontent, new, edit, delete&lt;br /&gt;
 TCEMAIN.permissions.group = show, editcontent, new, edit, delete&lt;br /&gt;
 TCEMAIN.permissions.everybody = show, edit&lt;br /&gt;
&lt;br /&gt;
=== Zugriff über das Frontend ===&lt;br /&gt;
&lt;br /&gt;
=== Umleitung auf das Frontend ===&lt;br /&gt;
&lt;br /&gt;
== Freesite Plugin ==&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_einrichten&amp;diff=19084</id>
		<title>Typo3 - Benutzer einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_einrichten&amp;diff=19084"/>
		<updated>2012-04-04T13:03:57Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Kurzanleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kurzanleitung ==&lt;br /&gt;
* Benutzergruppe &amp;quot;alle Benutzer&amp;quot; anlegen (keine Rechte und Filemounts)&lt;br /&gt;
* Benutzergruppen mit DB Mounts für alle gewünschten Bereiche (enthält nur DB Mounts)&lt;br /&gt;
* Benutzergruppe für Redakteure anlegen (siehe Link)&lt;br /&gt;
* PageTS (Seiteneigenschaften Root Seite) anlegen damit neue Seiten automatisch der Gruppe &amp;quot;alle Benutzer&amp;quot; zugeordnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Standardrechte und Gruppe (hier Gruppe 1) setzen&lt;br /&gt;
TCEMAIN.permissions.groupid = 1&lt;br /&gt;
TCEMAIN.permissions.user = show, editcontent, new, edit, delete&lt;br /&gt;
TCEMAIN.permissions.group = show, editcontent, new, edit, delete&lt;br /&gt;
TCEMAIN.permissions.everybody = show, edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard Redakteur:&lt;br /&gt;
[[Media:Typo3-redakteur.t3d]]&lt;br /&gt;
&lt;br /&gt;
== Standard Benutzer ==&lt;br /&gt;
Aktuelle Standardeinstellungen finden sich hier:&lt;br /&gt;
[[Typo3 - Standardeinstellungen]]&lt;br /&gt;
&lt;br /&gt;
== Kurzübersicht Standard Benutzereinstellungen ==&lt;br /&gt;
optionen &amp;#039;&amp;#039;kursiv&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Module ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Backendmodule&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Web&lt;br /&gt;
*** Seite&lt;br /&gt;
*** Anzeigen&lt;br /&gt;
*** Liste&lt;br /&gt;
** Datei&lt;br /&gt;
*** Dateiliste&lt;br /&gt;
*** Dokumente&lt;br /&gt;
** Benutzer&lt;br /&gt;
*** Aufgaben&lt;br /&gt;
*** Einstellungen&lt;br /&gt;
*** Workspace&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tables&amp;#039;&amp;#039;&amp;#039; - Tabellen die gesehen werden&lt;br /&gt;
** Seite&lt;br /&gt;
** Seiteninhalt&lt;br /&gt;
** alternative Seitensprache&lt;br /&gt;
** &amp;#039;&amp;#039;interne Notiz&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;Acronym&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tables (modify)&amp;#039;&amp;#039;&amp;#039; - Tabellen die geändert werden dürfen&lt;br /&gt;
** i.d.R. wie Tables&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Page Types&amp;#039;&amp;#039;&amp;#039; - Seitentypen die zur Verfügung stehen&lt;br /&gt;
** Standard&lt;br /&gt;
** Erweitert&lt;br /&gt;
** Externe URL&lt;br /&gt;
** Shortcut&lt;br /&gt;
** Nicht im Menü&lt;br /&gt;
** &amp;#039;&amp;#039;Abstand&amp;#039;&amp;#039;&lt;br /&gt;
** SysOrdner&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Allowed Exclude Fields&amp;#039;&amp;#039;&amp;#039; - Verfügbare Felder&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Seite&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** Typo&lt;br /&gt;
*** Seite verstecken&lt;br /&gt;
*** Start&lt;br /&gt;
*** Stop&lt;br /&gt;
*** Layout&lt;br /&gt;
*** Navigationstitel&lt;br /&gt;
*** Im Menü verstecken&lt;br /&gt;
*** Shortcut Modus&lt;br /&gt;
*** Stichworte (Meta Tag)&lt;br /&gt;
*** Beschreibung (Meta Tag)&lt;br /&gt;
*** &amp;#039;&amp;#039;Inhaltsangabe - z.B. f. Sitemap&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Autor - z.B. für Seiten als Artikel&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Email - z.B. für Seiten als Artikel&amp;#039;&amp;#039;&lt;br /&gt;
*** Enthält Erweiterung&lt;br /&gt;
*** &amp;#039;&amp;#039;Spracheinstellungen&amp;#039;&amp;#039; - für Multilanguage Sites (One Tree Fits all)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Seiteninhalt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** Verstecken&lt;br /&gt;
*** Start&lt;br /&gt;
*** Stop&lt;br /&gt;
*** &amp;#039;&amp;#039;Sprache&amp;#039;&amp;#039; ??? - evt. besser in der Seiteneinstellung&lt;br /&gt;
*** &amp;#039;&amp;#039;Orginalübersetzung&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Layout&amp;#039;&amp;#039; - Wenn Layouts angelegt sind&lt;br /&gt;
*** Spalten&lt;br /&gt;
*** Datum&lt;br /&gt;
*** Typ&lt;br /&gt;
*** &amp;#039;&amp;#039;Untertitel&amp;#039;&amp;#039; - s.o.&lt;br /&gt;
*** &amp;#039;&amp;#039;Breite&amp;#039;&amp;#039; (Bilder)&lt;br /&gt;
*** &amp;#039;&amp;#039;Höhe&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;keine Reihen&amp;#039;&amp;#039;&lt;br /&gt;
*** Verweis - Bilder&lt;br /&gt;
*** Klick vergrößern  (Bilder)&lt;br /&gt;
*** alternativer Text (Meta)&lt;br /&gt;
*** Titeltext (Meta)&lt;br /&gt;
*** Vor&lt;br /&gt;
*** Nach&lt;br /&gt;
*** &amp;#039;&amp;#039;Index&amp;#039;&amp;#039; - Wenn indizierte Suche benutzt wird&lt;br /&gt;
*** Nach oben&lt;br /&gt;
*** RTE abschalten&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Alternative Seitensprache&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Verstecken&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Start&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Stop&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Navigationstitel&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Stichworte&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Beschreibung&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;Inhaltsangabe&amp;#039;&amp;#039; (s.o.)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Explicitly allow/deny field values&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Seiteninhalt Typ&amp;#039;&amp;#039;&amp;#039; - verbieten&lt;br /&gt;
*** Skript&lt;br /&gt;
*** HTML&lt;br /&gt;
&lt;br /&gt;
=== DB Mount ===&lt;br /&gt;
Startpunkt im Seitenbaum für die Benutzergruppe&lt;br /&gt;
&lt;br /&gt;
=== Filemounts ==&lt;br /&gt;
Freigabe im Dateisystem damit Dateien geholt bzw. hochgespielt werden können&lt;br /&gt;
&lt;br /&gt;
=== Workspace Permissions ===&lt;br /&gt;
Draft und Live&lt;br /&gt;
Siehe auch [[Workflow in Typo3 (Workspaces)]]&lt;br /&gt;
&lt;br /&gt;
=== TS Config ===&lt;br /&gt;
Sinnvolle Einstellungen für die Benutzergruppe&lt;br /&gt;
&lt;br /&gt;
== Benutzergruppe und Benutzer anlegen ==&lt;br /&gt;
=== Allgemeines Vorgehen ===&lt;br /&gt;
* Todo -&amp;gt; Überarbeiten Beispiel mit Gruppe &amp;quot;alle Benutzer&amp;quot;, Gruppen für Bereiche (DB-Mounts,Filemounts) und Rechte - Einstellungen   &lt;br /&gt;
* eine &amp;#039;&amp;#039;&amp;#039;Benutzergruppe&amp;#039;&amp;#039;&amp;#039; einrichten in der die Grundsätzlichen Einstellungen gemacht werden. (Was sollen die Benutzer dieser Gruppe alles tun, und auf welche Seiten sowie auf welche Dateien sollen sie zugreifen) Die Gruppe gibt den kleinsten gemeinsamen Nenner für alle Benutzer dieser Gruppe vor. Die Benutzer dieser Gruppe können dann später noch zusätzliche Rechte bekommen.&lt;br /&gt;
* Alle &amp;#039;&amp;#039;&amp;#039;Benutzer&amp;#039;&amp;#039;&amp;#039; werden einer Gruppe zugeordnet.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Zugriffsrechte auf die Seiten&amp;#039;&amp;#039;&amp;#039; setzen&lt;br /&gt;
* Am Ende müssen noch die &amp;#039;&amp;#039;&amp;#039;Dateiordner&amp;#039;&amp;#039;&amp;#039; für den Benutzer freigegeben werden in die er seine Dateien (pdf,Bilder, Dokumente...)hochladen kann.&lt;br /&gt;
&lt;br /&gt;
=== Benutzergruppe anlegen ===&lt;br /&gt;
* Listenansicht &amp;gt; Weltkugel anklicken neue Backend Benutzergruppe (Datensatz)&lt;br /&gt;
* Gruppenname eingeben und include Access Lists anklicken dadurch können die Gruppeneigenschaften per Auswahlfelder angelegt werden.&lt;br /&gt;
* Module auswählen. Sinnvoll sind: Web, Web&amp;gt;Seite, Web&amp;gt;Anzeigen, Web&amp;gt;Liste, Datei, Datei&amp;gt;Dateiliste, evt. Datei&amp;gt;Bilder, Benutzer, Benutzer&amp;gt;Aufgaben, Benutzer&amp;gt;Einstellungen&lt;br /&gt;
* Tabellen auswählen in denen Datensätze gesehen werden können – das sind z.B. die Tabellen der PlugIns ( Gästebuch etc.) z.B. Seite, Seiteninhalt, News, Galerien, Gästebuch-Eintrag, Kalender&lt;br /&gt;
* Tabellen auswählen in denen Datensätze verändert werden können (s.o.)&lt;br /&gt;
* Page Types auswählen – das sind die Arten von Seiten die der Benutzer anlegen kann. Z.B. Standard, Erweitert, Externe URL, Shortcut.&lt;br /&gt;
* Weitere Felder erlauben oder verbieten&lt;br /&gt;
* DB-Mounts das ist die Stelle ab der überhaupt Seiten angeguckt / verändert werden können&lt;br /&gt;
* File-Mounts das ist die Stelle im Dateisystem wo Dateien (Bilder, pdf, etc.) abgelegt, oder verändert werden können.)&lt;br /&gt;
&lt;br /&gt;
=== Benutzer einrichten ===&lt;br /&gt;
* Listenansicht &amp;gt; Weltkugel anklicken und neuen Backend Benutzer anlegen (Datensatz)&lt;br /&gt;
* Name anlegen und eine (oder mehrere) Gruppe auswählen der der Benutzer angehören soll. Die Rechte der Gruppen werden übernommen müssen also nicht neu angewählt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; Solange im Modul Access (Zugriff) nicht die Seitenrechte für alle benötigten Seiten auf Show stehen sieht der Benutzer nichts (siehe Zugriff auf die Seiten einstellen). Das gleiche gilt für das Dateisystem.&lt;br /&gt;
&lt;br /&gt;
== Zugriff auf die Seiten einstellen ==&lt;br /&gt;
Wenn die Seiten zu Beginn von einem Admin erstellt wurden, wie es meistens der Fall sein dürfte. Dann gehören die Seiten Standardmäßig (läßt sich soweit ich weiß ändern)dem Admin und können nur von diesem gesehen werden. Deshalb müssen die Seitenrechte für die Gruppe geändert werden.&lt;br /&gt;
&lt;br /&gt;
Für jede Seite gibt es folgende Rechte: &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Show&amp;#039;&amp;#039;&amp;#039; Page&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Edit&amp;#039;&amp;#039;&amp;#039; Page&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Edit&amp;#039;&amp;#039;&amp;#039; Content&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Delete&amp;#039;&amp;#039;&amp;#039; Page&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;New&amp;#039;&amp;#039;&amp;#039; Pages&lt;br /&gt;
&lt;br /&gt;
=== So geht&amp;#039;s ===&lt;br /&gt;
* Modul Zugriff (&amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039;) wählen.&lt;br /&gt;
* dann den Bearbeitungsstift der Seite auswählen &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Gruppe einstellen&amp;#039;&amp;#039;&amp;#039; für die die Rechte geändert werden sollen.&lt;br /&gt;
* evt. Rekursiv auf die &amp;#039;&amp;#039;&amp;#039;Unterseiten&amp;#039;&amp;#039;&amp;#039; anwenden (unteres Drop Down-Feld)&lt;br /&gt;
* Speichern.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich lassen sich auch der Besitzer oder die Rechte für jeden einstellen. Grundsätzlich gilt wenn Benutzer zu mehreren Gruppen gehören:&lt;br /&gt;
&lt;br /&gt;
Rechte addieren sich.&lt;br /&gt;
&lt;br /&gt;
== Zugriff auf das Filesystem (fileadmin) einstellen ==&lt;br /&gt;
Sinnvollerweise legt man für die Benutzer eigene Ordner an in denen nicht gerade die Bilder für die Templates etc. liegen.&lt;br /&gt;
&lt;br /&gt;
Diese Ordner müssen ähnlich wie die Seitenbäume gemounted werden.&lt;br /&gt;
&lt;br /&gt;
=== So geht&amp;#039;s ===&lt;br /&gt;
* Die Ordner müssen vorher natürlich im Filesystem (fileadmin) angelegt werden (z.B. userImages)&lt;br /&gt;
* In den Einstellungen für die Gruppe (oder den Benutzer) kann ein neuer Filemount mit Klick im Abschnitt &amp;#039;File Mount&amp;#039; angelegt werden.&lt;br /&gt;
* Es kann anschließend ein beliebiger Name (Label) vergeben werden. Das ist der Name den der Benutzer sieht.&lt;br /&gt;
* Wenn der Ordner unterhalb von fileadmin liegt am besten auf relativ klicken und den Pfad ohne &amp;#039;fileadmin&amp;#039; eingeben (z.B. userImages/pics)&lt;br /&gt;
&lt;br /&gt;
== Welche Rechteeinstellungen sind sinnvoll? ==&lt;br /&gt;
&lt;br /&gt;
== Fortgeschrittene Benutzerkonfiguration ==&lt;br /&gt;
Über das Feld User TSConfig kann die Anzeige des Backends bzw. für das Frontend Editing für verschiedene Benutzer und Benutzergruppen eingestellt werden. Folgende Bereiche sind möglich:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;admPanel&amp;#039;&amp;#039;&amp;#039; - hiermit kann man das admin Panel im Frontend einstellen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;options&amp;#039;&amp;#039;&amp;#039; - einige globale Einstellungen im Backend&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;setup&amp;#039;&amp;#039;&amp;#039; - damit steuert man die Einstellungen, die man auch unter Benutzer &amp;gt; Einstellungen (User &amp;gt; Setup) einstellen kann; nur eben mit Typo Script. Mit default kann der Admin sogar Standard Vorgaben für neue Benutzer(gruppen) erstellen. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mod&amp;#039;&amp;#039;&amp;#039; - hiermit kann man das Modul &amp;#039;Web&amp;#039; konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Die Benutzer-Einstellungen lassen sich (als Admin) über das Modul &amp;#039;&amp;#039;&amp;#039;Tools &amp;gt; User Admin&amp;#039;&amp;#039;&amp;#039; vergleichen (TSConfig und TSConfig HL anklicken). Hier sieht man auch gut wie die TS Befehle heißen.&lt;br /&gt;
&lt;br /&gt;
Mehr Info in [[Typo3 - TSConfig]]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Dropdown Feld für Cache ====&lt;br /&gt;
(PageTS oder UserTS)&lt;br /&gt;
&lt;br /&gt;
 options.clearCache.pages = 1&lt;br /&gt;
 options.clearCache.all = 1&lt;br /&gt;
&lt;br /&gt;
stellt ein Dropdownfeld zur Verfügung mit dem der Benutzer für einzelne und für alle Seiten den &amp;#039;&amp;#039;&amp;#039;Cache löschen&amp;#039;&amp;#039;&amp;#039; kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sichtbare Spalten festlegen====&lt;br /&gt;
PageTS oder User TS&lt;br /&gt;
&lt;br /&gt;
 mod {&lt;br /&gt;
   SHARED.colPos_list = 0,2&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Zeigt nur die mittlere und die Spalte Normal und Rechts angezeigt (Links=1, Normal=0, Rechts=2,Rand =3).&lt;br /&gt;
&lt;br /&gt;
==== Dropdown-Feld für die Überschrift anpassen ====&lt;br /&gt;
PageTS&lt;br /&gt;
&lt;br /&gt;
So kann man die überflüssigen Menüeinträge im Feld Header löschen(100 steht für den Wert versteckt):&lt;br /&gt;
 TCEFORM.tt_content.header_layout.removeItems = 2,3,4,5,100&lt;br /&gt;
Trick: Wenn man nicht weiß welchen Wert ein eintrag hat, einfach diesen Wert verwenden und in der Datenbank nachgucken.&lt;br /&gt;
&lt;br /&gt;
==== Überschreiben der Menüeinträge: ====&lt;br /&gt;
Page TS&lt;br /&gt;
&lt;br /&gt;
 TCEFORM.tt_content.header_layout.altLabels.0 = Überschrift Text&lt;br /&gt;
 TCEFORM.tt_content.header_layout.altLabels.1 = Überschrift Grafik&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Neue Seiten automatisch einer Benutzergruppe zuordnen ====&lt;br /&gt;
Im PageTS wird die Gruppe festgelegt der neue Seiten zugeordnet werden. Außerdem die Rechte für den Besitzer usw. festgelegt.&lt;br /&gt;
&lt;br /&gt;
 TCEMAIN.permissions.groupid = 1&lt;br /&gt;
 TCEMAIN.permissions.user = show, editcontent, new, edit, delete&lt;br /&gt;
 TCEMAIN.permissions.group = show, editcontent, new, edit, delete&lt;br /&gt;
 TCEMAIN.permissions.everybody = show, edit&lt;br /&gt;
&lt;br /&gt;
=== Zugriff über das Frontend ===&lt;br /&gt;
&lt;br /&gt;
=== Umleitung auf das Frontend ===&lt;br /&gt;
&lt;br /&gt;
== Freesite Plugin ==&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Typo3-redakteur.t3d&amp;diff=19083</id>
		<title>Datei:Typo3-redakteur.t3d</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Typo3-redakteur.t3d&amp;diff=19083"/>
		<updated>2012-04-04T13:02:58Z</updated>

		<summary type="html">&lt;p&gt;Kholja: Standard Typo3 Redakteur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Standard Typo3 Redakteur&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19076</id>
		<title>JQuery - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19076"/>
		<updated>2012-03-29T09:46:40Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Einfaches Rollover Hide Show Skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nützliche jQuery Schnipsel&lt;br /&gt;
== Links ==&lt;br /&gt;
http://css-tricks.com/snippets/jquery/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formulare ==&lt;br /&gt;
=== Fokus auf erstes Input-Feld im Formular setzen ===&lt;br /&gt;
 // focus on the first text input field on the page&lt;br /&gt;
 $(&amp;quot;input[type=&amp;#039;text&amp;#039;]:first&amp;quot;, document.forms[0]).focus();&lt;br /&gt;
&lt;br /&gt;
== Browser ==&lt;br /&gt;
=== Resize des Browserfensters feststellen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot; src=&amp;quot;https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
 &lt;br /&gt;
//If the User resizes the window, adjust the #container height&lt;br /&gt;
$(window).bind(&amp;quot;resize&amp;quot;, resizeWindow);&lt;br /&gt;
function resizeWindow( e ) {&lt;br /&gt;
	var newWindowHeight = $(window).height();&lt;br /&gt;
	$(&amp;quot;#container&amp;quot;).css(&amp;quot;min-height&amp;quot;, newWindowHeight );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
});			&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Templates - Vorlagen ==&lt;br /&gt;
=== XHTML 1.0 Template mit jQuery ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Title goes here &amp;amp;raquo; Site title here&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Meta Tags --&amp;gt;&lt;br /&gt;
	&amp;lt;base href=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;expires&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;cache-control&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- Fav icon --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- JavaScript setup --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
	// add &amp;#039;js&amp;#039; class to root element to nicely allow css that degrades gracefully if js is disabled&lt;br /&gt;
	document.getElementsByTagName(&amp;#039;html&amp;#039;)[0].className = &amp;#039;js&amp;#039;;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- CSS --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/screen.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/print.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/ie-all.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;h1&amp;gt;Title of page goes here&amp;lt;/h1&amp;gt;&lt;br /&gt;
			&amp;lt;h2&amp;gt;Subtitle of page goes here&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end header div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div id=&amp;quot;nav&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;breadcrumbs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sub directory&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Current page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end nav div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;sidebar&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub2&amp;quot; class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end main div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;p&amp;gt;&amp;amp;copy;2XXX company name here. Creative Commons link, your own link, validation, etc.&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end footer div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- end container div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/scripts/app.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;!-- place Google Analytics code here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== JavaScript nachladen während die Seite schon angezeigt wird ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Add this onDocumentReady function to the end of the jQuery.js file. &lt;br /&gt;
// It MUST be in the jquery file to work correctly.&lt;br /&gt;
$(function(){&lt;br /&gt;
	var scripts = /\?(.*)/, files = [], path = /^.*\//, loaded = 0, count = 0;&lt;br /&gt;
 &lt;br /&gt;
	$(&amp;#039;script&amp;#039;).each(function(){&lt;br /&gt;
		var src = $(this).attr(&amp;#039;src&amp;#039;);&lt;br /&gt;
		if (!scripts.test(src)) return;&lt;br /&gt;
		var pathto = src.match(path);&lt;br /&gt;
		files = files.concat($.map(src.match(scripts).pop().split(&amp;#039;,&amp;#039;), function(e,i){&lt;br /&gt;
			return pathto+e+&amp;#039;.js&amp;#039;&lt;br /&gt;
		}));&lt;br /&gt;
	})&lt;br /&gt;
 &lt;br /&gt;
	count = files.length;&lt;br /&gt;
 &lt;br /&gt;
	$.each(files, function(){&lt;br /&gt;
		$.getScript(this, function(){&lt;br /&gt;
			loaded++;&lt;br /&gt;
			if(loaded == count &amp;amp;&amp;amp; typeof onBackload == &amp;#039;function&amp;#039;)&lt;br /&gt;
				onBackload(loaded)&lt;br /&gt;
		})&lt;br /&gt;
	})&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * If you have the following script tags:&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/path/to/jquery.min.js?somefile,otherfile.min,thirdfile&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/other/path/foo.js?different.file,final.file&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * This script will &amp;quot;backload&amp;quot; the following files:&lt;br /&gt;
 * 	/path/to/somefile.js&lt;br /&gt;
 *	/path/to/otherfile.min.js&lt;br /&gt;
 * 	/path/to/thirdfile.js&lt;br /&gt;
 * 	/other/path/different.file.js&lt;br /&gt;
 *	/other/path/final.file.js&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
// And if you declare a function named &amp;quot;onBackload&amp;quot;, it will be fired when all the scripts are loaded&lt;br /&gt;
// This is handy for getting things going once you&amp;#039;re confident your scripts have all been included.&lt;br /&gt;
function onBackload(loaded){&lt;br /&gt;
	alert(&amp;#039;All &amp;#039; + loaded + &amp;#039; files backloaded!&amp;#039;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOM Manipulation ==&lt;br /&gt;
=== Einfaches Rollover Hide Show Skript ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//var j = jQuery.noConflict();&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    hideAllItems();	&lt;br /&gt;
&lt;br /&gt;
    $(&amp;quot;h5&amp;quot;).hover( &lt;br /&gt;
      function () {&lt;br /&gt;
         showItem($(this));&lt;br /&gt;
      }, &lt;br /&gt;
      function () {&lt;br /&gt;
        hideItem($(this));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function hideAllItems(){&lt;br /&gt;
    $(&amp;quot;.bodytext&amp;quot;).hide();	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function showItem(myItem){&lt;br /&gt;
      myItem.next().fadeIn(250);&lt;br /&gt;
      myItem.parent().addClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
    //myItem.parents().(&amp;quot;p&amp;quot;).fadeIn(250);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hideItem(myItem){&lt;br /&gt;
    myItem.next().fadeOut(250);&lt;br /&gt;
    myItem.parent().removeClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //hideAllItems();&lt;br /&gt;
    //myItem.find(&amp;quot;span:last&amp;quot;).remove();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
// --&amp;gt;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Media:Maphilight-sample01.zip]]‎&lt;br /&gt;
&lt;br /&gt;
===Append Site Overlay DIV===&lt;br /&gt;
&lt;br /&gt;
Quelle: http://css-tricks.com/snippets/jquery/append-site-overlay-div/ (11/2011)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() {&lt;br /&gt;
&lt;br /&gt;
   var docHeight = $(document).height();&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;body&amp;quot;).append(&amp;quot;&amp;lt;div id=&amp;#039;overlay&amp;#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;#overlay&amp;quot;)&lt;br /&gt;
      .height(docHeight)&lt;br /&gt;
      .css({&lt;br /&gt;
         &amp;#039;opacity&amp;#039; : 0.4,&lt;br /&gt;
         &amp;#039;position&amp;#039;: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
         &amp;#039;top&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;left&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;background-color&amp;#039;: &amp;#039;black&amp;#039;,&lt;br /&gt;
         &amp;#039;width&amp;#039;: &amp;#039;100%&amp;#039;,&lt;br /&gt;
         &amp;#039;z-index&amp;#039;: 5000&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== jQuery - overlay, modal box, lightbox, tooltips ===&lt;br /&gt;
Infos über die verschiedenen Möglichkeiten und die Unterschiede (Todo)&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19075</id>
		<title>JQuery - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19075"/>
		<updated>2012-03-29T09:46:07Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Einfaches Rollover Hide Show Skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nützliche jQuery Schnipsel&lt;br /&gt;
== Links ==&lt;br /&gt;
http://css-tricks.com/snippets/jquery/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formulare ==&lt;br /&gt;
=== Fokus auf erstes Input-Feld im Formular setzen ===&lt;br /&gt;
 // focus on the first text input field on the page&lt;br /&gt;
 $(&amp;quot;input[type=&amp;#039;text&amp;#039;]:first&amp;quot;, document.forms[0]).focus();&lt;br /&gt;
&lt;br /&gt;
== Browser ==&lt;br /&gt;
=== Resize des Browserfensters feststellen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot; src=&amp;quot;https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
 &lt;br /&gt;
//If the User resizes the window, adjust the #container height&lt;br /&gt;
$(window).bind(&amp;quot;resize&amp;quot;, resizeWindow);&lt;br /&gt;
function resizeWindow( e ) {&lt;br /&gt;
	var newWindowHeight = $(window).height();&lt;br /&gt;
	$(&amp;quot;#container&amp;quot;).css(&amp;quot;min-height&amp;quot;, newWindowHeight );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
});			&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Templates - Vorlagen ==&lt;br /&gt;
=== XHTML 1.0 Template mit jQuery ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Title goes here &amp;amp;raquo; Site title here&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Meta Tags --&amp;gt;&lt;br /&gt;
	&amp;lt;base href=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;expires&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;cache-control&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- Fav icon --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- JavaScript setup --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
	// add &amp;#039;js&amp;#039; class to root element to nicely allow css that degrades gracefully if js is disabled&lt;br /&gt;
	document.getElementsByTagName(&amp;#039;html&amp;#039;)[0].className = &amp;#039;js&amp;#039;;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- CSS --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/screen.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/print.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/ie-all.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;h1&amp;gt;Title of page goes here&amp;lt;/h1&amp;gt;&lt;br /&gt;
			&amp;lt;h2&amp;gt;Subtitle of page goes here&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end header div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div id=&amp;quot;nav&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;breadcrumbs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sub directory&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Current page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end nav div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;sidebar&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub2&amp;quot; class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end main div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;p&amp;gt;&amp;amp;copy;2XXX company name here. Creative Commons link, your own link, validation, etc.&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end footer div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- end container div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/scripts/app.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;!-- place Google Analytics code here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== JavaScript nachladen während die Seite schon angezeigt wird ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Add this onDocumentReady function to the end of the jQuery.js file. &lt;br /&gt;
// It MUST be in the jquery file to work correctly.&lt;br /&gt;
$(function(){&lt;br /&gt;
	var scripts = /\?(.*)/, files = [], path = /^.*\//, loaded = 0, count = 0;&lt;br /&gt;
 &lt;br /&gt;
	$(&amp;#039;script&amp;#039;).each(function(){&lt;br /&gt;
		var src = $(this).attr(&amp;#039;src&amp;#039;);&lt;br /&gt;
		if (!scripts.test(src)) return;&lt;br /&gt;
		var pathto = src.match(path);&lt;br /&gt;
		files = files.concat($.map(src.match(scripts).pop().split(&amp;#039;,&amp;#039;), function(e,i){&lt;br /&gt;
			return pathto+e+&amp;#039;.js&amp;#039;&lt;br /&gt;
		}));&lt;br /&gt;
	})&lt;br /&gt;
 &lt;br /&gt;
	count = files.length;&lt;br /&gt;
 &lt;br /&gt;
	$.each(files, function(){&lt;br /&gt;
		$.getScript(this, function(){&lt;br /&gt;
			loaded++;&lt;br /&gt;
			if(loaded == count &amp;amp;&amp;amp; typeof onBackload == &amp;#039;function&amp;#039;)&lt;br /&gt;
				onBackload(loaded)&lt;br /&gt;
		})&lt;br /&gt;
	})&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * If you have the following script tags:&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/path/to/jquery.min.js?somefile,otherfile.min,thirdfile&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/other/path/foo.js?different.file,final.file&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * This script will &amp;quot;backload&amp;quot; the following files:&lt;br /&gt;
 * 	/path/to/somefile.js&lt;br /&gt;
 *	/path/to/otherfile.min.js&lt;br /&gt;
 * 	/path/to/thirdfile.js&lt;br /&gt;
 * 	/other/path/different.file.js&lt;br /&gt;
 *	/other/path/final.file.js&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
// And if you declare a function named &amp;quot;onBackload&amp;quot;, it will be fired when all the scripts are loaded&lt;br /&gt;
// This is handy for getting things going once you&amp;#039;re confident your scripts have all been included.&lt;br /&gt;
function onBackload(loaded){&lt;br /&gt;
	alert(&amp;#039;All &amp;#039; + loaded + &amp;#039; files backloaded!&amp;#039;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOM Manipulation ==&lt;br /&gt;
=== Einfaches Rollover Hide Show Skript ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//var j = jQuery.noConflict();&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    hideAllItems();	&lt;br /&gt;
&lt;br /&gt;
    $(&amp;quot;h5&amp;quot;).hover( &lt;br /&gt;
      function () {&lt;br /&gt;
         showItem($(this));&lt;br /&gt;
      }, &lt;br /&gt;
      function () {&lt;br /&gt;
        hideItem($(this));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function hideAllItems(){&lt;br /&gt;
    $(&amp;quot;.bodytext&amp;quot;).hide();	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
siehe auch: [[Media:Maphilight-sample01.zip‎]]&lt;br /&gt;
function showItem(myItem){&lt;br /&gt;
      myItem.next().fadeIn(250);&lt;br /&gt;
      myItem.parent().addClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
    //myItem.parents().(&amp;quot;p&amp;quot;).fadeIn(250);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hideItem(myItem){&lt;br /&gt;
    myItem.next().fadeOut(250);&lt;br /&gt;
    myItem.parent().removeClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //hideAllItems();&lt;br /&gt;
    //myItem.find(&amp;quot;span:last&amp;quot;).remove();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
// --&amp;gt;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Media:Maphilight-sample01.zip]]‎&lt;br /&gt;
&lt;br /&gt;
===Append Site Overlay DIV===&lt;br /&gt;
&lt;br /&gt;
Quelle: http://css-tricks.com/snippets/jquery/append-site-overlay-div/ (11/2011)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() {&lt;br /&gt;
&lt;br /&gt;
   var docHeight = $(document).height();&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;body&amp;quot;).append(&amp;quot;&amp;lt;div id=&amp;#039;overlay&amp;#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;#overlay&amp;quot;)&lt;br /&gt;
      .height(docHeight)&lt;br /&gt;
      .css({&lt;br /&gt;
         &amp;#039;opacity&amp;#039; : 0.4,&lt;br /&gt;
         &amp;#039;position&amp;#039;: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
         &amp;#039;top&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;left&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;background-color&amp;#039;: &amp;#039;black&amp;#039;,&lt;br /&gt;
         &amp;#039;width&amp;#039;: &amp;#039;100%&amp;#039;,&lt;br /&gt;
         &amp;#039;z-index&amp;#039;: 5000&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== jQuery - overlay, modal box, lightbox, tooltips ===&lt;br /&gt;
Infos über die verschiedenen Möglichkeiten und die Unterschiede (Todo)&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19074</id>
		<title>JQuery - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19074"/>
		<updated>2012-03-29T09:45:24Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* Einfaches Rollover Hide Show Skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nützliche jQuery Schnipsel&lt;br /&gt;
== Links ==&lt;br /&gt;
http://css-tricks.com/snippets/jquery/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formulare ==&lt;br /&gt;
=== Fokus auf erstes Input-Feld im Formular setzen ===&lt;br /&gt;
 // focus on the first text input field on the page&lt;br /&gt;
 $(&amp;quot;input[type=&amp;#039;text&amp;#039;]:first&amp;quot;, document.forms[0]).focus();&lt;br /&gt;
&lt;br /&gt;
== Browser ==&lt;br /&gt;
=== Resize des Browserfensters feststellen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot; src=&amp;quot;https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
 &lt;br /&gt;
//If the User resizes the window, adjust the #container height&lt;br /&gt;
$(window).bind(&amp;quot;resize&amp;quot;, resizeWindow);&lt;br /&gt;
function resizeWindow( e ) {&lt;br /&gt;
	var newWindowHeight = $(window).height();&lt;br /&gt;
	$(&amp;quot;#container&amp;quot;).css(&amp;quot;min-height&amp;quot;, newWindowHeight );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
});			&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Templates - Vorlagen ==&lt;br /&gt;
=== XHTML 1.0 Template mit jQuery ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Title goes here &amp;amp;raquo; Site title here&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Meta Tags --&amp;gt;&lt;br /&gt;
	&amp;lt;base href=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;expires&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;cache-control&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- Fav icon --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- JavaScript setup --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
	// add &amp;#039;js&amp;#039; class to root element to nicely allow css that degrades gracefully if js is disabled&lt;br /&gt;
	document.getElementsByTagName(&amp;#039;html&amp;#039;)[0].className = &amp;#039;js&amp;#039;;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- CSS --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/screen.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/print.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/ie-all.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;h1&amp;gt;Title of page goes here&amp;lt;/h1&amp;gt;&lt;br /&gt;
			&amp;lt;h2&amp;gt;Subtitle of page goes here&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end header div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div id=&amp;quot;nav&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;breadcrumbs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sub directory&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Current page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end nav div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;sidebar&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub2&amp;quot; class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end main div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;p&amp;gt;&amp;amp;copy;2XXX company name here. Creative Commons link, your own link, validation, etc.&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end footer div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- end container div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/scripts/app.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;!-- place Google Analytics code here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== JavaScript nachladen während die Seite schon angezeigt wird ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Add this onDocumentReady function to the end of the jQuery.js file. &lt;br /&gt;
// It MUST be in the jquery file to work correctly.&lt;br /&gt;
$(function(){&lt;br /&gt;
	var scripts = /\?(.*)/, files = [], path = /^.*\//, loaded = 0, count = 0;&lt;br /&gt;
 &lt;br /&gt;
	$(&amp;#039;script&amp;#039;).each(function(){&lt;br /&gt;
		var src = $(this).attr(&amp;#039;src&amp;#039;);&lt;br /&gt;
		if (!scripts.test(src)) return;&lt;br /&gt;
		var pathto = src.match(path);&lt;br /&gt;
		files = files.concat($.map(src.match(scripts).pop().split(&amp;#039;,&amp;#039;), function(e,i){&lt;br /&gt;
			return pathto+e+&amp;#039;.js&amp;#039;&lt;br /&gt;
		}));&lt;br /&gt;
	})&lt;br /&gt;
 &lt;br /&gt;
	count = files.length;&lt;br /&gt;
 &lt;br /&gt;
	$.each(files, function(){&lt;br /&gt;
		$.getScript(this, function(){&lt;br /&gt;
			loaded++;&lt;br /&gt;
			if(loaded == count &amp;amp;&amp;amp; typeof onBackload == &amp;#039;function&amp;#039;)&lt;br /&gt;
				onBackload(loaded)&lt;br /&gt;
		})&lt;br /&gt;
	})&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * If you have the following script tags:&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/path/to/jquery.min.js?somefile,otherfile.min,thirdfile&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/other/path/foo.js?different.file,final.file&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * This script will &amp;quot;backload&amp;quot; the following files:&lt;br /&gt;
 * 	/path/to/somefile.js&lt;br /&gt;
 *	/path/to/otherfile.min.js&lt;br /&gt;
 * 	/path/to/thirdfile.js&lt;br /&gt;
 * 	/other/path/different.file.js&lt;br /&gt;
 *	/other/path/final.file.js&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
// And if you declare a function named &amp;quot;onBackload&amp;quot;, it will be fired when all the scripts are loaded&lt;br /&gt;
// This is handy for getting things going once you&amp;#039;re confident your scripts have all been included.&lt;br /&gt;
function onBackload(loaded){&lt;br /&gt;
	alert(&amp;#039;All &amp;#039; + loaded + &amp;#039; files backloaded!&amp;#039;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOM Manipulation ==&lt;br /&gt;
=== Einfaches Rollover Hide Show Skript ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//var j = jQuery.noConflict();&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    hideAllItems();	&lt;br /&gt;
&lt;br /&gt;
    $(&amp;quot;h5&amp;quot;).hover( &lt;br /&gt;
      function () {&lt;br /&gt;
         showItem($(this));&lt;br /&gt;
      }, &lt;br /&gt;
      function () {&lt;br /&gt;
        hideItem($(this));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function hideAllItems(){&lt;br /&gt;
    $(&amp;quot;.bodytext&amp;quot;).hide();	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
siehe auch: [[Media:Maphilight-sample01.zip‎]]&lt;br /&gt;
function showItem(myItem){&lt;br /&gt;
      myItem.next().fadeIn(250);&lt;br /&gt;
      myItem.parent().addClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
    //myItem.parents().(&amp;quot;p&amp;quot;).fadeIn(250);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hideItem(myItem){&lt;br /&gt;
    myItem.next().fadeOut(250);&lt;br /&gt;
    myItem.parent().removeClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //hideAllItems();&lt;br /&gt;
    //myItem.find(&amp;quot;span:last&amp;quot;).remove();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
// --&amp;gt;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Append Site Overlay DIV===&lt;br /&gt;
&lt;br /&gt;
Quelle: http://css-tricks.com/snippets/jquery/append-site-overlay-div/ (11/2011)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() {&lt;br /&gt;
&lt;br /&gt;
   var docHeight = $(document).height();&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;body&amp;quot;).append(&amp;quot;&amp;lt;div id=&amp;#039;overlay&amp;#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;#overlay&amp;quot;)&lt;br /&gt;
      .height(docHeight)&lt;br /&gt;
      .css({&lt;br /&gt;
         &amp;#039;opacity&amp;#039; : 0.4,&lt;br /&gt;
         &amp;#039;position&amp;#039;: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
         &amp;#039;top&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;left&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;background-color&amp;#039;: &amp;#039;black&amp;#039;,&lt;br /&gt;
         &amp;#039;width&amp;#039;: &amp;#039;100%&amp;#039;,&lt;br /&gt;
         &amp;#039;z-index&amp;#039;: 5000&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== jQuery - overlay, modal box, lightbox, tooltips ===&lt;br /&gt;
Infos über die verschiedenen Möglichkeiten und die Unterschiede (Todo)&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Datei:Maphilight-sample01.zip&amp;diff=19073</id>
		<title>Datei:Maphilight-sample01.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Datei:Maphilight-sample01.zip&amp;diff=19073"/>
		<updated>2012-03-29T09:44:10Z</updated>

		<summary type="html">&lt;p&gt;Kholja: hat eine neue Version von „Datei:Maphilight-sample01.zip“ hochgeladen: Map mit Tooltips erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ImageMap mit jQuery und Map Hilighter&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19072</id>
		<title>JQuery - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JQuery_-_Snippets&amp;diff=19072"/>
		<updated>2012-03-29T09:42:50Z</updated>

		<summary type="html">&lt;p&gt;Kholja: /* jQuery - overlay, modal box, lightbox, tooltips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nützliche jQuery Schnipsel&lt;br /&gt;
== Links ==&lt;br /&gt;
http://css-tricks.com/snippets/jquery/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formulare ==&lt;br /&gt;
=== Fokus auf erstes Input-Feld im Formular setzen ===&lt;br /&gt;
 // focus on the first text input field on the page&lt;br /&gt;
 $(&amp;quot;input[type=&amp;#039;text&amp;#039;]:first&amp;quot;, document.forms[0]).focus();&lt;br /&gt;
&lt;br /&gt;
== Browser ==&lt;br /&gt;
=== Resize des Browserfensters feststellen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot; src=&amp;quot;https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
 &lt;br /&gt;
//If the User resizes the window, adjust the #container height&lt;br /&gt;
$(window).bind(&amp;quot;resize&amp;quot;, resizeWindow);&lt;br /&gt;
function resizeWindow( e ) {&lt;br /&gt;
	var newWindowHeight = $(window).height();&lt;br /&gt;
	$(&amp;quot;#container&amp;quot;).css(&amp;quot;min-height&amp;quot;, newWindowHeight );&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
});			&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Templates - Vorlagen ==&lt;br /&gt;
=== XHTML 1.0 Template mit jQuery ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Title goes here &amp;amp;raquo; Site title here&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Meta Tags --&amp;gt;&lt;br /&gt;
	&amp;lt;base href=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;generator&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;expires&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;cache-control&amp;quot; content=&amp;quot;#&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- Fav icon --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- JavaScript setup --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
	// add &amp;#039;js&amp;#039; class to root element to nicely allow css that degrades gracefully if js is disabled&lt;br /&gt;
	document.getElementsByTagName(&amp;#039;html&amp;#039;)[0].className = &amp;#039;js&amp;#039;;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- CSS --&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/screen.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/print.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;print&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/stylesheets/ie-all.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen, projection&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;h1&amp;gt;Title of page goes here&amp;lt;/h1&amp;gt;&lt;br /&gt;
			&amp;lt;h2&amp;gt;Subtitle of page goes here&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end header div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div id=&amp;quot;nav&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link #3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;breadcrumbs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sub directory&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Current page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end nav div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul class=&amp;quot;sidebar&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Sidebar link #2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div id=&amp;quot;sub2&amp;quot; class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Title of content&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;Begin content here&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end main div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;p&amp;gt;&amp;amp;copy;2XXX company name here. Creative Commons link, your own link, validation, etc.&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;!-- end footer div --&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- end container div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/scripts/app.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;!-- place Google Analytics code here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== JavaScript nachladen während die Seite schon angezeigt wird ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Add this onDocumentReady function to the end of the jQuery.js file. &lt;br /&gt;
// It MUST be in the jquery file to work correctly.&lt;br /&gt;
$(function(){&lt;br /&gt;
	var scripts = /\?(.*)/, files = [], path = /^.*\//, loaded = 0, count = 0;&lt;br /&gt;
 &lt;br /&gt;
	$(&amp;#039;script&amp;#039;).each(function(){&lt;br /&gt;
		var src = $(this).attr(&amp;#039;src&amp;#039;);&lt;br /&gt;
		if (!scripts.test(src)) return;&lt;br /&gt;
		var pathto = src.match(path);&lt;br /&gt;
		files = files.concat($.map(src.match(scripts).pop().split(&amp;#039;,&amp;#039;), function(e,i){&lt;br /&gt;
			return pathto+e+&amp;#039;.js&amp;#039;&lt;br /&gt;
		}));&lt;br /&gt;
	})&lt;br /&gt;
 &lt;br /&gt;
	count = files.length;&lt;br /&gt;
 &lt;br /&gt;
	$.each(files, function(){&lt;br /&gt;
		$.getScript(this, function(){&lt;br /&gt;
			loaded++;&lt;br /&gt;
			if(loaded == count &amp;amp;&amp;amp; typeof onBackload == &amp;#039;function&amp;#039;)&lt;br /&gt;
				onBackload(loaded)&lt;br /&gt;
		})&lt;br /&gt;
	})&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * If you have the following script tags:&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/path/to/jquery.min.js?somefile,otherfile.min,thirdfile&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * 	&amp;lt;script src=&amp;quot;/other/path/foo.js?different.file,final.file&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 * This script will &amp;quot;backload&amp;quot; the following files:&lt;br /&gt;
 * 	/path/to/somefile.js&lt;br /&gt;
 *	/path/to/otherfile.min.js&lt;br /&gt;
 * 	/path/to/thirdfile.js&lt;br /&gt;
 * 	/other/path/different.file.js&lt;br /&gt;
 *	/other/path/final.file.js&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
// And if you declare a function named &amp;quot;onBackload&amp;quot;, it will be fired when all the scripts are loaded&lt;br /&gt;
// This is handy for getting things going once you&amp;#039;re confident your scripts have all been included.&lt;br /&gt;
function onBackload(loaded){&lt;br /&gt;
	alert(&amp;#039;All &amp;#039; + loaded + &amp;#039; files backloaded!&amp;#039;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOM Manipulation ==&lt;br /&gt;
=== Einfaches Rollover Hide Show Skript ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	/*&amp;lt;![CDATA[*/&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//var j = jQuery.noConflict();&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    hideAllItems();	&lt;br /&gt;
&lt;br /&gt;
    $(&amp;quot;h5&amp;quot;).hover( &lt;br /&gt;
      function () {&lt;br /&gt;
         showItem($(this));&lt;br /&gt;
      }, &lt;br /&gt;
      function () {&lt;br /&gt;
        hideItem($(this));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    );&lt;br /&gt;
 &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function hideAllItems(){&lt;br /&gt;
    $(&amp;quot;.bodytext&amp;quot;).hide();	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function showItem(myItem){&lt;br /&gt;
      myItem.next().fadeIn(250);&lt;br /&gt;
      myItem.parent().addClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
    //myItem.parents().(&amp;quot;p&amp;quot;).fadeIn(250);&lt;br /&gt;
    //myItem.parents().append($(&amp;quot;&amp;lt;span&amp;gt; ***&amp;lt;/span&amp;gt;&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hideItem(myItem){&lt;br /&gt;
    myItem.next().fadeOut(250);&lt;br /&gt;
    myItem.parent().removeClass(&amp;quot;topLine&amp;quot;);&lt;br /&gt;
    //hideAllItems();&lt;br /&gt;
    //myItem.find(&amp;quot;span:last&amp;quot;).remove();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
// --&amp;gt;&lt;br /&gt;
	/*]]&amp;gt;*/&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Append Site Overlay DIV===&lt;br /&gt;
&lt;br /&gt;
Quelle: http://css-tricks.com/snippets/jquery/append-site-overlay-div/ (11/2011)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() {&lt;br /&gt;
&lt;br /&gt;
   var docHeight = $(document).height();&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;body&amp;quot;).append(&amp;quot;&amp;lt;div id=&amp;#039;overlay&amp;#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   $(&amp;quot;#overlay&amp;quot;)&lt;br /&gt;
      .height(docHeight)&lt;br /&gt;
      .css({&lt;br /&gt;
         &amp;#039;opacity&amp;#039; : 0.4,&lt;br /&gt;
         &amp;#039;position&amp;#039;: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
         &amp;#039;top&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;left&amp;#039;: 0,&lt;br /&gt;
         &amp;#039;background-color&amp;#039;: &amp;#039;black&amp;#039;,&lt;br /&gt;
         &amp;#039;width&amp;#039;: &amp;#039;100%&amp;#039;,&lt;br /&gt;
         &amp;#039;z-index&amp;#039;: 5000&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== jQuery - overlay, modal box, lightbox, tooltips ===&lt;br /&gt;
Infos über die verschiedenen Möglichkeiten und die Unterschiede (Todo)&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;/div&gt;</summary>
		<author><name>Kholja</name></author>
	</entry>
</feed>