#states и вывод зависимого элемента формы

Главные вкладки

Аватар пользователя teqwer teqwer 7 ноября 2018 в 14:36

Добрый день!

Столкнулся с проблемой небольшой кастомизации формы добавления материалов.
В частности, например, хочу сделать чтобы при активном чекбоксе появлялся виджет поля для ввода номера телефона.
Использую следующий код:

<?php
function site_form_node_place_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state$form_id) {

  

$form['check'] = array(
  
'#type' => 'checkbox',
  
'#title' => 'Указать номер телефона',
   );
    
$form['field_phone'] = array(
      
'#states' => array(
        
'visible' => array(
          
':input[name="check"]' => array(
            
'checked' => TRUE,
          ),
        ),
      ),
    );
}
?>

При этом поле ввода телефона скрывается, но при щелчке по чекбоксу не отображается.
drush ws показывает:
Notice: Undefined index: #type в drupal_process_states()

При использовании кастомного поля, например:

<?php  $form['check'] = array(
  
'#type' => 'checkbox',
  
'#title' => 'Указать номер телефона',
    );
    
$form['55555'] = array(
      
'#type' => 'textfield',
      
'#states' => array(
        
'visible' => array(
          
':input[name="check"]' => array(
            
'checked' => TRUE,
          ),
        ),
      ),
    );
?>

#states работает как положено!

Подскажите пожалуйста как решить проблему?
Заранее благодарю!

Лучший ответ

Аватар пользователя fairrandir fairrandir 7 ноября 2018 в 14:44
1
<?php
$form
['field_phone']['#states'] = ...
?>

Вы перезаписываете $form['field_phone'], а не добавляете #states в него.

Комментарии

Аватар пользователя teqwer teqwer 7 ноября 2018 в 17:05

fairrandir wrote:

<span style="color: #000000"><span style="color: #0000BB">&lt;?php<br>$form</span><span style="color: #007700">[</span><span style="color: #DD0000">'field_phone'</span><span style="color: #007700">][</span><span style="color: #DD0000">'#states'</span><span style="color: #007700">]&nbsp;=&nbsp;...<br></span><span style="color: #0000BB">?&gt;</span></span>

Вы перезаписываете $form['field_phone'], а не добавляете #states в него.


Спасибо, так работает!