Zum Inhalt springen

Formhandler - verschachtelte Abfragen aus tt_address (CONTENT im CONTENT)

Erstellt am 24. März 2014 · 1 Antwort · letzte Antwort am 15. April 2014

Tags: Formhandler, tt_address, TYPO3 4, Frage

mambomatz ·

Hi Leute!

Ihr seid meine letzte Hoffnung, ich such mir seit ner Woche die Finger wund, aber komme einfach nicht weiter.
Folgendes Projekt: aus vielen Events in verschiedenen Bundesländern soll man in einem Anmeldeformular eines auswählen können. Der Kunde möchte ein separates Dropdown-Menü für jedes Bundesland.
Die Events werden in tt_address gespeichert, ein funktionierendes Formular habe ich auch, es fehlt nur der Marker für das Dropdown-Menü.

Der Marker heißt ###dropdown_event### und soll am Ende liefern:

<li><label>Bundesland 1</label><select>
<option>Event 1</option>
<option>Event 3</option>
...</select></li>

<li><label>Bundesland 2</label><select>
<option>Event 17</option>
<option>Event 42</option>
...</select></li>

<li><label>Bundesland 3... 
usw.

Zum testen habe ich 5 Events in 4 Bundesländern eingetragen und die where-Klausel erstmal außen vor gelassen.
D.h. Es müssten 4 <select> mit jeweils 5 <option> (alle 5 Events) erzeugt werden.

Mein TS liefert nun sehr seltsames: Im ersten <select> stehen nur 4 <option>, im zweiten <select> nur noch 3, usw. Also
Bundesland 1: Event 1, 2, 3, 4
Bundesland 2: Event 1, 3, 4
Bundesland 3: Event 3, 4
Bundesland 4: Event 4

Das TS ist an dieses Tutorial angelehnt: http://www.netresearch.de/blog/typo3-formhandler/

markers.dropdown_event = CONTENT
markers.dropdown_event {
	table = tt_address
	select.pidInList = 1
	select.groupBy = tt_address.region
	renderObj = COA
	renderObj {	
		10 = TEXT
		10.value = <li><label for="event">{field:region}</label><select>
		10.insertData = 1

 		20 = CONTENT
		20 {
			table = tt_address
			select.pidInList = 1
			renderObj = COA
			renderObj {			
				30 = TEXT
				30.value =  <option value="{field:name}"
				30.insertData = 1			
				
				40.noTrimWrap = | ***select_event_|***>|
				40 = TEXT
				40.field = uid
				  
				50 = TEXT
				50.value = {field:name}</option>
				50.insertData = 1
			}
		} 				
		60 = TEXT
		60.value = </select></li>
		60.insertData = 1 		
	}	
}

.20 für sich genommen gibt korrekt alle 5 Events im <option>-Tag aus, aber nur, wenn man den Rest auskommentiert.
Ich kanns mir nicht erklären und bin am verzweifeln. Hilfe!

mambomatz ·

Update: Die where-Bedingung funktioniert jetzt und das Problem konnte ich näher eingrenzen:
In jedem Dropdown fehlt genau ein Event, nämlich das mit der jeweils kleinsten uid in tt_address.

Woran kann das liegen? Hat keiner eine Idee?
Neues TS:

  markers.dropdown_event = CONTENT
  markers.dropdown_event {
	table = tt_address
	select.pidInList = 1
	select.groupBy = tt_address.region
	
	currentRegion = TEXT
	currentRegion.dataWrap = {field:region}
	currentRegion.wrap3 = '|'
	currentRegion.insertData = 1
	
	renderObj = COA
	renderObj {		
		10 = TEXT
		10.value = <li><label for="event">{field:region}</label>
		10.insertData = 1	

		20 = CONTENT
		20.wrap =<select>|</select></li>		
		20 {		
			table = tt_address
			select {
			  pidInList = 1
			  orderBy = tt_address.name
			  andWhere = tt_address.region = 
			  andWhere.postCObject < plugin.Tx_Formhandler.settings.markers.dropdown_event.currentRegion
			}
			renderObj = COA
			renderObj {
				
			  21 = TEXT
			  21.value = <option value="{field:name}"      
			  21.insertData = 1
			  
			  22.noTrimWrap = | ***select_event_|***>|
			  22 = TEXT
			  22.field = uid
			  
			  23 = TEXT
			  23.value = {field:name}</option>
			  23.insertData = 1
			}
		} 			
	}	
  }