Webform - E-Mail-Empfänger über form_alter ändern
am 23.06.2009 - 09:34 Uhr in
Ich habe auf einer Seite eine Webform, die wie folgt aufgerufen wird http://www.seite.de/kontakt?id=43 - über die GET-Variable id wird eine NodeId übergeben, die dann über ein kleines Modul ausgewertet wird.
<?php
function wfalter_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'webform_client_form_31') {
if(is_numeric($_GET['id']) ) {
//drupal_set_message(print_r($form));
// Kontakt-Adresse auslesen
$emailadr = getContactMail($_GET['id']);
if($emailadr!="") {
$form['#parameters'][2]->webform['email'] = $emailadr;
watchdog("info","mail sending to ".$emailadr);
}
}
}
return $form;
}
/*
* E-Mail-Adresse auslesen vom Inhaltstyp Mitarbeiter
*/
function getContactMail($nid) {
$email_result = db_query('SELECT field_email_value FROM {content_type_mitarbeiter} WHERE nid = %d', $nid);
$ar_mail = db_fetch_array($email_result);
return $ar_mail['field_email_value'];
}
?>
Wie am Code zu erkennen ist, wird einfach die der der hook form_alter verwendet um die Mailadresse des Mitarbeiters auszulesen.
Die Ausgabe im WatchDog liefert auch die korrekten Ergebnisse. Nur funktioniert das Überschreiben der WebForm Paramater über
$form['#parameters'][2]->webform['email'] = $emailadr;
nicht - hier die Variable $emailadr enthält die korrekten Werte..
Was mach ich hier falsch ?
Oder ist mein Ansatz über den Hook form_alter falsch gewählt ?
Gruß,
SteffenR
- Anmelden oder Registrieren um Kommentare zu schreiben
hook_nodeapi
am 23.06.2009 - 10:18 Uhr
Moin.
Wie bereits gerade im IRC erwähnt, kannst Du die Empfängeradresse(n) nicht über
hook_form_alter
verändern. Diese werden nämlich direkt aus der Webform-Node geladen (inwebform_client_form_submit
).Dementsprechend dürfte
hook_nodeapi
in Verbindung mit$op == 'load'
weiterhelfen (in einem eigenen Modul).hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Vielen Dank noch mal für
am 25.06.2009 - 06:55 Uhr
Vielen Dank noch mal für deine Hilfe..
Da ich direkt die Mailadresse überschreiben wollte, an die das Formular gehen sollte, habe ich den Empfänger wie folgt überschrieben:
<?php
function modulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case "load":
if($node->nid==31 && $node->type=="webform") {
$node->webform['email'] = "mail@domain.de";
}
break;
}
}
?>
Für feste Werte passt diese Lösung - wenn man nun aber die Werte dynamisch ausliest, werden diese durch die Verarbeitung in der Webform wieder durch den Standardwerte überschrieben..
Hab das gerad mit derhasi im #drupal.de diskutiert. Scheint wohl ein Webform Bug zu sein.
Eine mögliche Lösung
Um das Problem nun doch zu lösen, werd ich mir ein kleines Modul basteln, mit dem ich das ja doch recht einfache Formular nachbilde - hier kann ich dann auf einfache Art die $_GET Variablen im hook_submit bearbeiten..
<?php
function modulename_kontakt_form_submit($form, &$form_state) {
$params = $form_state['values']; // Übergabewerte auslesen
$from = $mailfrom;
$emailadr = _modulename_getMailAdress($get_id);
// call mail function and send email
drupal_mail('callback_block', 'notice',$emailadr , "de", $params,$from);
drupal_set_message(t('Vielen Dank für Ihre Nachricht. Wir werden uns in Kürze bei Ihnen melden.'));
$form_state['redirect'] = '';
}
?>
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.