Zum Inhalt springen

Powermail: Selectorbox mit Werten aus Datenbank

Erstellt am 15. Mai 2008 · 10 Antworten · letzte Antwort am 5. Februar 2009

Tags: Powermail, tt_address, Tipp

einpraegsam.​net ·

Nach einer Anfrage habe ich mich entschlossen, das hier zu posten, falls jemand mal ein ähnliches Problem hat.

Aufgabenstellung:
Selecterbox (Dropdown) in Powermail mit beliebigen Werten aus Datenbank

Lösung:
1. Neues Powermail Feld anlegen (typoscript) mit lib.object:
Bild: design-and-style.de/…/pm_select1.gif

2. Eine Selectabfrage in TS (Hole name, uid von tt_address der Seite 5):
Bild: design-and-style.de/…/pm_select2.gif

Hier nochmal zum Kopieren:

lib.object = COA_INT
lib.object {
	10 = TEXT
	10.value = <label for="uid33">Select:</label>
	
	20 = CONTENT
	20.wrap = <select id="uid33" name="tx_powermail_pi1[uid33]" size="1">|</select>
	20 {
		table = tt_address
		select {
			pidInList = 5
			orderBy = name
		}
		renderObj = COA
		renderObj {
			10 = COA
			10 {
				10 = TEXT
				10 {
					field = uid
					wrap = <option value="|">
				}
				20 = TEXT
				20 {
					field = name
					wrap = |</option>
				}
			}
		}
	}
}

Ergebnis:
Bild: design-and-style.de/…/pm_select3.gif

Dynamische Selecterbox, mit dem HTML Code:

<label for="uid33">Select:</label>
<select id="uid33" name="tx_powermail_pi1[uid33]" size="1">
<option value="23">Name1</option>
<option value="24">Name2</option>
</select>
tga ·

Hi,

nachdem genau diese Anfrage nun bei mir gelandet ist, weil's nicht geklappt hat ;-) :

mit COA_INT scheint's nicht zu funktionieren (keine Ausgabe im Frontend), mit COA geht's aber...

Grüße, Tina

just2b ·
tga schrieb

mit COA_INT scheint's nicht zu funktionieren (keine Ausgabe im Frontend), mit COA geht's aber...

dann scheinst du nicht die neueste TYPO3 Version zu haben 😉

donillo ·

Moinz,

ich brauche das eigentlich auch. Nur muss ich die Daten aus einer Tabelle holen, die nicht in TYPO3 angelegt/gepflegt wird.
Die heisst einfach adressen und so habe ich die eingebunden:

lib.object = COA_INT
lib.object {
        10 = TEXT
        10.value = <label for="uid33">Markt:</label>
       
        20 = CONTENT
        20.wrap = <select id="uid33" name="tx_powermail_pi1[uid33]" size="1">|</select>
        20 {
                table = adressen
                select {
                        #pidInList = 5
                        orderBy = Ort
                }
                renderObj = COA
                renderObj {
                        10 = COA
                        10 {
                                10 = TEXT
                                10 {
                                        field = uid
                                        wrap = <option value="|">
                                }
                                20 = TEXT
                                20 {
                                        field = Ort
                                        wrap = |</option>
                                }
                        }
                }
        }
}

Nur passiert da nix. Müsste doch eigentlich klappen oder?

donillo ·

Hi,

danke, so was habe ich mir schon fast gedacht.
Nur bekomme ich nun diesen Fehler:

NO entry in the $TCA-array for the table "tx_markt_adressen". This means that the function enableFields() is called with an invalid table name as argument.

Wie genau sieht denn eine T3 konforme Tabelle aus? Ich habe schon uid, pid, hidden, deleted angelegt. Oder muss ich da in TYPO3 noch was verändern?

maxhb ·

Hallo!
Das Beispiel für eine Drop-down-Liste per TS funktioniert so weit sehr gut - danke dafür!

Ein Problem tauch bei mir allerdings auf, wenn ich versuche ein Feld aus bestimmten DB-Einträgen zu erstellen und dieses dann als Komma separierte Liste in einer anderen Tabelle zu speichern.

Ich habe z.B. eine Tabelle, die verschiedene Anwendungen beinhaltet. Aus diesen soll der User die zutreffenden Auswählen und dann soll das ganze in einem DB-Feld der tt_news gespeichert werden.

Mein Ansatz:

lib.applications = COA_INT
lib.applications {
	10 = TEXT
	10.value = <label for="uid901">Applications:</label>
	20 = CONTENT

	# Hier wird die Abbildung auf ein PHP-Array vorbereitet, um mehrere werte zu übertragen
	20.wrap = <select id="uid901" name="tx_powermail_pi1[uid901][]" size="7" multiple="multiple">|</select>
	20 {
		table = tx_my_applications
		select {
			pidInList = 109
			orderBy = title
		}
		renderObj = COA
		renderObj {
			10 = COA
			10 {
				10 = TEXT
				10 {
					field = uid
					wrap = <option value="|">
				}
				20 = TEXT
				20 {
					field = title
					wrap = |</option>
				}
			}
		}
	}
}

Der Code erzeugt eine korrekte Auswahlliste. Nach dem ausfüllen des Formulars weden mir die Werte dann zur Kontrolle von Powermail so angezeigt:

3
7
9

Problem 1: Der Name des Feldes fehtlt
Problem 2: Statt der bezeichner stehen dort nur die IDs

Daraus ergibt sich dann auch
Problem 3: Von den Werten wird keiner in der DB gespeichert, das Feld bleibt also leer.

Das Speichern erfolgt so:

plugin.tx_powermail_pi1 {
	dbEntry {
		tt_news {
			_enable = TEXT
			_enable.value = 1

			pid = TEXT
			pid.value = 499

			tstamp = TEXT
			tstamp.data = date:U

			# ...
			tx_my_applications = TEXT
			tx_my_applications.data = TSFE:fe_user|sesData|powermail_922|uid901
			# ...
}

Gibt es eine Lösung, um die 3 Fallstricke zu überwinden?

Gruß
maxhb

tanelkoth ·

I solved the problem with the field name by replacing the uid with the fieldname itself. See the example:

lib.object = COA_INT
lib.object {
            10 = TEXT
            10.value = <label for="uid22">Evenement:</label>
            20 = CONTENT
            20.wrap = <select id="uid22" name="tx_powermail_pi1[uid22]" size="1">|</select>
            20 {
                table = tx_kbeventboard_category
                select {
                        pidInList = 375
                        orderBy = category
                       }
                renderObj = COA
                renderObj {
                           10 = COA
                           10 {
                               10 = TEXT
                               10 {
                                   field = [b]category[/b]                                   wrap = <option value="|">
                                  }
                               20 = TEXT
                               20 {
                                   field = category
                                   wrap = |</option>
                                  }
                          }
                }
        }
}

In this way the uid is not reported back, but the fieldname itself.
Hope this helps,
Regards,
tanelkoth
kyros ·

Hallo zusammen

Ich hab eine Frage

Ich hab versucht mit untenstehendem code eine DB abzufragen. Diese heist tx_test und das die spalte Name. Nun leider kommt nichts.

Die pidinlist wo finde ich die ?

Wäre cool wenn mir jemand hilft

maxhb ·
kyros schrieb

Die pidinlist wo finde ich die ?

Das ist die ID der Seite auf der die Datensätze gespeichert sind. Findest Du im Seitenbaum heraus, wenn Du mit der Maus über das Icon vor dem Seitennamen gehst.

CU
maxhb