Zum Inhalt springen

LOAD_REGISTER verschachteln

Erstellt am 14. September 2007 · 5 Antworten · letzte Antwort am 18. September 2007

Tags: Frage

webmonk ·

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

webmonk ·

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
Unbekannter Benutzer ·

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

webmonk ·

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.

webmonk ·

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.