hook form #states visible ##gelöst
am 12.03.2015 - 13:38 Uhr in
Hallo zusammen!
Ich lasse mehrere contenttyps und entsprechende felder über die installation meines modules erstellen.
in einem contenttype möchte ich beim erstellen von inhalt ein feld nur anzeigen lassen wenn eine bedingung, nämlich wenn checkbox = 0 ist
hier der code. wenn ich das so hochlade sehe ich das feld erst einmal gar nicht mehr. ist ja korrekt es sollte aber erscheinen wenn ich auf FATCLIENT klicke.
Kann da jemand helfen.
danke vorab
$fields['device'] = array(
'device_type' => array(
'field_name' => 'field_scs_d_type',
'type' => 'list_boolean',
'label' => t('Devicetype'),
'widget' => array(
'type' => 'options_onoff',
),
'settings' => array(
'allowed_values' => array(
'0' => 'FATCLIENT',
'1' => 'THINCLIENT',
'2' => 'BOX H',
'3' => 'BOX S',
),
),
),
'serial_scanner' => array(
'field_name' => 'field_scs_d_serial_scanner',
'type' => 'text',
),
$instances['field_scs_d_type'] = array(
'field_name' => 'field_scs_d_type',
'type' => 'list_text',
'label' => $t('Item type'),
'required' => true,
'default_value' => array(1),
) + $attach;
$instances['field_scs_d_serial_scanner'] = array(
'field_name' => 'field_scs_d_serial_scanner',
'type' => 'text',
'label' => $t('Serial Scanner'),
) + $attach;
function sinacards_form_alter(&$form, $form_state, $form_id) {
//########################ALTER FORM DEVICE################################
if ($form['#form_id'] == 'sinacards_device_node_form') {
//$form['actions']['submit']['#submit'][] = 'sinacards_account_submit';
$form['hardware'] = array( // do NOT name the same as a 'Field group' fieldset or problems will occur
'#type' => 'fieldset',
'#title' => t('Hardware'),
'#weight' => 2,
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$fields = array('field_scs_d_serial_box', 'field_scs_d_serial_monitor', 'field_scs_d_serial_keyboard', 'field_scs_d_serial_mouse', 'field_scs_d_serial_mc1', 'field_scs_d_serial_mx2', 'field_scs_d_serial_printer', 'field_scs_d_serial_scanner');
$form['hardware']['field_scs_d_serial_scanner'] = $form['field_scs_d_serial_scanner'];
unset($form['field_scs_d_serial_scanner']);
$form['hardware']['field_scs_d_serial_scanner'] = array(
'#states' => array(
'visible' => array(
':input[name="field_scs_d_type"]' => array('value' => '0'),
),
),
);
}
}- Anmelden oder Registrieren um Kommentare zu schreiben

Aktionen, die im Formular
am 12.03.2015 - 14:16 Uhr
Aktionen, die im Formular passieren sollen, sind doch rein Client-basiert. Dazu braucht man dann aber ein JavaScript/jQuery Programm, das auf dem Client die entsprechenden Aktionen auslöst (z.B. ein Feld sichtbar schalten).
wla schrieb Aktionen, die im
am 12.03.2015 - 15:38 Uhr
Aktionen, die im Formular passieren sollen, sind doch rein Client-basiert. Dazu braucht man dann aber ein JavaScript/jQuery Programm .....
Genau das wird ja mit dem #states Array getan.
@Andre: Und die Sprache wird nicht berücksichtigt? Guck doch mal mit Firebug, ob dir Drupal statt:
name="field_scs_d_type" nicht etwa name="field_scs_d_type['und'] für das DOM generiert.
Danke für die Antworten und
am 12.03.2015 - 20:18 Uhr
Danke für die Antworten und Tipps.
Es wird tatsächlich "field_scs_d_type[und]" generiert.
Leider klappt es auch dann nicht.
Stimmt vieleicht mit meinem hook_forms_alter nicht?
in einem anderen Modul klappt es ja.
Nur generiere ich die form nicht über den contentype sondern direkt mit function ###_form($form, &$form_state);
ich habs jetzt mal auf ein
am 12.03.2015 - 20:24 Uhr
ich habs jetzt mal auf ein fieldset angewendet
und siehe da, da gehts.
Warum nicht auf felder?
#states sind kein Problem für
am 13.03.2015 - 09:34 Uhr
#states sind kein Problem für Felder. Ich würde eher darauf tippen, dass das Problem aus dieser Struktur im hook_form_alter() rührt:
$form['hardware']['field_scs_d_serial_scanner'] = $form['field_scs_d_serial_scanner'];unset($form['field_scs_d_serial_scanner']);
Mal davon abgesehen, dass sich mir der Sinn nicht erschließt.
ich baue mit [hardware] ein
am 13.03.2015 - 18:12 Uhr
ich baue mit [hardware] ein fieldset um alle felder die ich enthalten haben möchte.
mit unset($form['field_scs_d_serial_scanner']) entnehme ich das ursprungsfeld der Form, da ich sonst zwei felder vorfinde nämlich
['hardware']['field_scs_d_serial_scanner']
und
['field_scs_d_serial_scanner']
Oder was ist etwas anderes unklar?
vg