[РЕШЕНО] Form API: complete_form берет значение последнего поля.

Аватар пользователя Niklan

Внедряю модуль в форму редактирования системных блоков друпала.

Проблема в том, что если полей 2 и более, то при сохранении данных, в complete_form хранится во всех значение последнего поля.

Тот же самый код, только на собственной системе блоков работает удачно, а в стандартном фейлит.

<?php
function hook_form_block_admin_configure_alter(&$form, &$form_state) {
    
// Просто устанавливаем что будет 2 значения
    
$form_state['num_fields'] = 2;

    

// Создаем собственную вкладку в Visibility настройках блока
    
$form['visibility']['other'] = array(
      
'#type' => 'fieldset',
      
'#title' => t('other Settings'),
      
'#collapsible' => TRUE,
      
'#collapsed' => TRUE,
      
'#group' => 'visibility',
      
'#weight' => 0,
    );

    

// Генерим два текстовых поля
    
for ($i 1$i <= $form_state['num_fields']; $i++) {
      
$form['visibility']['other'][$i]['some'] = array(
        
'#type' => 'textfield',
        
'#title' => t('other Settings'),
      );
    }
    
    
$form['#submit'][] = 'hook_form_block_admin_configure_alter_submit';
  }

  return 

$form;
}

// Обработка субмита
function hook_form_block_admin_configure_alter_submit($form, &$form_state) {
  
// Выводим функцией от модуля Devel значения формы  
  
dpm($form_state);
}

?>

Т.е. я заплняю поля
Поле 1: "Значение 1"
Поле 2: "Значение 2"

Сохраняю, смотрю массив, результат такой:
Поле 1: "Значение 2"
Поле 2: "Значение 2"

И так хоть 100 полей, передаются данные во все из последнего. Уже день потратил, код до минимума свел, все равно не решилось. А тот же самый код, но в своей системе блоков, работает безупречно.

Подтолкните знатоки :)

Также хочу заметить что все выводил и за пределы группы "Visibility", результат тот же.

Решение в 2 комментарии.

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя Niklan
Niklan 5 лет назад

Проблема была в том, что эти оба инпута получали name="some"
Поэтому и получалось из последнего.
Хотя это глупо, ведь раньше то работало.
В старой версии, где все пахало и так вот какие нэймы генерировались:

other[1][some]

Вопрос еще в силе, почему через alter имена филдам даются криво.

Чтобы работало нужно будет юзать

<?php
 $form
['visibility']['other'][$i]['some' $i]
?>

Что вообще не кошерно.

Аватар пользователя Niklan
Niklan 5 лет назад

О МОЙ БОГ! Как же я не заметил такую мелочь:

'#tree' => TRUE

Проблема решена. Видать сессия плохо сказывается на мозговой деятельности не касающейся самой сессии :)