[hook_form_alter()]CKK Felder als Radio Buttons in Webform anzeigen
am 23.02.2011 - 22:23 Uhr in
Hi Leute,
ich mach` mal ein neues Thema auf - auch wenn es quasi zusätzlich zu einem alten Thema von mir ist. Falls das ein Problem sein sollte - bitte einfach löschen :-)
===============
In dem alten Thema ging es darum per $_GET Variable bestimmte CCK Felder eines Nodes in eine Webform zu bringen.
Hier der Link: http://www.drupalcenter.de/node/33297
Jetzt wollte ich in meinem Inhaltstyp zwei neue CCK Felder eintragen und diese per hook_form_alter() als Radio Buttons in der Webform ausgeben.
Zusätzlich: Wenn nur ein Feld eingetragen ist, soll auch nur ein Radio Button erscheinen.
Aber irgendwie bekomme ich das nicht hin... :/ Ich hoffe Ihr könnt mir helfen :-)
Hier mein versuch:
case 'webform_client_form_7':
dsm($form);
$my_number = $_GET['id'];
$first_field = $my_node->field_cckfield[0]['value'];
$form['submitted']['reisedaten']['preis1']['#webform_component']['extra']['items'] = $first_field;
break;
Ich hab auch mal den dsm screen angehängt :-)
Vielen Dank schonmal!
Monsi
Anhang | Größe |
---|---|
dsm.jpg | 414.35 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Wieso legst du sie denn nicht
am 24.02.2011 - 10:25 Uhr
Wieso legst du sie denn nicht gleich als Radio Buttons an?
-----------
Luca Curella
Kooperative Netze - Berlin
Ich hab` einen Radio Button
am 24.02.2011 - 10:37 Uhr
Ich hab` einen Radio Button bzw. eine Select Option angelegt. Nur würde ich gerne die Optionen auf Grund mehrer CCK Felder befüllen.
Es handelt sich um Touren (Inhaltstyp: tour). Diese Touren haben unterschiedliche Preise, manchmal sogar zwei, welche dann zur Auswahl stehen sollen.
Tour 1 -> Preis 1: 100€ / Preis 2: nix => 1 Radio Button in der Webform
Tour 2 -> Preis 1: 500€ / Preis 2: 550€ => 2 Radio Buttons in der Webform
Ich hoffe es war verständlich. :-)
ich bin jetzt schonmal etwas
am 25.02.2011 - 00:14 Uhr
ich bin jetzt schonmal etwas weiter ....
<?php
$form['submitted']['reisedaten']['preis1'] = array(
'#type' => 'radios',
'#default_value' => variable_get('Preis 1', 'Preis 2'),
'#options' => array('Preis 1', 'Preis 2'),
'#required' => TRUE,
);
?>
So werden mir zwei Radio Buttons ins Formular gesetzt. Sende ich dies aber ab, erhalte ich in der E-Mail entweder keine Ausgabe (bei Option 'Preis 1') oder bei der anderen Option nur "1" (als Ausgabe)....
Auserdem werden die Radios nicht auf "erforderlich" gesetzt.
Monsi
// Nachtrag:
<?php
$form['submitted']['reisedaten']['preis1'] = array(
'#type' => 'radios',
'#title' => t('Preise'),
'#default_value' => variable_get('Preis', 1),
// '#options' => array('Preis 1', 'Preis 2'),
'#options' => array($mytest => $mytest, $mytest2 => $mytest2),
'#weight' => 3,
'#required' => TRUE,
);
?>
So bekomme ich einen Eintrag in der E-Mail. Aber wenn z.B. eine Zahl im Radio Button ist, bekomme ich den Fehler "Es wurde eine nicht erlaubte Auswahl entdeckt. Wenden Sie sich bitte an den Administrator der Website." :/
Ich bin gestern noch etwas
am 25.02.2011 - 09:11 Uhr
Ich bin gestern noch etwas weiter gekommen ...
<?php
$mytest = $my_node->field_challange[0]['value'];
// $mytest = 'asdf';
$mytest2 = 'blah';
$form['submitted']['reisedaten']['preis1'] = array(
'#type' => 'radios',
'#title' => t('Preise'),
'#default_value' => $mytest,
'#options' => array($mytest => $mytest, $mytest2 => $mytest2),
'#weight' => 3,
// '#required' => TRUE,
);
?>
So bekomme ich auch eine Ausgabe in der E-Mail.
Wähle ich allerdings eine Option aus, die über ein CCK Feld eingetragen wird, bekomme ich den Fehler "Es wurde eine nicht erlaubte Auswahl entdeckt. Wenden Sie sich bitte an den Administrator der Website.".
Schreibe ich die Variable "normal", funktionierts wieder ... hat jemand eine Idee warum? :-/
Was ergibt denn: <?php
am 25.02.2011 - 10:11 Uhr
Was ergibt denn:
<?php
$mytest = $my_node->field_challange[0]['value'];
print $mytest;
?>
-----------
Luca Curella
Kooperative Netze - Berlin
netzkoop schrieb Was ergibt
am 25.02.2011 - 10:21 Uhr
Was ergibt denn:
<?php
$mytest = $my_node->field_challange[0]['value'];
print $mytest;
?>
Das gibt mir den Wert zurück, welcher im CCK Feld eingetragen ist. Das Ganze sieht so weit auch schon ganz gut aus ... solange bis man auf "Absenden" klickt. ;-)
Poste doch mal die ganze
am 25.02.2011 - 12:28 Uhr
Poste doch mal die ganze function und wo du sie aufrufst...
-----------
Luca Curella
Kooperative Netze - Berlin
Ok, das ist meine
am 25.02.2011 - 12:46 Uhr
Ok, das ist meine function:
<?php
function set_field_value_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'webform_client_form_7':
// dsm($form);
$my_number = $_GET['id'];
$my_node = node_load($my_number);
$first = $my_node->field_date[0]['value'];
$mytest = $my_node->field_challange[0]['value'];
// $mytest = 'asdf';
$mytest2 = 'blah';
$form['submitted']['reisedaten']['reise']['#default_value'] = $first;
$form['submitted']['reisedaten']['preis1'] = array(
'#type' => 'radios',
'#title' => t('Preise'),
'#default_value' => $mytest,
'#options' => array($mytest => $mytest, $mytest2 => $mytest2),
'#weight' => 3,
// '#required' => TRUE,
);
break;
}
}
?>
Im ersten Schritt hole ich mir die ID aus der URL. Über "node_load" und der ID hole ich mir dann die entsprechenden Felder aus der Node. Dieses CCK Feld gebe ich dann im textfield "reise" aus.
Im zweiten Schritt hole ich mir wieder ein CCK Feld aus der Node und gebe dieses dann in den Radio Buttons aus.
Wähle ich dann die Option, welche von $mytest definiert wird, bekomme ich oben besagten Fehler (Ausgabe an sich sitmmt aber). Wähle ich die Option von $mytest2, funktioniert alles wunderbar. Benutze ich die auskommentierte Variable anstelle des CCK Feldes, funktioniert auch alles wunderbar. :-/
Ich bin jetzt sogar schonmal
am 25.02.2011 - 17:28 Uhr
Ich bin jetzt sogar schonmal einen anderen Weg gegangen, und hab versucht den Preis über die Taxonomie zu vergeben (Die Touren sind in verschiedene Kategorien eingeteilt).
Könnte mir mal jemand den unterschied zischen dem:
(funktioniert)
<?php
$mytest = 'asdf1';
$mytest2 = 'blah1';
$form['submitted']['reisedaten']['preis1'] = array(
'#type' => 'radios',
'#title' => t('Preise'),
'#default_value' => $mytest,
'#options' => array($mytest => $mytest, $mytest2 => $mytest2),
'#weight' => 3,
// '#required' => TRUE,
);
?>
und diesem nennen:
(funktioniert nicht)
<?php
if (count($my_node->taxonomy) > 0) {
foreach ($my_node->taxonomy as $term) {
$term_id = $term->tid;
}
}
switch ($term_id) {
case '1':
$mytest = 'asdf1';
$mytest2 = 'blah1';
break;
case '2':
$mytest = 'asdf2';
$mytest2 = 'blah2';
break;
}
$form['submitted']['reisedaten']['preis1'] = array(
'#type' => 'radios',
'#title' => t('Preise'),
'#default_value' => $mytest,
'#options' => array($mytest => $mytest, $mytest2 => $mytest2),
'#weight' => 3,
// '#required' => TRUE,
);
?>
Beim zweiten Beispiel bekomme ich wieder die bekannte Fehlermeldung ... aber warum?? :-/
Wo definierst du eigentlich
am 26.02.2011 - 11:45 Uhr
Wo definierst du eigentlich die Funktion und wo rufst du sie auf? In einem Modul? Template?
-----------
Luca Curella
Kooperative Netze - Berlin
Ach so meintest du das ...
am 26.02.2011 - 16:07 Uhr
Ach so meintest du das ... ich mach das über ein Modul.
Ich hab gerade nochmal die
am 26.02.2011 - 22:34 Uhr
Ich hab gerade nochmal die Fehlermeldung gegoogelt und hier herausgefunden, dass sie in
includes/form.inc:699 ;705 modules/filter/filter.module:530 erzeugt wird.
Vielleicht bringt dich das weiter...
Mach doch nochmal in beiden Fällen ein var_dump() von $mytest
-----------
Luca Curella
Kooperative Netze - Berlin