Zum Inhalt springen

Kontaktformular mit Typoscript einbinden/erstellen

Erstellt am 11. Juli 2010 · 4 Antworten · letzte Antwort am 17. Oktober 2013

Tags: Frage

Mike2707 ·

Hallo,
ich möchte die mailform mit TypoScript in mein Template einbinden.

Zugewiesen habe ich es mit
page.10.subparts.CONTACT < tt_content.mailform

Wenn ich tt_content.mailform einbinde, erstellt mir Typo3 nur als HTML-Code "<fieldset class="csc-mailform"> | </fieldset>" (das was aus tt_content.mailform.20.stdWrap.wrap kommt).

Es gibt noch die Felder wie z.B, tt_content.mailform.20.layout und tt_content.mailform.20.LABEL.layout.

Dort sind einige Platzhalter vorhanden.
Mir ist aber nicht ganz klar, wie ich damit umzugehen habe.

Aber wie erstelle ich ein normales Mailformular mir Typoscript?

Ich möchte die Seite http://www.oswd.org/files/designs/3691/delicious_fruit/ mit Typo3 nachbauen.
Das Loginformular und den Contentbereich habe ich schon.

Vielen Dank für eure Hilfe.

Gruß
Mike

einpraegsam.​net ·

Einfacher in dem Zusammenhang: Füge auf einer neuen Seite (z.B. Sysfolder) ein Mailform ein und konfiguriere dieses nach deinen Wünschen. Dann per TypoScript den Inhalt der neuen Seite (anhand der PID) an einem Marker oder Subpart ausgeben.

temp.INHALT = CONTENT
temp.INHALT {
	table = tt_content
	select {
		pidInList = 123
		orderBy = sorting
		where = colPos= 0
	}
}

Vorteil: Du kannst das Formular im Plugin definieren, was auch ein Redakteur ändern könnte. Weniger kryptisch als im TypoScript

Mike2707 ·

Hallo,
danke dir. Ich habe es umgesetzt und es funktioniert.
Muss nur noch schauen, wie ich das stylen kann.
Vielen Dank 🙂

Noch kurz ne Frage:
In der Zeit habe weiter gesucht und und mir einen Code zusammengebastelt.
Funktioniert, nur der Mailversand nicht.
Hast du eine Iddee?

page.10.subparts.CONTACT < tt_content.mailform
page.10.subparts.CONTACT {

20 = FORM
20 {
dataArray {
10.label = Name:
10.type = name=input
10.value =
10.required = 1
20.label = eMail:
20.type = email=input
20.value =
20.required = 1
30.label = Bemerkung:
30.type = bemerkung=textarea
30.value =
30.required = 1
40.label = Subject
40.type = subject=hidden
40.value = Mein Formular
#50.label = Referenz
#50.type = myRef=hidden
#50.value.data = GPVar : myRef
60.type = formtype_mail=submit
60.value = Senden
}
recipient >
recipient = xx@xx.xx
recipient.field = subheader

hiddenFields.formtype_mail = TEXT
hiddenFields.formtype_mail.value = 1

}

}

Unbekannter Benutzer ·

Das Problem mit locationData ist kein "Problem", sondern eine Sicherheitseinrichtung von typo3, um zu verhindern, dass Robots Massenmails verschicken, soll heissen: locationData ist dazu da, sicherzustellen, dass die verschickte Mail von einem Formular verschickt wird, das es tatsächlich GIBT (zugegeben, ein schlampiger Schutz - andere Extensions verwenden Captcha und sind damit sicherer. Egal.)

Auf https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/ContentObjects/Index.html stehts übrigens gut beschrieben.

In Kürze: locationData ist ein verstecktes Feld, das bei mir zB so aussieht:

<input type="hidden" name="locationData" value="527:tt_content:984" />

Die Syntax ist: "pid:table:uid", und typo3 validiert nun: gibts auf der Seite "pid" ein Element aus der Tabelle "table" mit der uid "uid" und ist die auch aktiv und zu sehen (= nicht unsichtbar, nicht un-ausgegeben weil user nicht eingeloggt, nicht gelöscht)? Wenn ja, wird eine Mail verschickt. Wenn nein --> kommt alles in den Gully.

Trick, um das zu umgehen:
1) leg Dir das Mailformular auf irgendeine Seite, die stellst Du "nicht im Menue" und verrätst niemandem, dass es die Seite gibt :-)
2) hart-codiere Dein Mailformular (mit typoscript, templates, php, wurschtwas) mit dem hidden field "locationData" und der richtigen Codierung (TYPO3 sieht nämlich nicht nach, ob der Output von diesem Formular IST, sondern nur obs das Formular GIBT).

Dann gehts!

Ich habs verwendet, um in CAL ein Anmeldeformular einzubinden, das in versteckte Felder gleich Daten aus CAL einträgt --> inject von Daten in ein Mailformular ist mir noch nicht anders gelungen.

:-)