<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.47.238.180</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.47.238.180"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/91.47.238.180"/>
	<updated>2026-05-06T17:57:59Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_Registrierung_(sr_feuser_register)&amp;diff=1967</id>
		<title>Typo3 - Benutzer Registrierung (sr feuser register)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_Registrierung_(sr_feuser_register)&amp;diff=1967"/>
		<updated>2010-04-21T19:18:14Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* Wichtige TS Constanten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Extension kann die wichtigsten Dinge für Frontend Benutzer ab:&lt;br /&gt;
* Registrieren&lt;br /&gt;
* An- / Abmeldung&lt;br /&gt;
* Zuordnung zu verschiedenen Benutzergruppen&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[http://wiki.typo3.org/index.php/De:Front_End_User_Registration Typo3 Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://blog.marit.ag/2010/02/12/fe-user-gesalzenen/ User Registrierung mit gesalzenen Passwörtern]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
benötigt:&lt;br /&gt;
* static_info_tables&lt;br /&gt;
* div2007 (für Flexforms)&lt;br /&gt;
* kb_md5fepw (wenn md5 Passwords verwendet werden sollen)&lt;br /&gt;
&lt;br /&gt;
=== Wichtige Ordner und Seiten ===&lt;br /&gt;
* O: Benutzer (oder Abos) enthält notwendige Benutzergruppen und die User&lt;br /&gt;
* S: Login (oder Newsletter) enthält normales Login und sr_feuser_register (default, startingpoint ist der feuser - Ordner)&lt;br /&gt;
*S: Registrierung (sr_feuser_register, mode create, startingpoint wie oben)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Benutzergruppen anlegen ===&lt;br /&gt;
* Gruppe für nicht bestätigte Registrierungen&lt;br /&gt;
* Gruppe für bestätigte Registrierungen&lt;br /&gt;
&lt;br /&gt;
=== TypoScript ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Statisches Template&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* FE User Registration&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Ordner mit Benutzern für Loginform&lt;br /&gt;
styles.content.loginform.pid = 87&lt;br /&gt;
// bei alter newloginbox...&lt;br /&gt;
# plugin.tx_newloginbox_pi1.storagePid = 87&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srfeuserregister_pi1{&lt;br /&gt;
  // Seite mit den Benutzern&lt;br /&gt;
  pid = 87&lt;br /&gt;
  // Benutzergruppen uid nach Registrierung aber vor Bestätigung (z.B. &amp;quot;NL nicht bestätigt&amp;quot;)&lt;br /&gt;
  userGroupUponRegistration = 1&lt;br /&gt;
  // Benutzergruppen uid nach Bestätigung (z.B. &amp;quot;NL bestätigt&amp;quot;)&lt;br /&gt;
  userGroupAfterConfirmation = 2&lt;br /&gt;
  // Seite mit Login Form&lt;br /&gt;
  loginPID = 88&lt;br /&gt;
  // Seite mit Registierung&lt;br /&gt;
  registerPID = 89&lt;br /&gt;
  // Seite zum editieren der Benutzerdaten&lt;br /&gt;
  editPID = 90&lt;br /&gt;
  // Seite mit Bestätigung der Registrierung&lt;br /&gt;
  confirmPID = 91&lt;br /&gt;
  // Wieviel Bilder dürfen hochgeladen werden&lt;br /&gt;
  maxImages = 1&lt;br /&gt;
  dateFormat = d.m.Y&lt;br /&gt;
  dateSplit = .&lt;br /&gt;
  salutation = informal&lt;br /&gt;
  siteName = KO rockt!  &lt;br /&gt;
  formFields = password,first_name, last_name, email,module_sys_dmail_html, module_sys_dmail_category,disable&lt;br /&gt;
  requiredFields = first_name,last_name,email&lt;br /&gt;
  email = steff@ko-rockband.de&lt;br /&gt;
  // nur mit RealURL ?&lt;br /&gt;
  useShortUrls = 1&lt;br /&gt;
  // Kategorien von Direct Mail&lt;br /&gt;
  module_sys_dmail_category_PIDLIST = 86&lt;br /&gt;
  // &lt;br /&gt;
  dmailCheckedUponRegistration = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Sprachlabel anpassen&lt;br /&gt;
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de{&lt;br /&gt;
  v_really_wish_to_delete_informal = Willst Du Dein Konto wirklich löschen?&lt;br /&gt;
  v_your_account_was_created_informal = Dein Konto &amp;lt;strong&amp;gt;%2$s&amp;lt;/strong&amp;gt; wurde erstellt. Wir senden eine E-Mail an die Adresse &amp;lt;strong&amp;gt;%4$s&amp;lt;/strong&amp;gt;, damit Du die Anmeldung bestätigen kannst.&lt;br /&gt;
}&lt;br /&gt;
// Titel der Benutzerseite überschreiben (wird in E-Mails benutzt)&lt;br /&gt;
plugin.tx_srfeuserregister_pi1.pidTitleOverride = KO rockt! News&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispiel: sr_feuser_register für Newsletter einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel geht es darum die Benutzer Registrierung für Direct Mail (direct_mail) einzubauen und zu konfigurieren.&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_Registrierung_(sr_feuser_register)&amp;diff=1965</id>
		<title>Typo3 - Benutzer Registrierung (sr feuser register)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Benutzer_Registrierung_(sr_feuser_register)&amp;diff=1965"/>
		<updated>2010-04-21T18:44:36Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* Benutzergruppen anlegen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Extension kann die wichtigsten Dinge für Frontend Benutzer ab:&lt;br /&gt;
* Registrieren&lt;br /&gt;
* An- / Abmeldung&lt;br /&gt;
* Zuordnung zu verschiedenen Benutzergruppen&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[http://wiki.typo3.org/index.php/De:Front_End_User_Registration Typo3 Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://blog.marit.ag/2010/02/12/fe-user-gesalzenen/ User Registrierung mit gesalzenen Passwörtern]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
benötigt:&lt;br /&gt;
* static_info_tables&lt;br /&gt;
* div2007 (für Flexforms)&lt;br /&gt;
* kb_md5fepw (wenn md5 Passwords verwendet werden sollen)&lt;br /&gt;
&lt;br /&gt;
=== Wichtige Ordner und Seiten ===&lt;br /&gt;
* O: Benutzer (oder Abos) enthält notwendige Benutzergruppen und die User&lt;br /&gt;
* S: Login (oder Newsletter) enthält normales Login und sr_feuser_register (default, startingpoint ist der feuser - Ordner)&lt;br /&gt;
*S: Registrierung (sr_feuser_register, mode create, startingpoint wie oben)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Benutzergruppen anlegen ===&lt;br /&gt;
* Gruppe für nicht bestätigte Registrierungen&lt;br /&gt;
* Gruppe für bestätigte Registrierungen&lt;br /&gt;
&lt;br /&gt;
=== TypoScript ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Statisches Template&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* FE User Registration&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constants&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Ordner mit Benutzern für Loginform&lt;br /&gt;
styles.content.loginform.pid = 87&lt;br /&gt;
// bei alter newloginbox...&lt;br /&gt;
# plugin.tx_newloginbox_pi1.storagePid = 87&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srfeuserregister_pi1{&lt;br /&gt;
  // Seite mit den Benutzern&lt;br /&gt;
  pid = 87&lt;br /&gt;
  // Benutzergruppen uid nach Registrierung aber vor Bestätigung (z.B. &amp;quot;NL nicht bestätigt&amp;quot;)&lt;br /&gt;
  userGroupUponRegistration = 1&lt;br /&gt;
  // Benutzergruppen uid nach Bestätigung (z.B. &amp;quot;NL bestätigt&amp;quot;)&lt;br /&gt;
  userGroupAfterConfirmation = 2&lt;br /&gt;
  // Seite mit Login Form&lt;br /&gt;
  loginPID = 88&lt;br /&gt;
  // Seite mit Registierung&lt;br /&gt;
  registerPID = 89&lt;br /&gt;
  // Seite zum editieren der Benutzerdaten&lt;br /&gt;
  editPID = 90&lt;br /&gt;
  // Seite mit Bestätigung der Registrierung&lt;br /&gt;
  confirmPID = 91&lt;br /&gt;
  // Wieviel Bilder dürfen hochgeladen werden&lt;br /&gt;
  maxImages = 1&lt;br /&gt;
  dateFormat = d.m.Y&lt;br /&gt;
  dateSplit = .&lt;br /&gt;
  salutation = informal&lt;br /&gt;
  siteName = KO rockt!  &lt;br /&gt;
  formFields = password,first_name, last_name, email,module_sys_dmail_html, module_sys_dmail_category,disable&lt;br /&gt;
  requiredFields = first_name,last_name,email&lt;br /&gt;
  email = steff@ko-rockband.de&lt;br /&gt;
  // nur mit RealURL ?&lt;br /&gt;
  useShortUrls = 1&lt;br /&gt;
  // Kategorien von Direct Mail&lt;br /&gt;
  module_sys_dmail_category_PIDLIST = 86&lt;br /&gt;
  // &lt;br /&gt;
  dmailCheckedUponRegistration = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Sprachlabel anpassen&lt;br /&gt;
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de{&lt;br /&gt;
  v_really_wish_to_delete_informal = Willst Du Dein Konto wirklich löschen?&lt;br /&gt;
  v_your_account_was_created_informal = Dein Konto &amp;lt;strong&amp;gt;%2$s&amp;lt;/strong&amp;gt; wurde erstellt. Wir senden eine E-Mail an die Adresse &amp;lt;strong&amp;gt;%4$s&amp;lt;/strong&amp;gt;, damit Du die Anmeldung bestätigen kannst.&lt;br /&gt;
}&lt;br /&gt;
// Titel der Benutzerseite überschreiben (wird in E-Mails benutzt)&lt;br /&gt;
plugin.tx_srfeuserregister_pi1.pidTitleOverride = KO rockt! News&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wichtige TS Constanten ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_srfeuserregister_pi1{&lt;br /&gt;
// Seite mit den Benutzern&lt;br /&gt;
pid = 0&lt;br /&gt;
// Benutzergruppen uid nach Registrierung aber vor Bestätigung (z.B. &amp;quot;NL nicht bestätigt&amp;quot;)&lt;br /&gt;
userGroupUponRegistration = 1&lt;br /&gt;
// Benutzergruppen uid nach Bestätigung (z.B. &amp;quot;NL bestätigt&amp;quot;)&lt;br /&gt;
userGroupAfterConfirmation = 2&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel: sr_feuser_register für Newsletter einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel geht es darum die Benutzer Registrierung für Direct Mail (direct_mail) einzubauen und zu konfigurieren.&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=18637</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=18637"/>
		<updated>2010-04-21T10:28:13Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* eID Datei */&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;
=== 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 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;
=== andere Frameworks ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON 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>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=1963</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=1963"/>
		<updated>2010-04-21T10:22:11Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* 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;
=== 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 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;
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/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;
=== andere Frameworks ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON 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>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=17623</id>
		<title>Typo3 - alternatives Rendering</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=17623"/>
		<updated>2010-04-21T10:18:35Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Für verschiedene Anwendungsfälle (eigene template engine, ajax requests etc.) ist es manchmal notwendig,  das Standard Seitenrendering von Typo3 zu umgehen. Dafür gibt es verschiedene Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== eid mechanismus == &lt;br /&gt;
siehe unter Ajax und Typo3&lt;br /&gt;
&lt;br /&gt;
== ajax parameter ==&lt;br /&gt;
Bemerkung: Nicht getestet&lt;br /&gt;
&lt;br /&gt;
Wenn in der URL der Parameter &lt;br /&gt;
 ajax=1&lt;br /&gt;
mitgegeben wird, dann erzeugt Typo3 ebenfalls eine Ausgabe ohne HTML-Tags und Metadaten. Die komplette Page-Konfiguration wird gelöscht und nur die Ausgabe der Extension “tx_myExt_pi1″ findet statt wenn man diese mit untenstehendem TS vorbereitet.&lt;br /&gt;
&lt;br /&gt;
Denkbar wäre auch eine andere Type Nummer zu definieren.&lt;br /&gt;
&lt;br /&gt;
TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[globalVar = GP:ajax &amp;gt; 0]&lt;br /&gt;
config.disableAllHeaderCode = 1&lt;br /&gt;
page &amp;gt;&lt;br /&gt;
page = PAGE&lt;br /&gt;
page {&lt;br /&gt;
typeNum = 0&lt;br /&gt;
10 &amp;lt; plugin.tx_myExt_pi1&lt;br /&gt;
}&lt;br /&gt;
[global]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alternativer DokType ==&lt;br /&gt;
Eine andere Möglichkeit, eine komplett leere Basisseite zu bekommen versteckt sich noch irgendwo in der Extension “tt_news”. Dort kann man per DokType steuern ob eine Liste oder ein RSS-Feed ausgegeben wird. Der RSS-Feed befindet sich auch auf einer ganz leeren Seite.&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=1961</id>
		<title>Typo3 - alternatives Rendering</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=1961"/>
		<updated>2010-04-21T10:18:22Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* ajax parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Für verschiedene Anwendungsfälle (eigene template engine, ajax requests etc.) ist es manchmal notwendig,  das Standard Seitenrendering von Typo3 zu umgehen. Dafür gibt es verschiedene Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== eid mechanismus == &lt;br /&gt;
siehe unter Ajax und Typo3&lt;br /&gt;
&lt;br /&gt;
== ajax parameter ==&lt;br /&gt;
Bemerkung: Nicht getestet&lt;br /&gt;
&lt;br /&gt;
Wenn in der URL der Parameter &lt;br /&gt;
 ajax=1&lt;br /&gt;
mitgegeben wird, dann erzeugt Typo3 ebenfalls eine Ausgabe ohne HTML-Tags und Metadaten. Die komplette Page-Konfiguration wird gelöscht und nur die Ausgabe der Extension “tx_myExt_pi1″ findet statt wenn man diese mit untenstehendem TS vorbereitet.&lt;br /&gt;
&lt;br /&gt;
Denkbar wäre auch eine andere Type Nummer zu definieren.&lt;br /&gt;
&lt;br /&gt;
TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[globalVar = GP:ajax &amp;gt; 0]&lt;br /&gt;
config.disableAllHeaderCode = 1&lt;br /&gt;
page &amp;gt;&lt;br /&gt;
page = PAGE&lt;br /&gt;
page {&lt;br /&gt;
typeNum = 0&lt;br /&gt;
10 &amp;lt; plugin.tx_myExt_pi1&lt;br /&gt;
}&lt;br /&gt;
[global]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alternativer DokType ==&lt;br /&gt;
Eine andere Möglichkeit, eine komplett leere Basisseite zu bekommen versteckt sich noch irgendwo in der Extension “tt_news”. Dort kann man per DokType steuern ob eine Liste oder ein RSS-Feed ausgegeben wird. Der RSS-Feed befindet sich auch auf einer ganz leeren Seite.&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=1960</id>
		<title>Typo3 - alternatives Rendering</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=1960"/>
		<updated>2010-04-21T10:17:58Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* ajax parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Für verschiedene Anwendungsfälle (eigene template engine, ajax requests etc.) ist es manchmal notwendig,  das Standard Seitenrendering von Typo3 zu umgehen. Dafür gibt es verschiedene Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== eid mechanismus == &lt;br /&gt;
siehe unter Ajax und Typo3&lt;br /&gt;
&lt;br /&gt;
== ajax parameter ==&lt;br /&gt;
Bemerkung: Nicht getestet&lt;br /&gt;
&lt;br /&gt;
Wenn in der URL der Parameter &lt;br /&gt;
 ajax=1&lt;br /&gt;
mitgegeben wird, dann erzeugt Typo3 ebenfalls eine Ausgabe ohne HTML-Tags und Metadaten. Die komplette Page-Konfiguration wird gelöscht und nur die Ausgabe der Extension “tx_myExt_pi1″ findet statt wenn man diese mit untenstehendem TS vorbereitet.&lt;br /&gt;
&lt;br /&gt;
Denkbar wäre auch eine andere Type Nummer zu definieren.&lt;br /&gt;
&lt;br /&gt;
TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[globalVar = GP:ajax &amp;gt; 0]&lt;br /&gt;
config.disableAllHeaderCode = 1&lt;br /&gt;
page &amp;gt;&lt;br /&gt;
page = PAGE&lt;br /&gt;
page {&lt;br /&gt;
typeNum = 0&lt;br /&gt;
10 &amp;lt; plugin.tx_myExt_pi1&lt;br /&gt;
}&lt;br /&gt;
[global]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Alternativer DokType ==&lt;br /&gt;
Eine andere Möglichkeit, eine komplett leere Basisseite zu bekommen versteckt sich noch irgendwo in der Extension “tt_news”. Dort kann man per DokType steuern ob eine Liste oder ein RSS-Feed ausgegeben wird. Der RSS-Feed befindet sich auch auf einer ganz leeren Seite.&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=1959</id>
		<title>Typo3 - alternatives Rendering</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_alternatives_Rendering&amp;diff=1959"/>
		<updated>2010-04-21T10:17:40Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Für verschiedene Anwendungsfälle (eigene template engine, ajax requests etc.) ist es manchmal notwendig,  das Standard Seitenrendering von Typo3 zu umgehen. Dafür gibt es verschiedene Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== eid mechanismus == &lt;br /&gt;
siehe unter Ajax und Typo3&lt;br /&gt;
&lt;br /&gt;
== ajax parameter ==&lt;br /&gt;
Bemerkung: Nicht getestet&lt;br /&gt;
&lt;br /&gt;
Wenn in der URL der Parameter &lt;br /&gt;
 ajax=1&lt;br /&gt;
mitgegeben wird, dann erzeugt Typo3 ebenfalls eine Ausgabe ohne HTML-Tags und Metadaten. Die komplette Page-Konfiguration wird gelöscht und nur die Ausgabe der Extension “tx_myExt_pi1″ findet statt wenn man diese mit untenstehendem TS vorbereitet.&lt;br /&gt;
&lt;br /&gt;
Denkbar wäre auch eine andere Type Nummer zu definieren.&lt;br /&gt;
&lt;br /&gt;
TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[globalVar = GP:ajax &amp;gt; 0]&lt;br /&gt;
config.disableAllHeaderCode = 1&lt;br /&gt;
page &amp;gt;&lt;br /&gt;
page = PAGE&lt;br /&gt;
page {&lt;br /&gt;
typeNum = 0&lt;br /&gt;
10 &amp;lt; plugin.tx_myExt_pi1&lt;br /&gt;
}&lt;br /&gt;
[global]&lt;br /&gt;
&lt;br /&gt;
== Alternativer DokType ==&lt;br /&gt;
Eine andere Möglichkeit, eine komplett leere Basisseite zu bekommen versteckt sich noch irgendwo in der Extension “tt_news”. Dort kann man per DokType steuern ob eine Liste oder ein RSS-Feed ausgegeben wird. Der RSS-Feed befindet sich auch auf einer ganz leeren Seite.&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=1962</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=1962"/>
		<updated>2010-04-21T10:11:31Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* Typo3 Skripte ohne Rendering */&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;
=== 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 a&amp;#039;&amp;#039;&amp;#039;lternative 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;
&lt;br /&gt;
 &amp;lt;?php $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;
&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 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;
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/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;
=== andere Frameworks ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON 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>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=1958</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=1958"/>
		<updated>2010-04-21T10:06:00Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: &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;
=== 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;
=== 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 a&amp;#039;&amp;#039;&amp;#039;lternative 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;
&lt;br /&gt;
 &amp;lt;?php $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;
&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 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;
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/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;
=== andere Frameworks ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON 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>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=1957</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=1957"/>
		<updated>2010-04-21T09:54:39Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* eid ajax 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;
=== 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 Rendering und Caching-Mechanismen von Typo3 zu vermeiden könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den eid Mechanismus zur Verfügung (siehe unten). Mit diesem wird das Seitenrendering frühzeitig abgebrochen und der Request direkt an ein Skript weitergegeben.&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 alternative Rendering Engine betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald eID als Parameter in der URL vorhanden ist (zB. www.domain.de/?eID=schuesselwort) 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;
&lt;br /&gt;
 &amp;lt;?php $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;
&lt;br /&gt;
Steht jetzt also in der Adresse www.domain.de/?eID=schluesselwort geht er in die erste if Abfrage und sieht das $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId] vorhanden ist und speichert &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable $classPath. Danach includiert er die Klasse eidtools und unsere eigene.&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 initialisert den FrontentUser und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine Verbindung zur Datenbank 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 zB auf alle piBase Funktionen zurückzugreufen 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 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;
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/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;
=== andere Frameworks ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON 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>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Newsletter_mit_Direct_Mail&amp;diff=1994</id>
		<title>Newsletter mit Direct Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Newsletter_mit_Direct_Mail&amp;diff=1994"/>
		<updated>2010-04-21T07:40:43Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: /* Muster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
=== Extensions ===&lt;br /&gt;
* tt_address &lt;br /&gt;
* direct_mail (Newsletterversand)&lt;br /&gt;
* sr_feuser_register oder direct_mail_subscriptionoder oder sr_email_subscribe o.ä. (Frontend User Anmeldung)&lt;br /&gt;
* für sr_feuser_register werden weitere extensions benötigt (siehe [[Typo3 - Benutzer Registrierung (sr_feuser_register)]])&lt;br /&gt;
=== Ordner ===&lt;br /&gt;
Für sr_feuser_subscribe kann bei neueren Versionen das meiste im default mode gemacht werden, einige Seiten bieten sich denoch an, weil man auch schöne Infotexte mit reinbauen kann.&lt;br /&gt;
* Newsletter/ (sr_feuser_register_pi in default mode, Login)&lt;br /&gt;
** Registrierung/ (sr_feuser_register in register Mode), hide at login, hide in menu&lt;br /&gt;
** Registrierung bestätigt/ (sr_feuser_register in default oder setfixed mode) hide in menu &lt;br /&gt;
** Benutzerdaten bearbeiten/ (sr_feuser_register in edit oder default mode) hide in Menu, access alle oder bestimmte Benutzer.&lt;br /&gt;
&lt;br /&gt;
Für direct_mail&lt;br /&gt;
&lt;br /&gt;
* Newsletter/&lt;br /&gt;
Seiteneigenschaften enthält &amp;#039;&amp;#039;&amp;#039;Plugin direct_mail&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Neues Root-Template&amp;#039;&amp;#039;&amp;#039; auf Newsletter (alles clearen) &amp;#039;&amp;#039;&amp;#039;includes&amp;#039;&amp;#039;&amp;#039;: content(default), plugin.alt.plaintext(99) und css_styled_content. (Update es gibt auch direct mail plaintext und direct mail news plaintext)&lt;br /&gt;
** Abonnements/ (enthält die Benutzer)&lt;br /&gt;
&lt;br /&gt;
=== User Registrierung ===&lt;br /&gt;
direct_mail kann seine Adressen aus verschiedenen Datenquellen beziehen. Oft nimmt man dazu die fe_user oder tt_address&lt;br /&gt;
=== Bei Verwendung von direct_mail_subscription ===&lt;br /&gt;
* Konstanten anpassen (Constants Editor) für direct_mail_subscription (Admin Email, Name und Record PID auf Abonnement Ordner setzen)&lt;br /&gt;
* Anmelde Template nach fileadmin und anpassen&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== bei sr_feuser_register ===&lt;br /&gt;
Ist meiner Ansicht nach das bessere Tool um Benutzer (wofür auch immer) über das Frontend zu registrieren.&lt;br /&gt;
&lt;br /&gt;
Beachten:&lt;br /&gt;
* Kategorie für dmail muß gesetzt sein sonst wird später nichts versandt. (Geht evtl auch als verstecktes Feld?&lt;br /&gt;
* Todo: Testen ob nicht Abo nutzer auch Mails kriegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Infos dazu:&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Benutzer Registrierung (sr_feuser_register)]]&lt;br /&gt;
&lt;br /&gt;
=== bei sr_email_subscribe ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== direct_mail ===&lt;br /&gt;
* Versendet Direktmails, oder Seiten (extern intern)&lt;br /&gt;
* Kategorien werden auf Content Elemente gelegt&lt;br /&gt;
* Template für PlainText (Type 99) nicht vergessen. &lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
== Muster ==&lt;br /&gt;
Seitenbaum für Registrierung (sr_feuser_register)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- Newsletter &lt;br /&gt;
 |&lt;br /&gt;
 |- Registrierung &lt;br /&gt;
 |- Benutzerdaten bearbeiten&lt;br /&gt;
 |- Registrierung bestätigt&lt;br /&gt;
 |- Freunde einladen&lt;br /&gt;
&lt;br /&gt;
Seitenbaum für Newsletter (direct_mail)&lt;br /&gt;
- Newsletter (Kategorien)&lt;br /&gt;
 |- Abonnenten&lt;br /&gt;
 |- Newsletter Seiten...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
TypoScript Registrierung (sr_feuser_register)&lt;br /&gt;
&lt;br /&gt;
Constants&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Ordner mit Benutzern für Loginform&lt;br /&gt;
styles.content.loginform.pid = 87&lt;br /&gt;
// bei alter newloginbox...&lt;br /&gt;
# plugin.tx_newloginbox_pi1.storagePid = 87&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
plugin.tx_srfeuserregister_pi1{&lt;br /&gt;
  // Seite mit den Benutzern&lt;br /&gt;
  pid = 87&lt;br /&gt;
  // Benutzergruppen uid nach Registrierung aber vor Bestätigung (z.B. &amp;quot;NL nicht bestätigt&amp;quot;)&lt;br /&gt;
  userGroupUponRegistration = 1&lt;br /&gt;
  // Benutzergruppen uid nach Bestätigung (z.B. &amp;quot;NL bestätigt&amp;quot;)&lt;br /&gt;
  userGroupAfterConfirmation = 2&lt;br /&gt;
  // Seite mit Login Form&lt;br /&gt;
  loginPID = 88&lt;br /&gt;
  // Seite mit Registierung&lt;br /&gt;
  registerPID = 89&lt;br /&gt;
  // Seite zum editieren der Benutzerdaten&lt;br /&gt;
  editPID = 90&lt;br /&gt;
  // Seite mit Bestätigung der Registrierung&lt;br /&gt;
  confirmPID = 91&lt;br /&gt;
  // Wieviel Bilder dürfen hochgeladen werden&lt;br /&gt;
  maxImages = 1&lt;br /&gt;
  dateFormat = d.m.Y&lt;br /&gt;
  dateSplit = .&lt;br /&gt;
  salutation = informal&lt;br /&gt;
  siteName = KO rockt!  &lt;br /&gt;
  formFields = password,first_name, last_name, email,module_sys_dmail_html, module_sys_dmail_category,disable&lt;br /&gt;
  requiredFields = first_name,last_name,email&lt;br /&gt;
  email = steff@ko-rockband.de&lt;br /&gt;
  // nur mit RealURL ?&lt;br /&gt;
  useShortUrls = 1&lt;br /&gt;
  // Kategorien von Direct Mail&lt;br /&gt;
  module_sys_dmail_category_PIDLIST = 86&lt;br /&gt;
  //&lt;br /&gt;
  dmailCheckedUponRegistration = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Sprachlabel anpassen&lt;br /&gt;
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de{&lt;br /&gt;
  v_really_wish_to_delete_informal = Willst Du Dein Konto wirklich löschen?&lt;br /&gt;
  v_your_account_was_created_informal = Dein Konto &amp;lt;strong&amp;gt;%2$s&amp;lt;/strong&amp;gt; wurde erstellt. Wir senden eine E-Mail an die Adresse &amp;lt;strong&amp;gt;%4$s&amp;lt;/strong&amp;gt;, damit Du die Anmeldung bestätigen kannst.&lt;br /&gt;
}&lt;br /&gt;
// Titel der Benutzerseite überschreiben (wird in E-Mails benutzt)&lt;br /&gt;
plugin.tx_srfeuserregister_pi1.pidTitleOverride = KO rockt! Newsletter&lt;br /&gt;
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de.username = E-Mail Adresse&lt;br /&gt;
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de.v_your_account_was_created = Hallo %3$s, du hast eben unseren kostenlosen Newsletter bestellt. Um den Missbrauch Ihrer Adresse durch Dritte zu vermeiden, bitten wir Dich daher, das Newsletter-Abonnement zu bestätigen. Dazu haben wir dir eine E-Mail an die Adresse %2$s geschickt. In dieser Mail befindet sich ein Link zum Bestätigen der Anmeldung. &amp;lt;br /&amp;gt;&lt;br /&gt;
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de.v_follow_instructions1 =&lt;br /&gt;
#plugin.tx_directmail_pi1.10.template.file = fileademin/templates/ext/newsletter-textversion.tmpl&lt;br /&gt;
/*&lt;br /&gt;
plugin.tx_directmail_pi1.10 {&lt;br /&gt;
marks.RCONTENT &amp;lt; styles.content.getRight&lt;br /&gt;
marks.RCONTENT.renderObj = &amp;lt; plugin.tx_directmail_pi1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
lib.alt_plaintext.renderObj.siteUrl = http://www.ko-rockband.de/&lt;br /&gt;
tx_directmail_pi1.10.marks.RCONTENT &amp;lt; tx_directmail_pi1.10.marks.CONTENT&lt;br /&gt;
tx_directmail_pi1.10.marks.RCONTENT.select.where = colPos=2&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#plugin.tx_srfeuserregister_pi1.salutation = informal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
TypoScript Newsletter (direct_mail)&lt;br /&gt;
&lt;br /&gt;
== weiteres Tutorial ==&lt;br /&gt;
Basiert auf: &lt;br /&gt;
&lt;br /&gt;
 Tutorials und Artikel  / Typo3  / Einrichtung eines Newsletters mit Direct Mail&lt;br /&gt;
Einrichtung eines Newsletters mit Direct Mail&lt;br /&gt;
&lt;br /&gt;
Um einen Newsletter mit Direct mail unter Typo3 4.0 einzurichten, bedarf es nur wenige Schritte. In diesem Tutorial möchte ich die Vorgehensweise beschreiben, auf Sonderfälle gehe ich nicht ein, es sollte jedem möglich sein, anhand der Beschreibung einen solchen Newsletter auf den eigenen Seiten einzubinden.&lt;br /&gt;
Benötigte Extensions&lt;br /&gt;
&lt;br /&gt;
Diese Extensions werden benötigt und sollten, wenn noch nicht vorhanden, über den Extension-manager installiert werden.&lt;br /&gt;
&lt;br /&gt;
    * Address list (tt_address)&lt;br /&gt;
    * Direct Mail (direct_mail) &lt;br /&gt;
    * Direct Mail Subscription (direct_mail_subscription) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Als erstes legen wir &amp;#039;&amp;#039;&amp;#039;2 Systemordner&amp;#039;&amp;#039;&amp;#039; an, die sich auf der rootline befinden. Dadurch greift das Template der root-Seite nicht und wir sind unabhängig von dem Rest der Seite. In meinem Fall hat der Sysordner Newsletter die PID 147 und der Sysordner Abonnoments die PID 148.  Wir bearbeiten die Seinteneigenschaften des Sysordners Newsletter und geben unter &amp;quot;Enthält Erweiterung&amp;quot; direct mail an.&lt;br /&gt;
&lt;br /&gt;
Man kann die Ordner auch woanders hinlegen und das root-Template einfach mit einem neuen root Template überschreiben bzw dessen eigenschaften mit den clear Häkchen löschen.&lt;br /&gt;
&lt;br /&gt;
 Newsletter/&lt;br /&gt;
 Abonnements/&lt;br /&gt;
&lt;br /&gt;
Wir benötigen noch eine Seite, auf der die User sich für den Newsletter anmelden können. Hierzu erstellen wir in unserem Seitenbaum eine Seite und fügen auf ihr das Inhaltselement &amp;quot;Plugin / Direct Mail Anmeldung&amp;quot; ein. Als Ausgangspunkt wählen wir unseren Sysordner Abonnements, in dem die Anmeldungen gesammelt werden sollen.&lt;br /&gt;
Template Anpassungen&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir unser root-Template vervollständigen. Hierzu legen wir auf unserem SysOrdner Newsletter ein neues Template an &amp;quot;Create template for a new site&amp;quot;. Wir benennen es und binden folgende Module ein:&lt;br /&gt;
&lt;br /&gt;
Das Modul content(default) und plugin.alt.plaintext(99) wird benötigt, um den Inhalt für die Plain Text-Emails zu generieren, für die HTML-Ausgabe nehmen wir wie gewohnt die css_styled_content.&lt;br /&gt;
&lt;br /&gt;
Unserem root-Template müssen wir auch noch einige Angaben hinzufügen. Vorerst kopieren wir das Template für die Newsletteranmeldung (typo3conf/ext/direct_mail_subscription/pi/fe_admin_dmailsubscrip.tmpl) nach fileadmin/templates/newsletter_subscription.html, so das wir es später bearbeiten können.&lt;br /&gt;
&lt;br /&gt;
Wir gehen auf unser root-Template und wählen im Constants-Editor die Seite PLUGIN.FEADMIN.DMAILSUBSCRIPTION und wählen die Einträge&lt;br /&gt;
Administration email, Administration name und Record PID.&lt;br /&gt;
Wir ergänzen die email-Angaben und unter Record PID geben wir unseren SysOrdner Abonnoments an (in meinem Fall 148) - hierdurch werden die Anmeldungen auch in diesem SysOrdner gespeichert.&lt;br /&gt;
&lt;br /&gt;
Anschliessend öffnen wir Constants unter Info/Modify und ergänzen die Angabe unseres Templatefiles:&lt;br /&gt;
 plugin.feadmin.dmailsubscription.file.templateFile = fileadmin/templates/newsletter_subscription.html&lt;br /&gt;
&lt;br /&gt;
In diesem Zuge können wir auch das Template in einem Editor bearbeiten und entsprechend anpassen.&lt;br /&gt;
&lt;br /&gt;
Wir sind nun mit den Vorbereitungen fertig und melden uns probeweiser beim Newsletter an. Es müsste ein neuer Datensatz im SysOrdner Abonnoments gelandet sein, der versteckt ist - wenn wir unsere Email erhalten haben und auf den Aktivierungslink geklickt haben, so wird der Datensatz sichtbar.&lt;br /&gt;
Newsletter einrichten&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir unseren ersten Newsletter einrichten. Die Newsletter sind ganz normale Typo3-Seiten, die in unserem SysOrdner Newsletter landen. Hier brauchen wir noch ein paar ergänzende Angaben in unserem Template des SysOrdners Newsletter, damit auch die Inhalte angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall nehmen wir ein einfaches Typoscript-Template, hier kann jeder natürlich die Ausgabe so stylen, wie er gerne möchte. In diesem Beispiel sieht das Template so aus:&lt;br /&gt;
TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page = PAGE&lt;br /&gt;
&lt;br /&gt;
page.headerData.10=TEXT&lt;br /&gt;
page.headerData.10.value (&lt;br /&gt;
style type=text/css&lt;br /&gt;
* {margin:0;padding:0;}&lt;br /&gt;
body {background: #eee;}&lt;br /&gt;
div#main {padding:12px;}&lt;br /&gt;
/style&lt;br /&gt;
)&lt;br /&gt;
page.bodyTag=body&lt;br /&gt;
page.10  styles.content.get - ERROR: Line 12: Object Name String, &amp;quot;page.10&amp;quot; was not preceded by any operator, =&amp;lt;&amp;gt;({&lt;br /&gt;
page.10.wrap = divimg src=fileadmin/images/newsletterheader.gif/divdiv id=main|/div&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem wir das Template gespeichert haben, klicken wir unter Web auf den Direct Mail-Link. Wir sehen unseren SysOrdner Newsletter, den wir anklicken. Dann klicken wir auf den Link &amp;quot;Klicken Sie hier, um eine neue Typo3-Seite, die Sie später als Newsletter verschicken können, anzulegen. &amp;quot;. Wir benennen die Seite und speichern sie. Nun legen wir noch ein bischen Inhalt auf der Seite an und lassen sie anzeigen, um unser Template zu überprüfen. Wenn alles glatt gelaufen ist, sehen wir unseren ersten Newsletter.&lt;br /&gt;
&lt;br /&gt;
Nun können wir unseren Newsletter versenden. Wir wählen wieder Web&amp;gt;Direct Mail. Unter Modulkonfiguration ändern wir noch die Einstellungen wie gewünscht. Wir  erstellen unter Empfängerliste eine neue Versandgruppe. Unter Tabellen klicken wir Adresse an, da wir ja tt_address für unsere Adressen benutzen. Wir sehen, das es da noch weitere Optionen gibt.&lt;br /&gt;
&lt;br /&gt;
Nun erstellen wir unseren Newsletter anhand unserer Seite. Wir haben nun viele Optionen zum versenden, wir können ihn zuerst als Testmail an uns selbst verschicken, um alles zu überprüfen. Wir sollten uns mit den einzelnen Menüpunkten von DirectMail vertraut machen,  es ist alles gut erklärt und somit verständlich.&lt;br /&gt;
&lt;br /&gt;
Unserem Newsletter steht nun nichts mehr im Weg, viel Spass!&lt;br /&gt;
Bugfix&lt;br /&gt;
&lt;br /&gt;
Bei einigen Konfigurationen ergibt sich ein Problem mit den Plain Text - Mails. Hier wird als Content nur eine 1 erzeugt, und der Plain-Letter wird erst richtig erzeugt, wenn man den FE-Cache löscht.&lt;br /&gt;
Sollte dieses Problem auftauchen, so kann man den Code von direct mail modifizieren, um das Verhalten zu ändern. Folgende Zeile muss in der Datei direct_mail/mod/class.web_mod_dmail.php auskommentiert werden (Zeile 3916):&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
 // $this-tmpl-forceTemplateParsing = 1; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle: sk-typo3 · Steffen Kamper · 2006     last Update:Wednesday, 22.07.2009&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Newsletter_mit_Direct_Mail&amp;diff=1955</id>
		<title>Newsletter mit Direct Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Newsletter_mit_Direct_Mail&amp;diff=1955"/>
		<updated>2010-04-21T06:47:03Z</updated>

		<summary type="html">&lt;p&gt;91.47.238.180: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quickstart ==&lt;br /&gt;
=== Extensions ===&lt;br /&gt;
* tt_address &lt;br /&gt;
* direct_mail (Newsletterversand)&lt;br /&gt;
* sr_feuser_register oder direct_mail_subscriptionoder oder sr_email_subscribe o.ä. (Frontend User Anmeldung)&lt;br /&gt;
* für sr_feuser_register werden weitere extensions benötigt (siehe [[Typo3 - Benutzer Registrierung (sr_feuser_register)]])&lt;br /&gt;
=== Ordner ===&lt;br /&gt;
Für sr_feuser_subscribe kann bei neueren Versionen das meiste im default mode gemacht werden, einige Seiten bieten sich denoch an, weil man auch schöne Infotexte mit reinbauen kann.&lt;br /&gt;
* Newsletter/ (sr_feuser_register_pi in default mode, Login)&lt;br /&gt;
** Registrierung/ (sr_feuser_register in register Mode), hide at login, hide in menu&lt;br /&gt;
** Registrierung bestätigt/ (sr_feuser_register in default oder setfixed mode) hide in menu &lt;br /&gt;
** Benutzerdaten bearbeiten/ (sr_feuser_register in edit oder default mode) hide in Menu, access alle oder bestimmte Benutzer.&lt;br /&gt;
&lt;br /&gt;
Für direct_mail&lt;br /&gt;
&lt;br /&gt;
* Newsletter/&lt;br /&gt;
Seiteneigenschaften enthält &amp;#039;&amp;#039;&amp;#039;Plugin direct_mail&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Neues Root-Template&amp;#039;&amp;#039;&amp;#039; auf Newsletter (alles clearen) &amp;#039;&amp;#039;&amp;#039;includes&amp;#039;&amp;#039;&amp;#039;: content(default), plugin.alt.plaintext(99) und css_styled_content. (Update es gibt auch direct mail plaintext und direct mail news plaintext)&lt;br /&gt;
** Abonnements/ (enthält die Benutzer)&lt;br /&gt;
&lt;br /&gt;
=== User Registrierung ===&lt;br /&gt;
direct_mail kann seine Adressen aus verschiedenen Datenquellen beziehen. Oft nimmt man dazu die fe_user oder tt_address&lt;br /&gt;
=== Bei Verwendung von direct_mail_subscription ===&lt;br /&gt;
* Konstanten anpassen (Constants Editor) für direct_mail_subscription (Admin Email, Name und Record PID auf Abonnement Ordner setzen)&lt;br /&gt;
* Anmelde Template nach fileadmin und anpassen&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== bei sr_feuser_register ===&lt;br /&gt;
Ist meiner Ansicht nach das bessere Tool um Benutzer (wofür auch immer) über das Frontend zu registrieren.&lt;br /&gt;
&lt;br /&gt;
Beachten:&lt;br /&gt;
* Kategorie für dmail muß gesetzt sein sonst wird später nichts versandt. (Geht evtl auch als verstecktes Feld?&lt;br /&gt;
* Todo: Testen ob nicht Abo nutzer auch Mails kriegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Infos dazu:&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Benutzer Registrierung (sr_feuser_register)]]&lt;br /&gt;
&lt;br /&gt;
=== bei sr_email_subscribe ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== direct_mail ===&lt;br /&gt;
* Versendet Direktmails, oder Seiten (extern intern)&lt;br /&gt;
* Kategorien werden auf Content Elemente gelegt&lt;br /&gt;
* Template für PlainText (Type 99) nicht vergessen. &lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
== Muster ==&lt;br /&gt;
Seitenbaum für Registrierung (sr_feuser_register)&lt;br /&gt;
&lt;br /&gt;
Seitenbaum für Newsletter (direct_mail)&lt;br /&gt;
&lt;br /&gt;
TypoScript Registrierung (sr_feuser_register)&lt;br /&gt;
&lt;br /&gt;
TypoScript Newsletter (direct_mail)&lt;br /&gt;
&lt;br /&gt;
== weiteres Tutorial ==&lt;br /&gt;
Basiert auf: &lt;br /&gt;
&lt;br /&gt;
 Tutorials und Artikel  / Typo3  / Einrichtung eines Newsletters mit Direct Mail&lt;br /&gt;
Einrichtung eines Newsletters mit Direct Mail&lt;br /&gt;
&lt;br /&gt;
Um einen Newsletter mit Direct mail unter Typo3 4.0 einzurichten, bedarf es nur wenige Schritte. In diesem Tutorial möchte ich die Vorgehensweise beschreiben, auf Sonderfälle gehe ich nicht ein, es sollte jedem möglich sein, anhand der Beschreibung einen solchen Newsletter auf den eigenen Seiten einzubinden.&lt;br /&gt;
Benötigte Extensions&lt;br /&gt;
&lt;br /&gt;
Diese Extensions werden benötigt und sollten, wenn noch nicht vorhanden, über den Extension-manager installiert werden.&lt;br /&gt;
&lt;br /&gt;
    * Address list (tt_address)&lt;br /&gt;
    * Direct Mail (direct_mail) &lt;br /&gt;
    * Direct Mail Subscription (direct_mail_subscription) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Als erstes legen wir &amp;#039;&amp;#039;&amp;#039;2 Systemordner&amp;#039;&amp;#039;&amp;#039; an, die sich auf der rootline befinden. Dadurch greift das Template der root-Seite nicht und wir sind unabhängig von dem Rest der Seite. In meinem Fall hat der Sysordner Newsletter die PID 147 und der Sysordner Abonnoments die PID 148.  Wir bearbeiten die Seinteneigenschaften des Sysordners Newsletter und geben unter &amp;quot;Enthält Erweiterung&amp;quot; direct mail an.&lt;br /&gt;
&lt;br /&gt;
Man kann die Ordner auch woanders hinlegen und das root-Template einfach mit einem neuen root Template überschreiben bzw dessen eigenschaften mit den clear Häkchen löschen.&lt;br /&gt;
&lt;br /&gt;
 Newsletter/&lt;br /&gt;
 Abonnements/&lt;br /&gt;
&lt;br /&gt;
Wir benötigen noch eine Seite, auf der die User sich für den Newsletter anmelden können. Hierzu erstellen wir in unserem Seitenbaum eine Seite und fügen auf ihr das Inhaltselement &amp;quot;Plugin / Direct Mail Anmeldung&amp;quot; ein. Als Ausgangspunkt wählen wir unseren Sysordner Abonnements, in dem die Anmeldungen gesammelt werden sollen.&lt;br /&gt;
Template Anpassungen&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir unser root-Template vervollständigen. Hierzu legen wir auf unserem SysOrdner Newsletter ein neues Template an &amp;quot;Create template for a new site&amp;quot;. Wir benennen es und binden folgende Module ein:&lt;br /&gt;
&lt;br /&gt;
Das Modul content(default) und plugin.alt.plaintext(99) wird benötigt, um den Inhalt für die Plain Text-Emails zu generieren, für die HTML-Ausgabe nehmen wir wie gewohnt die css_styled_content.&lt;br /&gt;
&lt;br /&gt;
Unserem root-Template müssen wir auch noch einige Angaben hinzufügen. Vorerst kopieren wir das Template für die Newsletteranmeldung (typo3conf/ext/direct_mail_subscription/pi/fe_admin_dmailsubscrip.tmpl) nach fileadmin/templates/newsletter_subscription.html, so das wir es später bearbeiten können.&lt;br /&gt;
&lt;br /&gt;
Wir gehen auf unser root-Template und wählen im Constants-Editor die Seite PLUGIN.FEADMIN.DMAILSUBSCRIPTION und wählen die Einträge&lt;br /&gt;
Administration email, Administration name und Record PID.&lt;br /&gt;
Wir ergänzen die email-Angaben und unter Record PID geben wir unseren SysOrdner Abonnoments an (in meinem Fall 148) - hierdurch werden die Anmeldungen auch in diesem SysOrdner gespeichert.&lt;br /&gt;
&lt;br /&gt;
Anschliessend öffnen wir Constants unter Info/Modify und ergänzen die Angabe unseres Templatefiles:&lt;br /&gt;
 plugin.feadmin.dmailsubscription.file.templateFile = fileadmin/templates/newsletter_subscription.html&lt;br /&gt;
&lt;br /&gt;
In diesem Zuge können wir auch das Template in einem Editor bearbeiten und entsprechend anpassen.&lt;br /&gt;
&lt;br /&gt;
Wir sind nun mit den Vorbereitungen fertig und melden uns probeweiser beim Newsletter an. Es müsste ein neuer Datensatz im SysOrdner Abonnoments gelandet sein, der versteckt ist - wenn wir unsere Email erhalten haben und auf den Aktivierungslink geklickt haben, so wird der Datensatz sichtbar.&lt;br /&gt;
Newsletter einrichten&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir unseren ersten Newsletter einrichten. Die Newsletter sind ganz normale Typo3-Seiten, die in unserem SysOrdner Newsletter landen. Hier brauchen wir noch ein paar ergänzende Angaben in unserem Template des SysOrdners Newsletter, damit auch die Inhalte angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall nehmen wir ein einfaches Typoscript-Template, hier kann jeder natürlich die Ausgabe so stylen, wie er gerne möchte. In diesem Beispiel sieht das Template so aus:&lt;br /&gt;
TypoScript&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page = PAGE&lt;br /&gt;
&lt;br /&gt;
page.headerData.10=TEXT&lt;br /&gt;
page.headerData.10.value (&lt;br /&gt;
style type=text/css&lt;br /&gt;
* {margin:0;padding:0;}&lt;br /&gt;
body {background: #eee;}&lt;br /&gt;
div#main {padding:12px;}&lt;br /&gt;
/style&lt;br /&gt;
)&lt;br /&gt;
page.bodyTag=body&lt;br /&gt;
page.10  styles.content.get - ERROR: Line 12: Object Name String, &amp;quot;page.10&amp;quot; was not preceded by any operator, =&amp;lt;&amp;gt;({&lt;br /&gt;
page.10.wrap = divimg src=fileadmin/images/newsletterheader.gif/divdiv id=main|/div&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nachdem wir das Template gespeichert haben, klicken wir unter Web auf den Direct Mail-Link. Wir sehen unseren SysOrdner Newsletter, den wir anklicken. Dann klicken wir auf den Link &amp;quot;Klicken Sie hier, um eine neue Typo3-Seite, die Sie später als Newsletter verschicken können, anzulegen. &amp;quot;. Wir benennen die Seite und speichern sie. Nun legen wir noch ein bischen Inhalt auf der Seite an und lassen sie anzeigen, um unser Template zu überprüfen. Wenn alles glatt gelaufen ist, sehen wir unseren ersten Newsletter.&lt;br /&gt;
&lt;br /&gt;
Nun können wir unseren Newsletter versenden. Wir wählen wieder Web&amp;gt;Direct Mail. Unter Modulkonfiguration ändern wir noch die Einstellungen wie gewünscht. Wir  erstellen unter Empfängerliste eine neue Versandgruppe. Unter Tabellen klicken wir Adresse an, da wir ja tt_address für unsere Adressen benutzen. Wir sehen, das es da noch weitere Optionen gibt.&lt;br /&gt;
&lt;br /&gt;
Nun erstellen wir unseren Newsletter anhand unserer Seite. Wir haben nun viele Optionen zum versenden, wir können ihn zuerst als Testmail an uns selbst verschicken, um alles zu überprüfen. Wir sollten uns mit den einzelnen Menüpunkten von DirectMail vertraut machen,  es ist alles gut erklärt und somit verständlich.&lt;br /&gt;
&lt;br /&gt;
Unserem Newsletter steht nun nichts mehr im Weg, viel Spass!&lt;br /&gt;
Bugfix&lt;br /&gt;
&lt;br /&gt;
Bei einigen Konfigurationen ergibt sich ein Problem mit den Plain Text - Mails. Hier wird als Content nur eine 1 erzeugt, und der Plain-Letter wird erst richtig erzeugt, wenn man den FE-Cache löscht.&lt;br /&gt;
Sollte dieses Problem auftauchen, so kann man den Code von direct mail modifizieren, um das Verhalten zu ändern. Folgende Zeile muss in der Datei direct_mail/mod/class.web_mod_dmail.php auskommentiert werden (Zeile 3916):&lt;br /&gt;
PHP&lt;br /&gt;
&lt;br /&gt;
 // $this-tmpl-forceTemplateParsing = 1; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle: sk-typo3 · Steffen Kamper · 2006     last Update:Wednesday, 22.07.2009&lt;/div&gt;</summary>
		<author><name>91.47.238.180</name></author>
	</entry>
</feed>