Powermail: Google Suchwort mit in Mail übertragen
| Autor | Nachricht |
|---|---|
|
Verfasst am: 12. 06. 2008 [13:49]
|
|
|
einpraegsam.net
Moderator
Themenersteller
Dabei seit: 17.01.2005
Beiträge: 8849
|
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 <?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.: TYPOSCRIPT 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 2 Als nächstes diese drei Felder über TS aus der Session füllen lassen: TYPOSCRIPT 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 |
|
Verfasst am: 10. 07. 2008 [18:08]
|
|
|
einpraegsam.net
Moderator
Themenersteller
Dabei seit: 17.01.2005
Beiträge: 8849
|
Hier habe ich mal die Klasse verändert, damt auch noch der Referer in die Session geschrieben wird, wenn von Referer extern: 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 = array('wt_googlesession', 'wt_referersession'); // 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(); //$this->help(); if ($this->test === 1) return $this->user_test(); } // Function to generate the session function makeSession() { // 1. save google searchword to session if exists $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[0], $this->infoArray()); // Generate Session with array $GLOBALS['TSFE']->storeSessionData(); // Save session } // 2. save refer to session if not conject.com or conject.de if (strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') === false && strpos($_SERVER['HTTP_REFERER'], 'yourdomain.de') === false) { // if referer is from extern $GLOBALS['TSFE']->fe_user->setKey("ses", $this->sesprefix[1], $_SERVER['HTTP_REFERER']); // 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[0]]['searchword'], 1); if (!empty($content)) return $content; } /* function help() { if ($_SERVER['REMOTE_ADDR'] == '192.168.20.199') { $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery ( 'pid, uid, bodytext', 'tt_content2', $where_clause = 'bodytext LIKE "%www.conject.de%"', $groupBy = '', $orderBy = '', $limit = '' ); if ($res) { // If on current page is a result while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // one loop for every db entry //echo $row['bodytext']; $GLOBALS['TYPO3_DB']->exec_UPDATEquery ( 'tt_content_x', 'uid = '.$row['uid'], array ( 'bodytext' => str_replace('www.conject.de','www.conject.com',$row['bodytext']) ) ); } } } } */ } ?> Der Rest wie oben (ab in ein Hiddenfield damit) |
|
Verfasst am: 02. 01. 2009 [15:20]
|
|
|
einpraegsam.net
Moderator
Themenersteller
Dabei seit: 17.01.2005
Beiträge: 8849
|
Auf conject.com übertragen wir folgende Daten beim Ausfüllen irgend eines Formulares: - Link zur Seite des Formulares - Ausgewählte FE Sprache - GEO Info (Stadt) des Users (hierzu ist eine kleine userFunc nötig - kann ich bei Interesse auch posten) - GEO Info (Land) des Users (gleiche userFunc nötig) - Google Suchwort - Referer - Google Adwords Code - IP Hier das TS: TYPOSCRIPT plugin.tx_powermail_pi1.dynamicTyposcript { ai = COA ai.wrap = <hr />| ai { # Current page 10 = COA 10.wrap = <b>conject page:</b> | 10.10 = TEXT 10.10.typolink.parameter.data = TSFE:id 10.10.typolink.returnLast = url 10.10.wrap = <a href="http://www.conject.com/|"> 10.20 = TEXT 10.20.data = page:title 10.20.wrap = |</a> # Current language 20 = COA 20.wrap = <b>Preferred language:</b> | 20.10 = CASE 20.10.key.data = GPvar:L 20.10.default = TEXT 20.10.default.value = EN 20.10.1 = TEXT 20.10.1.value = DE 20.10.4 = TEXT 20.10.4.value = RU 20.10.5 = TEXT 20.10.5.value = ME # Geoinfo City 30 = COA 30.10 = USER 30.10.userFunc = user_pmgeoinfo->city 30.wrap = <b>City:</b> | # Geoinfo Country 40 = COA 40.10 = USER 40.10.userFunc = user_pmgeoinfo->country 40.wrap = <b>Country:</b> | # Google Searchword if any 50 = TEXT 50.data = TSFE:fe_user|sesData|wt_googlesession|searchword 50.wrap = <b>Google searchword:</b> | # Referer if any 60 = TEXT 60.data = TSFE:fe_user|sesData|wt_referersession 60.wrap = <b>Referer:</b> | # Googleaddwords code 70 = TEXT 70.data = TSFE:fe_user|sesData|wt_googleaddscode 70.wrap = <b>Google adwords code:</b> | # IP address 100 = TEXT 100.data = getIndpEnv:REMOTE_ADDR 100.wrap = <b>IP Address:</b> | } } |
|
Verfasst am: 30. 09. 2009 [20:25]
|
|
|
warner3
Dabei seit: 12.06.2009
Beiträge: 42
|
hierzu ist eine kleine userFunc nötig - kann ich bei Interesse auch posten kannst du das mal posten? danke |
|
Verfasst am: 01. 10. 2009 [10:15]
|
|
|
einpraegsam.net
Moderator
Themenersteller
Dabei seit: 17.01.2005
Beiträge: 8849
|
z.B.: PHP <?php class user_pmgeoinfo { var $geoDBpath = 'fileadmin/conject/administration/scripts/GeoLiteCity.dat'; // path to geoip database var $ip = ''; // test some ip addresses (e.g. DEU: 83.236.183.130, UAE: 195.229.237.36, UAE: 87.200.131.139, RUS: 89.113.208.15) // Get country function country($content='', $conf=array()) { $this->geoInfo(); // init geoip if (!empty($this->GEOinfos['countryName'])) return $this->GEOinfos['countryName']; } // Get country ISO code function countryISO($content='', $conf=array()) { $this->geoInfo(); // init geoip $this->GEOinfos['countryCode'] = $this->changeISO_3_2($this->GEOinfos['countryCode']); // changes ISO code from 3 to 2 if (!empty($this->GEOinfos['countryCode'])) return $this->GEOinfos['countryCode']; } // Get city function city($content='', $conf=array()) { $this->geoInfo(); // init geoip if (!empty($this->GEOinfos['city'])) return $this->GEOinfos['city']; } // Get zipFromCity (Extension zip_distance neeeded) function zipFromCity($content='', $conf=array()) { // config global $TSFE; $this->cObj = $TSFE->cObj; // cObject $city = $this->cObj->cObjGetSingle($conf['userFunc.']['city'], $conf['userFunc.']['city.']); // get city from typoscript if (empty($city)) { // no city defined in typoscript $this->geoInfo(); // init geoip $city = $this->GEOinfos['city']; // Get city from geoinfo } // Let's go if (!empty($city)) { // only if city was given if (t3lib_extMgm::isLoaded('zip_distance')) { // if zip_distance is loaded $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery ( 'zip', 'tx_zipdistance', 'city = "'.$city.'"', '', '', '1' ); $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); if (!empty($row['zip'])) { $zip = ($conf['userFunc.']['cutAfter'] > 0 ? substr($row['zip'], 0, $conf['userFunc.']['cutAfter']).$conf['userFunc.']['fillWith'].$conf['userFunc.']['fillWith'].$conf['userFunc.']['fillWith'] : $row['zip']); return $zip; } } else die ('zip_distance not loaded!'); } else return false; // no city given } // Debut output with all available information function giveMeAll($content='', $conf=array()) { if (!empty($conf['userFunc.']['ip'])) $this->ip = $conf['userFunc.']['ip']; // set ip from typoscript $this->geoInfo(); // init geoip t3lib_div::debug($this->GEOinfos); } ####### // use geo ip if loaded function geoInfo() { if (t3lib_extMgm::isLoaded('geoip')) { require_once(t3lib_extMgm::extPath('geoip').'/pi1/class.tx_geoip_pi1.php'); $this->media = t3lib_div::makeInstance('tx_geoip_pi1'); $this->media->init($this->geoDBpath); // Initialize the Geoip Ext $this->GEOinfos = $this->media->getGeoIP(($this->ip ? $this->ip : t3lib_div::getIndpEnv('REMOTE_ADDR'))); // get all the infos } else die('geoip not loaded!'); } // function changeISO_3_2 changes country with ISO code 3 to ISO code 2 (DEU => DE, AUT => AT) function changeISO_3_2($country) { if (t3lib_extMgm::isLoaded('static_info_tables', 0)) { // if ext static_info_tables is loaded $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery ( 'cn_iso_2', 'static_countries', 'cn_iso_3 = "'.$country.'"', '', '', '1' ); $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); if (!empty($row['cn_iso_2'])) return $row['cn_iso_2']; } else die ('static_info_tables not loaded!'); } } ?> Extensions im Einsatz: - zip_distance - static_info_tables - geoip Erklärung gibt es aktuell leider nicht - ich denke, dass man allenfalls Teile herauskopieren und verwenden kann, weil der Rest einfach zu speziell ist... Cheers, Alex |
|
Verfasst am: 30. 06. 2010 [12:21]
|
|
|
MUSIKMANN
Dabei seit: 07.02.2008
Beiträge: 85
|
Moin Axel, genau so etwas habe ich noch gesucht. Nun habe ich die User-Func, also deine php-Datei kopiert und entsprechend im Ordner fildeamdin abgelegt. Die anderen Zeilen ins TS geschrieben und wollte durchstarten ... Leider keine Ausgabe der IP, des Referres und des Suchwortes. Ich habe gesehen, dass die Posts aus 2009 sind und wollte deshalb wissen, ob der Code auch mit Typo3 4.3.3 funktioniert ... Freue mich von dir zu hören... Musik & Gruss Gunnar |
|
Verfasst am: 30. 06. 2010 [12:27]
|
|
|
einpraegsam.net
Moderator
Themenersteller
Dabei seit: 17.01.2005
Beiträge: 8849
|
Sollte auch heute noch funktionieren... |
|
Verfasst am: 13. 07. 2010 [09:53]
|
|
|
MUSIKMANN
Dabei seit: 07.02.2008
Beiträge: 85
|
Hallo Axel, ich werde mich dann mal versuchen und hier meine Vorgehensweise mal Schritt für Schritt aufzeigen, denn einen Erfolg konnte ich bisher nicht erzielen. 1. Erstellen der Datei user_googlesession.php (Copie der Datei hier) 2. auf eigenen Space unter root/fileadmin/ legen 3. Eintrag ins TS (Konstanten) includeLibs.user_googlesession = fileadmin/user_googlesession.php page.100 = USER page.100.userFunc = user_googlesession->user_main 4. Eintrag ins TS (Konfiguration) plugin.tx_powermail_pi1 { prefill { uid206 = TEXT uid206.data = TSFE:fe_user|sesData|wt_googlesession|searchword uid203 = TEXT uid203.data = TSFE:fe_user|sesData|wt_googlesession|referer uid208 = TEXT uid208.data = TSFE:fe_user|sesData|wt_googlesession|ip } } Was habe ich falsch gemacht? [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 13.07.2010 um 09:53.] |
|
Verfasst am: 13. 07. 2010 [11:18]
|
|
|
einpraegsam.net
Moderator
Themenersteller
Dabei seit: 17.01.2005
Beiträge: 8849
|
Das lässt sich von hier aus schwer sagen. Mögliche Vorgehensweise: 1. Wird die userFunc auf jeder Seite aufgerufen? Testen mit einem Debugoutput. Falls nein, stimmt was mit der Einbindung nicht (Dateiname und Pfad überprüfen) 2. Werden die Daten wie ip, referer und natürlich auch das googlesuchwort überhaupt in die session eingetragen? Debugoutput der Sessiondaten in der userFunc vor und nach dem Eintrag in die Session!? Falls die Daten vor dem Eintrag da sind, aber nicht danach, stimmt das Sessionhandling eventuell nicht (Im Installtool nachsehen) 3. Beim Formularaufruf werden die Felder nicht vorbefüllt (Im Quelltext kontrollieren) etc... |



