Hallo ich versuche von einer Seite ausgehend alle tt_adress Objekte sowie aus den Unterverzeichnissen auszulesen. Die Daten sollen dann in einen assoziativen Arrayund durch ein postUserFunc bearbeitet und zurückgegeben werden.
Zudem soll diese Seite keinen Dokumenten Typ haben, sprich kein HTML, allerdings weiss ich nicht wie ich den doctype abstelle.
1) Frage:
Kann ich mit LOAD_REGISTER elemente ineinander verschachteln und arrays nach meinen Wünschen erstellen?
2) Frage:
wie stelle ich die Ausgabe von dem Standard-Header ab, bzw. wie müßte ich die Seite konfigurieren um z. Bsp. ein XML-Dokument auszugeben?
Hier mal mein Typoscriptcode:
pages = LOAD_REGISTER
pages {
lvl1pages.cObject = CONTENT
lvl1pages.cObject {
table = pages
select {
pidInList.value = 18
orderBy = uid
}
renderObj = TEXT
renderObj {
field = uid
wrap = |,
}
}
lvl2pages < lvl1pages
lvl2pages.select.pidInList.data = register:lvl1pages
lvl3pages < lvl1pages
lvl3pages.select.pidInList.data = register:lvl2pages
allPages.cObject = COA
allPages {
10 = TEXT
10.data = register:lvl1pages
20 = TEXT
20.data = register:lvl2pages
30 = TEXT
30.data = register:lvl3pages
}
}
adressSet = LOAD_REGISTER
adressSet {
allAdress.cObject = CONTENT
allAdress.cObject {
table = tt_adress
select {
pidInList.data = register:allPages
orderBy = uid
}
renderObj = COA
renderObj {
10 = LOADREGISTER
10 {
adress.cObject = COA
adress.cObject {
10 = TEXT
10.field = adress
10.wrap = |,
}
tooltip.cObject = COA
tooltip.cObject {
10 = TEXT
10 {
field = first_name
HTMLparser.htmlSpecialChars = -1
wrap = | -
if.isTrue.field = first_name
postUserFunc = user_escapeSingleQuote->escapeQuotes
}
}
html.cObject = COA
html.cObject {
10 = TEXT
10 {
field = title
if.isTrue.field = title
wrap = <h3>|</h3>
}
}
}
}
}
}
includeLibs.getGeocodeData = typo3conf/ext/getGeocodeData/getGeocodeData.php
config.no_cache = 1
config.doctype = none
page = PAGE
page.typeNum = 0
page.10 = COA
page.10 {
10 < pages
20 < adressSet
30 = TEXT
30.data = register:allAdress
30.postUserFunc = user_getGeocodeData->getMarkerDataSCRIPT
}
Leider habe ich keine Doku gefunden die genau erklärt wie LOAD_REGISTER arbeitet.
Für eure Hilfe wäre ich euch sehr dankbar
Verschachteln funktioniert nicht, die Arrays werden immer auf oberster ebene angelegt. Mit COA kann ich zwar ebenfalls ein Array basteln aber kein assoziatives.
Die Problemlösung muss jetzt anders gestaltet werden.
Nun möchte ich das in 20 die CONTENT Objekte durch eine postuserfunction geschleust werden. Allerdings wird die Funktion nicht aufgerufen und ich habe keinen Schimmer warum. Wenn ich die postuserfunc auf TEXT anwende arbeitet es einwandfrei. Allerdings brauche ich den Aufruf auf ein CONTENT oder COA Objekt. da streikt es nun.
Hier der überarbeitete Typoscript code.
page = PAGE
page.typeNum = 0
page.10 = COA
page.10 {
10 = LOAD_REGISTER
10 {
lvl1pages.cObject = CONTENT
lvl1pages.cObject {
table = pages
select {
pidInList = 18
orderBy = uid
}
renderObj = TEXT
renderObj {
field = uid
wrap = |,
}
}
lvl2pages.cObject = CONTENT
lvl2pages.cObject {
table = pages
select {
pidInList.data = register:lvl1pages
orderBy = uid
}
renderObj = TEXT
renderObj {
field = uid
wrap = |,
}
}
lvl3pages.cObject = CONTENT
lvl3pages.cObject {
table = pages
select {
pidInList.data = register:lvl2pages
orderBy = uid
}
renderObj = TEXT
renderObj {
field = uid
wrap = |,
}
}
allPages.cObject = COA
allPages.cObject {
10 = TEXT
10.data = register:lvl1pages
10.wrap = |,
20 = TEXT
20.data = register:lvl2pages
20.wrap = |,
30 = TEXT
30.data = register:lvl3pages
}
}
20 = CONTENT
20 {
table = tt_address
select {
pidInList.data = register:allPages
}
postUserFunc = user_getGeocodeData->getMarkerDataSCRIPT
}
}
Vielleicht kann mir jemand sagen warum postUserFunc nicht auf COA und CONTENT wirkt, oder wenn doch wie.
Danke
Also,
mit
config.disableAllHeaderCode = 1
stellst du alle Headerausgaben von T3 ab. D.h. du musst dann deinen eigenen XML Header ausgeben.
Wenn du wirklich auf das gesamte CONTENT bzw. COA deine userFunc anwenden willst dann so:
20 = CONTENT
20 {
table = tt_address
select {
pidInList.data = register:allPages
}
stdWrap.postUserFunc = user_getGeocodeData->getMarkerDataSCRIPT
}
Allerdings würd ich dir empfehlen einfach ein entsprechendes renderObj zu erstellen, verschachteln von Pages geht Prima über ein HMENU gekoppelt mit TMENU und stdWrap.cObject, da kannst du dann für jede Seite ein CONTENT nach deinen Wünschen ausgeben und das wird korrekt verschachtelt...
Klappt bei mir Prima für verschiedenste XML Ausgaben.
Grüße
Christian
Danke für den Hinweis für die Headerausgabe.
Wenn ich postuserfunc für jedes Item einzeln (stdWrap) anwende, wird die Funktion ebenfalls nicht aufgerufen. Die Verschachtelung wie du sie meinst kenne ich und komme auch gut damit zurecht. Allerdings möchte ich einen assoziativen Array erstellen der an die postUserFunc übergeben wird.
array(
'html' => tt_address->address, etc ..
'tooltip' => tt_addres->title
'uid' => tt_addres->uid
)
ungefähr so
Wenn ich sie mit einem MENU oder COA verschachtel, ist die zusammensetzung verschachtelt. Die Ausgabe aber plan (muß ein assoziatver array sein).
Mein Hauptproblem ist aber das die Userfuncs nicht aufgerufen werden, gleichgültig wo ich sie platziere. Habe sogar aus anderen Templates des Projekts PostUserFuncs verwendet die hier ebenfalls nicht aufgerufen werden. Ich habe keinen Schimmer warum.
Ich glaub bei dem Array muss ich passen. Wüsste nicht, wie du das per TS vernünftig erstellen willst. Geht es nicht anders? Was macht den die function?
Die postUserFunc Funktion soll die Daten von tt_address empfangen einen request an google.maps stellen den rückgabewert speichern und für das objekt einen javascript schnipsel zurückgeben.