Comment afficher des champs si une checkbox est coché ?

Il peut être intéressant d'afficher des champs supplémentaires si une checkbox est coché dans un formulaire.

Pour ce faire nous allons créer un type checkbox, un type container et en exemple un type url ainsi qu'un textfield :

  $form['icones']['check'] = array(
    '#title' => t("Check"),
    '#type' => 'checkbox',
    '#weight' => 3,
    '#ajax' => array(
      'callback' => 'ajaxcheck',
      'wrapper' => 'ajaxcheck_div',
    ),
  );

  $form['icones']['containter'] = array(
    '#type' => 'container',
    '#states' => array(
      "visible" => array(
        "input[name='check']" => array(
          "checked" => TRUE,
        ),
      ),
    ),
  );

  $form['icones']['containter']['url'] = array(
    '#type' => 'url',
    '#title' => t("Lien"),
    '#weight' => 1,
    '#default_value' => theme_get_setting('lien'),
    '#required' => ($form_state->getValue('check') !== NULL ? ($form_state->getValue('check') == TRUE ? TRUE : FALSE) : FALSE),
    '#prefix' => '<div id="ajaxcheck_div">',
  );
  $form['icones']['containter']['titre'] = array(
    '#type' => 'textfield',
    '#title' => t("Titre"),
    '#weight' => 2,
    '#default_value' => theme_get_setting('titre'),
    '#required' => ($form_state->getValue('check') !== NULL ? ($form_state->getValue('check') == TRUE ? TRUE : FALSE) : FALSE),
    '#suffix' => '</div>',
  );

Cette exemple est pour Drupal 8.

Pour Drupal 7, il suffit de remplacer $form_state->getValue('check') par $form_state["values"]["check"]

Voici le résultat quand la checkbox n'est pas coché :

2017-12-20-164102.png

Une fois coché :

2017-12-20-164117.png