field-collections als Radio-Buttons in webform

am 04.06.2014 - 15:18 Uhr in
Hallo,
- ich habe eine Webform, die als Block auf bestimmten Inhaltsseiten eingebaut wird (Anmeldeformular für diesen Inhalt),
- bei diesen Inhalten gibt es im Backend eine field-collection (mit jeweils 3 Elementen, die FCs beliebig oft)
- diese FCs will ich in der Webform des Inhaltes im Frontend (das Anmeldeformular) als Radio-Buttons zur Auswahl stellen
--> webform-Element select-option mit pre-built option list
--> die pre-built option list kommt aus webform_options_form_alter, wo ich mit field_collection_item_load die FC-Elemente aus der DB auslese und in das options-Array eintragen kann
das Problem:
in das option-Array können nur Strings eingetragen werden, die dann als Label der Radio-Buttons ausgegeben werden, ich hätte aber gerne die 3 Werte jeder Option getrennt und CSS-formatierbar neben dem Radio stehen, also muß da irgendwie HTML rein.
meine Lösung:
ich habe die 3 Werte als String zusammengefaßt ("wert1#wert2#wert3" - das wären jetzt die Radio-Labels), und dann in
function <my_theme>_form_element ($variables) {
$element = $variables['element'];
if($element['#type']=='radio') ...
den Label-String in
<span>wert1</span><span>wert2</span><span>wert3</span>
umgeschrieben (in der template.php).
das funktioniert im Prinzip, ABER:
da die Webform als Block auf den Inhalten eingebaut ist, muß die Webform über AJAX gesendet werden (weil sonst nur die Form statt des Inhaltes reloaded würde) - und da greift die <my_theme>_form_element
aus der template.php natürlich nicht mehr.
Das könnte man jetzt nur noch Client-seitig mit jQuery machen, aber das ist doch nicht die feine Drupal-Art!
In der Hoffnung, daß das verständlich war und jemand einen Tipp hat,
viele Grüße, Michael
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 14 Stunden 12 Minuten
vor 15 Stunden 47 Minuten
vor 1 Tag 7 Stunden
vor 1 Tag 9 Stunden
vor 1 Woche 1 Tag
vor 1 Woche 1 Tag
vor 1 Woche 1 Tag
vor 1 Woche 3 Tagen
vor 1 Woche 4 Tagen
vor 1 Woche 4 Tagen