Anforderung: Falls Besucher über Google kommt und das Kontaktformular nutzt, soll der Suchbegriff mit übermittelt werden
Idee: Eine kleine Userfunc wird über TS auf allen Seiten eingebunden (z.B. page.100). Diese Userfunc holt sich aus dem Referer das Suchwort (wenn vorhanden) und schreibt dies in die Session. Powermail schickt per Hiddenfield (funktioniert natürlich auch mit MailFormPlus) das Suchwort mit
Umsetzung:
Neue PHP Datei direkt im fileadmin anlegen mit Namen user_googlesession.php:
<?php
// This class adds referer and google searchword to session (for using in powermail later)
class user_googlesession {
var $allow = array(1,1,1); // enable or disable the infos (1. Searchword, 2. Referer, 3. IP Address)
var $sesprefix = 'wt_googlesession'; // prefix for session
var $finalarray = array(); // empty array for session
var $test = 0; // testmode (show google searchword)
// Main function for additional google information
function user_main($content='', $conf=array()) {
$this->makeSession();
if ($this->test === 1) return $this->user_test();
}
// Function to generate the session
function makeSession() {
$foo = $this->infoArray(); // Array with information about user
if (count($foo) > 0 && $foo) { // if array is not empty
$GLOBALS['TSFE']->fe_user->setKey("ses", $this->sesprefix, $this->infoArray()); // Generate Session with array
$GLOBALS['TSFE']->storeSessionData(); // Save session
}
}
// Function infoArray() generates array with needed stuff for session
function infoArray() {
$url = parse_url(htmlentities($_SERVER['HTTP_REFERER'])); // every part of the referer in an own array
if(isset($url['query'])) { // if GET params is set
preg_match("/q=(.*?)(&|^)/", $url['query'], $output); // give me only the &q="searchword" part
if ($output[1]) { // only if GET param &q= was set
if ($this->allow[0]) $this->finalarray['searchword'] = urldecode($output[1]); // 1. searchword
if ($this->allow[1]) $this->finalarray['referer'] = $_SERVER['HTTP_REFERER']; // 2. referer
}
if ($this->allow[2]) $this->finalarray['ip'] = $_SERVER['REMOTE_ADDR']; // 3. IP address
}
// return whole array
if (!empty($this->finalarray)) return $this->finalarray; // return info array
}
function user_test($content='', $conf=array()) {
$content = 'Sessionentry: ';
$content .= print_r($GLOBALS['TSFE']->fe_user->sesData[$this->sesprefix]['searchword'], 1);
if (!empty($content)) return $content;
}
}
?>
Obige PHP file via TS auf allen Seiten einbinden - z.B.:
includeLibs.user_googlesession = fileadmin/user_googlesession.php
page.100 = USER
page.100.userFunc = user_googlesession->user_main
In Powermail drei verborgene Felder (Hiddenfields) ohne Inhalt anlegen und UID dieser merken (in meinem Beispiel 26, 27 und 28-).
Als nächstes diese drei Felder über TS aus der Session füllen lassen:
plugin.tx_powermail_pi1 {
prefill {
uid26 = TEXT
uid26.data = TSFE:fe_user|sesData|wt_googlesession|searchword
uid27 = TEXT
uid27.data = TSFE:fe_user|sesData|wt_googlesession|referer
uid28 = TEXT
uid28.data = TSFE:fe_user|sesData|wt_googlesession|ip
}
}
Das wars...
Improvements:
- Ich habe in meinem Beispiel darauf geachtet, dass der Absender auf der Confirmation Seite das Hidden Field nicht zu Gesicht bekommt, indem ich die anzuzeigenden Felder manuell über das HTML Template eingetragen habe.
- Selbstverständlich lässt sich die IP Adresse sehr viel einfacher über TS füllen, hierzu braucht es das Script nicht - aber ich war schonmal dabei...
Grüße, Alex