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):
- Erstellen eines Ordners namens “eid” im Ordner der Extension (z.B. in “typo3conf/ext/extensionkey/”)
- 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]
- 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)
- 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
- Backend-Layout von TemplaVoila anpassen
- TypoScript-Condition mit eigener Funktion (userFunc)
- TYPO3 CLI-Fehler bei PHP-CGI
- Erstellen und zur Verfügung stellen von Sitemaps (sitemap.xml)
- pdf_generator2 benutzt CSS nicht
17. Juni 2009 - 15:26
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
17. Juni 2009 - 15:57
@Zwergnase:
Siehe hierfür auch Benutzerdefinierten Page-Type für TemplaVoilà Sub-Template festlegen