Existierendes Feld mit Widget in selbstgeschriebenem Formular verwenden

veröffentlicht von um am Mi., 10.02.2016 - 11:49

Manchmal möchte man ein existierendes Feld in ein eigenes Formular einbauen, insbesondere wenn es einen schicken Widget hat wie z.B. simple hierarchical select (shs) für eine hierchische Taxonomie. Mit folgendem Code geht das ganz unkompliziert:


function my_module_custom_form($form, $form_state) {
  $form = array();

  // $form['#parents'] muss vorhanden sein, sonst gibt field_default_form() Fehler/Warnungen zurueck
  $form['#parents'] = array();

  // Existierendes Feld mit Widget z.B. shs
  $field_name = 'my_field';

  // Feldinfos
  $field = field_info_field($field_name);

  // Instanz fuer eine Entity, in der das Feld verwendet wird, hier fuer einen Node vom Typ 'my_node_type'
  $instance = field_info_instance('node', $field_name, 'my_node_type');

  // Ein Formular-Feld erzeugen
  $form_field = field_default_form('node', NULL, $field, $instance, LANGUAGE_NONE, NULL, $form, $form_state);

  // Das Feld dem Formular hinzufuegen
  $form += (array) $form_field;
  return $form;
}

Die ausgewählten Werte können wie sonst auch in  validate und submit hooks ausgewertet und weiterverarbeitet werden.

Neuen Kommentar hinzufügen