web-dev-qa-db-ja.com

「コンテナ」フォーム要素はいつ使用する必要がありますか?

Systemモジュールはcontainerフォーム要素を定義しますが、そのフォーム要素はフォームAPIリファレンスに記載されていません。

そのフォーム要素はいつ使用する必要がありますか?その目的は何ですか?

6
kiamlaluno

たとえば、フォームにクラスを追加できるように、divでフォームの一部をラップする場合に使用できるようです。

コアのいくつかの例は次のとおりです。

  • field_default_form()

    // Also aid in theming of field widgets by rendering a classified container.
    $addition[$field_name] = array(
      '#type' => 'container',
      '#attributes' => array(
        'class' => array(
         'field-type-' . drupal_html_class($field['type']),
         'field-name-' . drupal_html_class($field_name),
         'field-widget-' . drupal_html_class($instance['widget']['type']),
        ),
      ),
      '#weight' => $instance['widget']['weight'],
    );
    
  • node_filter_form()

    $form['filters']['status'] = array(
      '#type' => 'container',
      '#attributes' => array('class' => array('clearfix')),
      '#prefix' => ($i ? '<div class="additional-filters">' . t('and where') . '</div>' : ''),
    );
    $form['filters']['status']['filters'] = array(
      '#type' => 'container',
      '#attributes' => array('class' => array('filters')),
    );
    
  • search_form()

    $form['basic'] = array(
      '#type' => 'container',
      '#attributes' => array('class' => array('container-inline')),
    );
    

Drupalのフォーム6よく使われる#prefixおよび#suffixこれを行う最初/最後の要素。これは、アイテムを追加したり移動したりするのが簡単なため、はるかに優れています。

実際に、これを自分の提供したモジュールのいくつかの場所で使用できます。 ;)

8
Berdir

D6では、FAPI要素の周囲に<div>を追加する必要がある場合がよくありました(たとえば、#ahah/#ajaxを使用して)。そのため、containerの方が便利です#prefix/#suffixを使用してラッパーdivを追加するよりも、この一般的なパターンに対するForms APIに関する一貫したソリューション。

0
wildpeaks