.lowfidelity heavy industries blog
![]() 06
Dec 11 Drupal Core bietet die Möglichkeit einem Benutzerprofil benutzerdefinierte Felder hinzu zu fügen. Dazu muss das "Profile" Modul aus dem Core Optional Paket aktiviert werden (/admin/build/modules). Benutzerdefinierte Felder werden unter /admin/user/profile erstellt. Um einen neuen Nutzer mit einer vollständig personalisierten Willkommens Email zu begrüßen, wär es wünschenswert diese Felder in die Emails ein zu binden, die vom System automatisch generiert werden (/admin/user/settings -> User e-mail settings -> Welcome, no approval required etc). Die saubere Lösung, um bei einem Drupal Upgrade nicht zu riskieren, dass die Änderungen wieder verloren gehen, wäre es sinnvoll ein Modul zu schreiben und via hook_mail_alter ein zu binden; als von Deadlines getriebener Coder wird man aber, Wohl oder Übel, auf einen schmutzigen Core-Hack zurückgreifen. Wie man vermutet, finden sich die notwendigen zeilen Code am Server im File [drupal root]/modules/user/user.module.
Titel -> profile_titel
Vorname -> profile_vorname und Nachname -> profile_nachname als Felder die bei der Registrierung ausgefüllt werden müssen hinzugefügt. Um die custom profile fields als Variablen fuer die System Email Nachrichten verfuegbar zu machen, muss lediglich die User Info via user_load geladen werden und als Feld im $tokens Array hinzugefuegt werden. Im nachfolgenden Code laden wir zuerst das Benutzer Objekt in die Variable $user:
//hack
// get custom profile fields into this array $user = user_load(array('uid'=>$account->uid)); Weiter unten im Code, werden die gewuenschten Felder in das $tokens Array geladen
/* hacked here */
'!titel' => $user->profile_titel, '!vorname' => $user->profile_vorname, '!nachname' => $user->profile_nachname, Im Gesamten würde die neue Funktion in etwa so aussehen:
/**
* Return an array of token to value mappings for user e-mail messages.
*
* @param $account
* The user object of the account being notified. Must contain at
* least the fields 'uid', 'name', and 'mail'.
* @param $language
* Language object to generate the tokens with.
* @return
* Array of mappings from token names to values (for use with strtr()).
*/
function user_mail_tokens($account, $language) {
global $base_url;
//hack
// get custom profile fields into this array
$user = user_load(array('uid'=>$account->uid));
$tokens = array(
'!username' => $account->name,
'!site' => variable_get('site_name', 'Drupal'),
'!login_url' => user_pass_reset_url($account),
'!uri' => $base_url,
'!uri_brief' => preg_replace('!^https?://!', '', $base_url),
'!mailto' => $account->mail,
'!date' => format_date(time(), 'medium', '', NULL, $language->language),
'!login_uri' => url('user', array('absolute' => TRUE, 'language' => $language)),
'!edit_uri' => url('user/'. $account->uid .'/edit', array('absolute' => TRUE, 'language' => $language)),
/* hacked here */
'!titel' => $user->profile_titel,
'!vorname' => $user->profile_vorname,
'!nachname' => $user->profile_nachname,
);
if (!empty($account->password)) {
$tokens['!password'] = $account->password;
}
return $tokens;
}
Um einem Benutzer, der sich selbst auf der Seite einen Account registriert hat mit einem personalisierten Willkommens Mail zu begrüßen muß im letzten Schritt die Email Vorlage bearbeitet (/admin/user/settings) und die neu verfuegbaren Variablen hinzugefügt werden:
Sehr geehrte(r) !titel !vorname !nachname,
Vielen Dank für Ihre Registrierung bei !site. Sie können den Kundenbereich unter !login_uri erreichen. Ihre Zugangsdaten lauten: Username: !username Klicken Sie auf nachfolgenden Link um sich gleich ein zu loggen und Ihr Passwort zu ändern: !login_url Dieser Link funktioniert nur einmalig. Nach dem Einloggen werden Sie aufgefordert Ihr Passwort unter !edit_uri zu ändern. Mit freundlichen Grüßen !site
|






