Feb 08

Wenn man mittels AJAX Daten von TYPO3 laden möchte, stößt man auf das Problem, dass TYPO3 grundsätzlich immer das Template rendert und somit eine Ausgabe von reinen Daten (z.B. XML oder JSON) nicht ohne weiteres möglich ist. Da aber die Ausgabe von reinen Daten (ohne Template) des Öfteren benötigt wird, stellt TYPO3 bereits ein Feature namens eID bereit. Sobald in der URL der Parameter eID vorkommt, wird eine alternative Rendering-Engine benutzt und es kann eine reine Daten-Ausgabe mit PHP erzeugt werden, ohne auf die gewohnten Funktionen aus dem TYPO3-Framework verzichten zu müssen.

Um dieses Feature nutzen zu können, muss man wie folgt vorgehen (analog zu TYPO3 CLI):

  1. Erstellen eines Ordners namens “eid” im Ordner der Extension (z.B. in “typo3conf/ext/extensionkey/”)
  2. Erstellen einer Datei (z.B. “class.tx_extensionkey_eid.php” – Name grundsätzlich egal) im in Schritt 1 erstellten Ordner “eid” mit dem Inhalt [1]
  3. Erstellen (sofern noch nicht vorhanden) der Datei “ext_localconf.php” im Ordner der Extension (z.B. in “typo3conf/ext/extensionkey/”) mit dem Inhalt [2] (vorhandenen Inhalt nicht überschreiben, sondern nur hinzufügen)
  4. Aufrufen des Skripts (z.B. “http://localhost/?eID=extensionkey”)

[1]:

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2009 Your name <email@example.com>
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
if (!defined ('PATH_typo3conf')) 	die ('Access denied: eID only.');
require_once(PATH_tslib . 'class.tslib_pibase.php');

class tx_selfadmin_eid extends tslib_pibase {
	var $prefixId      = 'tx_extensionkey_eid';		// Same as class name
	var $scriptRelPath = 'eid/class.tx_extensionkey_eid.php';	// Path to this script relative to the extension dir.
	var $extKey        = 'extensionkey';	// The extension key.

	function eid_main() {
		$GLOBALS['TSFE']->fe_user = tslib_eidtools::initFeUser();
		tslib_eidtools::connectDB();
		var_dump($GLOBALS['TSFE']->fe_user);
	}
}

$extensionkey = t3lib_div::makeInstance('tx_extensionkey_eid');
$extensionkey->eid_main();

?>

Möchte man in diesem Skript nun auf Funktionen (z.B. Datenbank) aus dem TYPO3-Framework zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei “typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php” findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).

[2]:

<?php
  ## Adding alternative output engine to eID mechanism
$TYPO3_CONF_VARS['FE']['eID_include'][$_EXTKEY] = 'EXT:'.$_EXTKEY.'/eid/class.tx_extensionkey_eid.php';
?>


Verwandte Beiträge

2 Kommentare to “TYPO3 eID oder Daten mit AJAX anfordern”

  1. Zwergnase:

    Ich hatte ebenfalls das Problem, dass ich eine Ausgabe völlig ohne HTML-Tags und Metadaten benötigte. Nach einer lang ausgedehnten Suche bin ich allerdings auf folgende Typoscript-Konfiguration gekommen. Wenn per URL der Parameter ajax=1 eingegeben wird, wird die komplette Page-Konfiguration gelöscht und nur die Ausgabe der Extension “tx_irgendeineextension_pi1″ findet statt.

    [globalVar = GP:ajax > 0]
    config.disableAllHeaderCode = 1
    page >
    page = PAGE
    page {
    typeNum = 0
    10 < plugin.tx_irgendeineextension_pi1
    }
    [global]

    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.

    Gruß, Zwergnase

  2. Gernot Leitgab:

    @Zwergnase:
    Siehe hierfür auch Benutzerdefinierten Page-Type für TemplaVoilà Sub-Template festlegen

Kommentar schreiben