Das Örtchen RSS-Feed
Kategorie
Kategorie: Blog
Buttons & Statistiken
Neueste Kommentare

TYPO3: Powermail-Felder vorbelegen

Im Januar und Februar dieses Jahres habe ich mich notgedrungen mit den Grundlagen von TYPO3 vertraut gemacht. Im Rahmen eines Testprojekts kam die Frage auf, ob es möglich ist, Felder eines Powermail-Formulars vorzubelegen. Um genauer zu sein, gab es Seiten, die ein Produkt genauer beschrieben (nennen wir sie Detailseiten) und deren ID und Seitentitel (Page-Title) sollten neben dem aktuellen Datum Teil der mit Powermail versendeten Daten sein.

Ausgangslage

Installiert war ein TYPO3 4.5 LTS mit den Extensions TemplaVoilà und Powermail.

Für die fragliche Seite gab es ein Template Object (TO) "Detailseite" mit dem Template File  "fileadmin/templates/test_vorlage/detailseite.html" und der Standard Data Structure (DS) des TemplaVoilà-Wizards. Somit waren die Data Elements "ROOT", "Main Content Area", "Main menu" und "Sub menu" vorhanden und gemappt. Außerdem existierte eine Seite, die ein mit Powermail erstelltes Kontaktformular enthielt.

Die Recherche

Eine kurze Recherche mit Big G förderte sofort den Artikel powermail Trickkiste Teil 2 – Felder vorbelegen zu Tage. Ich entschied mich für die Variante mit TypoScript und Prefill. Ich wollte jedoch einen unschönen Link beim Aufruf des Formulars vermeiden (kein $_GET) und nutzte deswegen ein kleines HTML-Formular in meiner Detailseite, welches über die Post-Methode ($_POST) seine Daten an Powermail übergeben sollte.

Meine Vorgehensweise

Schritt 1 - Data Structure TemplaVoilà

 <form action="#" method="post">
    <input type="hidden" name="page_id" id="page_id" value="" />
    <input type="hidden" name="page_title" id="page_title" value="" />
    <p class="buttonlink">
        <button type="submit">Anfrage</button>
    </p>
</form> 

Dieses Formular befand sich in der "detailseite.html" und die DS wurde in TemplaVoilà um Felder für die beiden relevanten Tag-Attribute erweitert.

TemplaVoilà - Data Structure - Attribute (AT), Element Preset None (TypoScript only), Mapping rules input:attr:value

Der Feld-Name und Title können beliebig gewählt werden (gehen wir in diesem Beispiel einmal von "field_page_id" und "Page-ID" aus), wichtig ist jedoch das korrekte Element Preset "None" und eine sinnvolle Mapping rule (beispielsweise "input:attr:value"). Außerdem muss unter Data processing nachfolgender TypoScript Code hinterlegt werden:

 10 = TEXT
10 {
  insertData = 1
  value = {TSFE:id}
}

Die Vorgehensweise für den Page-Title ist soweit identisch, lediglich der TypoScript Code unterscheidet sich beim Wert (Value).

 10 = TEXT
10 {
  insertData = 1
  value = {page:title}
} 

Sobald diese beiden Felder korrekt auf die versteckten Formular-Felder gemappt wurden, sollten beide Formular-Felder bei der Betrachtung des HTML-Quelltexts einer Detailseite ausgefüllt sein.

Doch Moment nun haben wir zwar Werte in den Formular-Feldern, doch das Formular verschickt diese an die aktuelle Seite (also die Detailseite selbst) und nicht an Powermail. Um dies zu beheben, müssen wir die DS um ein weiteres Feld erweitern.

TemplaVoilà - Data Structure - Attribute (AT), Element Preset None (TypoScript only), Mapping rules form:attr:action

Der Feld-Name und Title sind wieder beliebig, das Preset ist erneut "None" und die Mapping rule ist jetzt "form:attr:action".

 10 = TEXT
10 {
  typolink.parameter = 74
  typolink.returnLast = url
} 

In diesem Beispiel gehe ich davon aus, daß die Seite mit dem Powermail-Formular im Page-Tree den Tooltip id=74 hat. Dies müsst Ihr natürlich individuell für Euren Fall prüfen und entsprechend anpassen.

Schritt 2 - Powermail UIDs herausfinden

Powermail - UID herausfinden - Fieldtype Hidden field, Name for templates ###UID12###

Ich gehe davon aus, daß mit Powermail drei versteckte Formularfelder für die Page-ID, den Page-Title und das aktuelle Datum angelegt wurden und wir uns die korrekte UID für jedes dieser Felder notiert haben.

Schritt 3 - TypoScript Extension-Template

Nachdem unsere Detailseite die Daten nun korrekt versenden kann und wir die UIDs der versteckten Powermail-Felder kennen, müssen wir beides miteinander kombinieren. Hierzu klicken wir im TYPO3-Backend auf den Menüpunkt "Template".

TYPO3 - TypoScript Extension-Template - Backend Menü Template

Dort legen wir dann ein Extension-Template für die Seite mit dem Powermail-Formular an (in unserem Beispiel also die Seite mit der ID 74).

TYPO3 - TypoScript Extension-Template - Create

  1. Seite 74 im Page-Tree auswählen
  2. "Info/Modify" aktivieren (sofern nicht sowieso aktiv)
  3. "Click here to create an extension template"

Unter Setup hinterlegen wir dann nachfolgenden TypoScript Code:

 plugin.tx_powermail_pi1 {
  prefill {
    uid12 = TEXT
    uid12.data = GP:page_id
    uid12.intval = 1
    uid14 = TEXT
    uid14.data = date:U
    uid14.strftime = %d.%m.%Y
    uid18 = TEXT
    uid18.data = GP:page_title
    uid18.htmlSpecialChars = 1
  }
  clear.session = 1
} 

Dieses Beispiel geht davon aus, daß uid12 das Powermail-Feld für die Page-ID, uid14 das Feld für das aktuelle Datum und uid18 das Feld für den Page-Title ist. Jeder Prefill-Wert muss mit intval (Zahl) oder htmlSpecialChars (Text) gegen XSS-Attacken abgesichert werden.

Hinweis: In meinem Fall erwies es sich als nötig, mit der vorletzten Zeile TypoScript Code die Session zu leeren (aber YMMV).

Fazit

Die Kombination von TemplaVoilà und Powermail ist nicht wirklich schwer, bedarf jedoch einigem Aufwand, sofern sich das Formular auf einer eigenen Seite befindet. Befindet sich das Powermail-Formular direkt in der Detailseite, so entfällt Schritt 1 komplett und der TypoScript Code in Schritt 3 ändert sich entsprechend. Es geht sogar noch wesentlich kürzer, wenn es nur um die zusätzliche Übermittlung der Absenderseite des Formulars (siehe TYPO3: Absenderseite von Powermail) geht.

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Neuen Kommentar schreiben

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als rel="nofollow" markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne HTML-Tag in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.