ВопросИспользование #states в hook_form_alter

Здравствуйте. Пытаюсь решить вопрос по реализации зависимости полей в drupal 7. Из многочисленных вопросов, стало понятно что оптимально в 7ом друпале использовать #states, вместо conditional fields. Как оказалось еще одним камнем в этот модуль является проблема зависимости при использовании модуля multi_step.
В целом как работает #states, я разобрался. Но только понял как работает он при создании своей формы hook_form. Но моя задача заключается в том чтобы переделать уже готовую форму добавления материала.
hook_form_ID_FORM_alter
Использую её. Нахожу массивы через dsm($form);
Но не могу понять как правильно прописывать зависимости.
Допустим в созднаной форме это сделал так:

<?php $form['radio_type'] = array(
    '#type' => 'radios',
    '#options' => array(
      '0'   => t('Появляется выпадающая группа'),
      '1' => t('Не активно поле текст'),
      '2'      => t('Пропадают чекбоксы'),
    ),
    '#title' => t('Выберите действие')
  );
 
  $form['grupa'] = array(
    '#type' => 'fieldset',
    '#title' => t('Группа'),
    '#states' => array(
      'visible' => array(
        ':input[name="radio_type"]' => array('value' => '0'),
      ),
    ),
  );?>

В функции hook_from_alter (прописываю пока в template)
Пытаюсь сделать что то такое:

<?phpfunction theme_form_zavedeniya_node_form_alter(&$form, &$form_state, $form_id) {
   dpm($form); 
   $form['body']['und']['0']['value']['#states']  = array(
  'invisible' => array(
    ':input[name="field_sity2"]' => array('value' => '56'),
  ),
);
}?>

Т.е. делаю так чтобы при выборе в поле field_sity2 (ссылка на термин) при выборе 56ого значения пропадало поле body.
В общем ничего не работает. ПРобывал по разному, ну похоже что не разу не получилось правильно. Прошу совета.
P.S. Возможно еще могли бы посоветовать что использовать для создания многошаговой формы создания материала, с зависимыми полями. И чтобы в дальнейшем чтобы редактировать материал, его можно было бы редактировать через вкладки, а не по шагам.

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

По многошаговой форме почитать тут.

По поводу #states - обратите внимание, что когда альтерите чужую форму, надо смотреть на поле name. Например, у полей имена не просто field_name, а field_name[und]. По сути ведь #states работает на клиенте с помощью js, а посему надо передавать туда те name, которые видны клиенту на форме (чтобы посмотреть их можете воспользоваться фаербагом, к примеру).

20.10.2013 17:49
Аватар пользователя lionman
lionman написал:

Пробую вот так. Все равно не работает, что то уже запутался.
Добавил два поля. Одно просто текстовое. Второе список.
При выборе в списке 1ого значения текстовое поле становиться видимым.

Значения в firebug

<div class="form-item form-type-select form-item-field-vibor-und">
<label for="edit-field-vibor-und">Выбор значения </label>
<select id="edit-field-vibor-und" class="form-select" name="field_vibor[und]">
<option value="_none">- Не указано -</option>
<option value="0">Пропадает поле кафе</option>
<option value="1">Появляется поле кафе</option>
</select>
</div>

Сама функция в tempale

function corporateclean_form_tovar_node_form_alter(&$form, &$form_state, $form_id) {
   dsm($form); 
   dvm($form);
   $form['field_vibor_cafe']['#states']  = array(
'visible' => array(
'select[name=field_vibor[und]]' => array('value' => '1',),
),
);
}

Что уже не пробовал. Все равно не работает.

22.10.2013 09:52
Аватар пользователя lionman
lionman написал:

Все получилось. Не работало из-за ковычек
'select[name=field_vibor[und]]'
'select[name="field_vibor[und]"]'

Но не работает в разных шагах, через модуль multistep nodeform. БЛИИИИИИН. Че делать??????

22.10.2013 10:05
Аватар пользователя Spleshka
Spleshka написал:

Смотреть, почему не работает. Должно работать в мультистепе. Видимо, проблема на стороне загрузки js.

22.10.2013 15:48
Аватар пользователя lionman
lionman написал:

А как посмотреть?Web developer Ошибок не каких не выдает. Писали что мультистеп не работает на разных шагах с conditional fields, поэтому я решил попробовать #states. И здесь тоже не получается. Что то я в ступоре.

22.10.2013 15:53
Аватар пользователя lionman
lionman написал:

Что то похоже никто не знает ответ.

29.10.2013 06:31

Комментировать