Hallo Community,
ich muss für eine selbst entwickelte Extension eine XML Schnittstelle für weitere TYPO3 Projekte erstellen. Dabei sollen andere Seiten per XML Daten anfragen können.
Die Eigentlich Extension funktioniert auch soweit. Nun haperts aber bei der eigentlichen XML Ausgabe.
Ich habe mir gedacht, ich erstelle per TS eine typenum und führe dann die Ausgabe durch meine Extension aus.
XML = PAGE
#neuen PageTyp für XML anlegen
XML.typeNum = 2
XML.config {
#entfernt diverse header angaben
disableAllHeaderCode = 1
#standard doctype deaktivieren
disableCharsetHeader = 1
#entfern die HTML Kommentare
disablePrefixComment = 1
#lege eigenen doctype an
additionalHeaders = Content-Type: text/xml;charset=utf8
#xml prolog anlegen
xmlprologue = <?xml version="1.0" encoding="UTF-8"?>
}
XML.10 = USER_INT
XML.10.userFunc = tx_fonds_pi1->renderXML
function renderXML($content, $conf) {
echo 'test';
}
Es kommt:
XML-Verarbeitungsfehler: Kein Element gefunden
hmm..., ich steh grad total auf dem schlauch. Auch
XML.10.userFunc = tx_fonds_pi1->main
zeigt keine Wirkung. Kann es sein, das meine ext gar nicht erst angesprochen wird?
Danke für Unterstützung.
Gruß Manfred
Hallo Manfred.
XML verzeiht viiiel weniger Syntaxfehler als (X)HTML. Der Hinweis "Kein Element gefunden" stellt die Frage, was denn ein XML-Element ist? Deine Ausgabe produziert im Moment:
<?xml version="1.0" encoding="UTF-8"?>
test
Das ist aber kein XML. Da fehlt bisschen was:
<?xml version="1.0" encoding="UTF-8"?>
<testelement>test</testelement>
Das sollte das Problem lösen.
Viele Grüße
Julian
Nein, leider nicht...
function main($content, $conf) {
$this->local_cObj = t3lib_div::makeInstance('tslib_cObj'); // Local cObj.
$this->conf=$conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
$this->pi_USER_INT_obj=1;
$GLOBALS['TSFE']->set_no_cache();
$this->conf['templateFile'] ? $this->template = $this->cObj->fileResource($this->conf['templateFile']) : $this->template = $this->cObj->fileResource('EXT:fonds/res/template.html');
$this->pi_initPIflexForm();
$flexConf=array();
$flexConf['anzeige'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'anzeige', 'sDEF');
$flexConf['ausgangspunkt'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'ausgangspunkt', 'sDEF');
$this->flexConf = $flexConf;
switch($flexConf['anzeige']) {
case 'liste':
$content = $this->listView($content, $conf, $this->flexConf);
break;
case 'detail':
$content = $this->detailView($content, $conf, $this->flexConf);
break;
case 'dateien':
$content = $this->fileView($content, $conf, $this->flexConf);
break;
case 'xml':
echo $this->renderXML($content, $conf);
exit;
}
#print_r($flexConf);
return $this->pi_wrapInBaseClass($content);
}
Das ist die Main und hier nochmal gefolgt die renderXML funktion in meiner class:
function renderXML($content, $conf) {
$content = '<testelement>test</testelement>';
echo $content;
}
Ich bekomm definitiv keine Ausgabe wenn ich die Seite mit &type=2 aufrufe, nur die FF Fehlermeldung... ?!
Hm, ok, dann zwei weitere Ideen:
1. Die Datei, die die Funktion renderXML enthält, ist in Typoscript eingebunden? includeLibs
2. Klappt die XML-Ausgabe, wenn Du mal nur TS verwendest?
XML.10 = TEXT
XML.10.value = <hello>world</hello>
Hallo Julian,
zu 2: Sowas klappt ohne Probleme
zu 1: Die funktion renderXML ist in der Klasse tx_finds_pi1 enthalten und die Extension ist im EM geladen. Meine Frage: Muss ich dann dennoch über TS die Datei einbinden?
Danke und Gruß Manne
Zu 2): Weiß ich nicht. Aber würde spekulieren, dass man's noch muss. Zwar dürfte die Datei TYPO3 ansich bekannt sein, nicht aber dem Typoscript-Parser.
Probieren schadet ja nichts.... #paralyzed#
Na gut, probieren macht bekanntlich schlauer... wieder was gelernt :-) Passt, Funktion wird aufgerufen, nu kanns weitergehen!
Lieben Dank für Deine Unterstützung!
Manfred