eID bzw. AJAX-Beispiele
Ich zeige Euch nun ein paar Beispiele, wie Ihr AJAX Dank eID ans Laufen bekommt. Bitte berücksichtigt, dass ich hier die TYPO3 Version 4.3 verwende und meine Beispiele nicht unbedingt auch auf TYPO3 4.2 basierenden Systemen laufen müssen.
In meinen Beispielen verwende ich die AJAX-Funktionalität von jQuery. Eine gute Schnittstelle zwischen TYPO3 und jQuery ist meine Extension sfjquery. Damit nicht jedesmal die Seite neu geladen werden muss, habe ich mich in den folgenden Beispielen dazu entschieden einen anklickbaren HTML-Tag einzubinden, der dann eine alert-Box aufruft.
Um die Beispiele durchführen zu können müsst Ihr die vorbereitenden Maßnahmen dieser Seite erfüllen.
Beispiel: fixer Text
Dieses Beispiel baut im Hintergrund der aktuellen Seite eine Verbindung mit Eurem Server auf und ruft dort die ajax.php auf. Diese Datei enthält ein einfaches echo mit festem Inhalt, den wir uns nun über einen Klick auf unser HTML-Element ausgeben lassen wollen.
Dazu muss zu erst die ajax.php mit entsprechendem Inhalt gefüllt werden:
ajax.php:
<?php
echo 'Hallo alle miteinander';
?>
Füllt folgende Felder meiner Extension sfjquery:
HTML:
<div id="ajax">Klick mich</div>
domscript:
$('#ajax').click(function() {
$.post('index.php?eID=sfajax', function(data) {
alert(data);
});
});
Beispiel: Variable übergeben
In diesem Beispiel wollen wir unserer ajax.php eine Variable übergeben. Der Inhalt dieser Variable soll von der ajax.php zurückgeliefert werden und dann in der alert-Box wieder angezeigt werden.
Dazu muss zu erst die ajax.php mit entsprechendem Inhalt gefüllt werden:
ajax.php
<?php
echo t3lib_div::_GP('variable');
?>
Folgende Felder füllen wir in der sfjquery:
HTML:
<div id="ajax">Klick mich</div>
domscript
$('#ajax').click(function() {
$.post('index.php?eID=sfajax', {variable:'Hallo zusammen'}, function(data) {
alert(data);
});
});
Beispiel: Inhalt von HTML-Tag
In diesem Beispiel wollen wir unserer ajax.php den Text eines HTML-Tags übergeben. Der Inhalt dieser Variable wird von der ajax.php zurückgeliefert und dann in der alert-Box wieder angezeigt.
Dazu muss zu erst die ajax.php mit entsprechendem Inhalt gefüllt werden:
ajax.php
<?php
echo t3lib_div::_GP('variable');
?>
Folgende Felder füllen wir in der sfjquery:
HTML:
<div id="ajax">Klick mich und dieser Text wird zu unserer ajax.php gesendet</div>
domscript
$('#ajax').click(function() {
$.post('index.php?eID=sfajax', {variable:$('div#ajax').text()}, function(data) {
alert(data);
});
});
Beispiel: Datenbank
In diesem Beispiel will ich Euch zeigen, wie Ihr einen Wert aus der Datenbank zurückbekommen könnt. Ausgegeben wird der Wert wieder in unserer Alert-Box.
Dazu muss zu erst die ajax.php mit entsprechendem Inhalt gefüllt werden:
ajax.php
<?php
$GLOBALS['TYPO3_DB']->connectDB();
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( 'username', 'fe_users', 'disable = 0 AND usergroup=1', '','','1');
$row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
echo 'Benutzername: '.$row[0];
?>
Folgende Felder füllen wir in der sfjquery:
HTML:
<div id="ajax">Klick mich</div>
domscript
$('#ajax').click(function() {
$.post('index.php?eID=sfajax', function(data) {
alert(data);
});
});
Beispiel: FE-User
Dieses Beispiel ist ähnlich dem Beispiel von der Datenbank. Voraussetzung für dieses Beispiel ist, dass du auf meiner Seite angemeldet sein musst. Das ist aber kein Thema: Ich hab für Euch den User: ajax-testuser mit dem Passwort: trallalablabla eingerichtet. Damit könnt Ihr Euch auf meiner Seite einloggen. Im Gegensatz zu dem Datenbank-Beispiel holen wir uns hier die Daten nicht aus der Datenbank, sondern aus dem $GLOBALS['TSFE']-Array.
Dazu muss zu erst die ajax.php mit entsprechendem Inhalt gefüllt werden:
ajax.php
<?
$TSFE = t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS);
$TSFE->connectToDB();
$TSFE->initFEuser();
if($GLOBALS['TSFE']->fe_user->user['username'] == '') {
echo 'Sie sind nicht angemeldet';
}else {
echo 'Username: '.$GLOBALS['TSFE']->fe_user->user['username'];
}
?>
HTML:
<div id="ajax">Klick mich</div>
domscript
$('#ajax').click(function() {
$.post('index.php?eID=sfajax', function(data) {
alert(data);
});
});
Beispiel: Cacheproblem
Wie Ihr oben gelesen habt, könnt Ihr Datenbankabfragen machen. Natürlich könnt Ihr auf dem gleichen Weg auch Daten abspeichern. Das wird funktionieren, hat aber ein Problem:
Nachdem Eure Daten gespeichert wurden ist NICHT gleichzeitig auch der Seitencache geleert und neu aufgebaut. Soll heißen: Die Daten sind zwar gespeichert, aber auf der Seite erscheinen immer noch die alten Daten, Bilder, ...
Eigentlich gibt es nur eine Lösung für das Problem. "Eigentlich" deshalb, weil ich das Deaktivieren des Caches "no cache" in den Seiteneigenschaften der Seite für den falschen Ansatz empfinde. Demnach bleibt nur noch die Verwendung von generatePage_preProcessing() übrig
ajax.php
<?php
$TSFE = t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS);
$TSFE->connectToDB();
$TYPO3_DB->exec_insertQuery(blablabla);
$TSFE->generatePage_preProcessing();
echo 'Ihre Daten wurden erfolgreich gespeichert und der Cache dieser Seite neu aufgebaut.';
?>
Beispiel: TypoLink
Ich habe über mein Kontaktformular die Frage erhalten, wie man denn über die ajax.php einen TypoLink erzeugen kann und tatsächlich...sehr einfach war das nicht gerade.
Ich hab mir dazu mal den Quellcode von der TypoLink-Funktion angeschaut und hab festgestellt, dass dort unteranderem auch auf das TypoScript von meinem Template zugegriffen wird und dass die PageID benötigt wird. Unsere ajax.php besitzt aber gar keine PageID! Also habe ich unserer ajax.php die PageID mitgegeben, von der aus ich die ajax.php aufrufe (in meinem Fall die 154). Weiter unten fülle ich mit getConfigArray die TypoScriptvariable auf und so kann dann auch die Funktion TypoLink endlich auf den config-Bereich meines Templates zugreifen.
Dazu muss zu erst die ajax.php mit entsprechendem Inhalt gefüllt werden:
ajax.php
<?
$TSFE = t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS, 154);
$TSFE->connectToDB();
$TSFE->initFEuser();
$TSFE->checkAlternativeIdMethods();
$TSFE->clear_preview();
$TSFE->determineId();
$TSFE->initTemplate();
$TSFE->getConfigArray();
$conf['parameter'] = '3';
$cObj = t3lib_div::makeInstance('tslib_cObj');
echo $cObj->typoLink('Ich bin ein von PHP generierter Link zu einer anderen Seite', $conf);
?>
HTML:
<div id="ajax">Klick mich</div>
<div id="typolink"></div>
domscript
$('#ajax').click(function() {
$.post('index.php?eID=sfajax', function(data) {
$('#typolink').html(data);
});
});





