Zum Inhalt springen

MailFormPlus: cookiedaten verwenden

Erstellt am 12. Juli 2008 · 1 Antwort · letzte Antwort am 12. Juli 2008

Tags: PHP, Tipp

sunfish ·

Hallo,
ich beschreibe hier, wie man z.B. Adress-Daten in einem cookie speichern und als defaultValues später wieder verwenden kann.

Datei mit den Funktionen zum Setzen und zum Auslesen des cookies anlegen.
typo3conf/ext/myExt/class.tx_myExt.php

<?php

require_once(PATH_tslib."class.tslib_pibase.php");

class tx_myExt extends tslib_pibase {   
	// save address data in a cookie array, that expires in 500 days
	function tx_set_address_cookie(&$params, &$ref)
	{		
		
		// $params['data'] = $this->get_post;
		$data = $params['data'];
		if( isset($data['saveaddress']) )
		{
			$cookiekeys = $params['config']['cookiekeys'];
			$cookiekeysArray = explode(",",$cookiekeys);
			
			foreach( $cookiekeysArray as $key )
			{
				if( isset($data[$key]) )
				{
					setcookie("address[$key]", $data[$key], time()+(3600*24*500),'/');
				}
				else
				{
					// delete cookie
					setcookie("address[$key]", '', time()-86400);
				}
			}
		} // if isset
		
	} // function tx_set_address_cookie
	
	
	function tx_get_address_cookie(&$params, &$ref)
	{						
		/*
		 * preprocUserFunc is started on the very first
		 * but later on, there remains only $ref->conf['predef.'][$predef] Array
		 * so the actual plugin $predef has to be known.
		 */
		$t = $ref->pi_initPIflexForm();
		$predef = $ref->pi_getFFvalue($ref->cObj->data['pi_flexform'], 'predefined', 'sDEFAULT');
		
		$cookieArray = $_COOKIE["address"];

		foreach( $cookieArray as $key => $value )
		{
			$ref->conf['predef.'][$predef]['fieldConf.'][$key.'.']['defaultValue.']['value']  = $value;
		}
		
	} // function tx_get_address_cookie
	
}
?>

Aufruf der Funktion um das Cookie zu setzen - per Typoscript-Setup. Im Beispiel werden nur Vorname und Nachname gespeichert und das auch nur, wenn die Checkbox mit dem Namen 'saveaddress' angeklickt war.

plugin.tx_thmailformplus_pi1.predef.myFormName {
  saveUserFunc = typo3conf/ext/myExt/class.tx_myExt.php:tx_myExt->tx_set_address_cookie
  saveUserFunc.cookiekeys = vorname,nachname
}

Aufruf um die Cookiedaten auszulesen und als defaultValues einzusetzen. preprocUserFunc wird ganz am Anfang von class tx_thmailformplus_pi1 gestartet. Die Funktion kann daher nicht mit einem predef-Eintrag aufgerufen werden.

plugin.tx_thmailformplus_pi1.preprocUserFunc = typo3conf/ext/myExt/class.tx_myExt.php:tx_myExt->tx_get_address_cookie

Werden die Pfade zur "Ergänzungs-Extension" relativ geschrieben werden, muss sie nicht als Extension nicht geladen sein. Die Klasse kann dann einfach so aufgerufen werden.