Poziome elementy formy

12

Opisałem formę, ale każdy element znajduje się pod poprzednim. Muszę opisać formę, w której wszystkie elementy będą umieszczone poziomo, ale nie pionowo. To jest moja forma:

function contact_register_form($form, &$form_state) {
  $form['description'] = array(
    '#type' => 'item',
    '#title' => t('Sign up to be notified when your community launches:'),
  );

  $form['email'] = array(
    '#type' => 'textfield',
    '#title' => t('Email'),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Add me',
  );    

  return $form;
}
RomanBadiornyi
źródło

Odpowiedzi:

17

Możesz użyć kodu podobnego do poniższego, używanego przez moduł Node w node_filter_form().

  // Build the 'Update options' form.
  $form['options'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Update options'), 
    '#attributes' => array('class' => array('container-inline')), 
    '#access' => $admin_access,
  );

  // ...

  $form['options']['operation'] = array(
    '#type' => 'select', 
    '#title' => t('Operation'), 
    '#title_display' => 'invisible', 
    '#options' => $options, 
    '#default_value' => 'approve',
  );

Kluczem są ustawienia wiersza atrybutu „#attributes” dla „kontener-inline”.

Ten kod dotyczy Drupala 7; równoważny kod dla Drupal 6 zaczyna się od następującego kodu:

  $form['options'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Update options'), 
    '#prefix' => '<div class="container-inline">', 
    '#suffix' => '</div>',
  );

Załóżmy, że używasz Drupala 6, a następnie twój kod powinien zostać zmieniony na coś podobnego do następującego:

function contact_register_form($form, &$form_state) {
  $form['description'] = array(
    '#type' => 'item',
    '#title' => t('Sign up to be notified when your community launches:'),
  );

  $form['email'] = array(
    '#type' => 'textfield',
    '#title' => t('Email'),
    '#prefix' => '<div class="container-inline">', 
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Add me',
    '#suffix' => '</div>',
  );    

  return $form;
}

Nie wstawiłem opisu, ponieważ nie byłby poprawnie renderowany, ponieważ używa pola formularza „item”. Uważam również, że wstawienie opisu spowoduje, że formularz zajmie zbyt dużo miejsca. (Wyobraź sobie, co by się stało, gdyby wstawiony opis byłby dłuższy i umieszczony w jednym wierszu).

Style CSS, które Drupal 7 dodaje do elementów wbudowanych w kontener, są następujące.

/**
 * Inline items.
 */
.container-inline div,
.container-inline label {
  display: inline;
}
/* Fieldset contents always need to be rendered as block. */
.container-inline .fieldset-wrapper {
  display: block;
}

Są dodawane z system.base.css .

kiamlaluno
źródło
1
I nie zapomnij zastosować floatw container-inlineklasie CSS a .
tostinni
Czy można to zrobić bez kodu? Mam bardzo dobrą kontrolę nad wyświetlaniem formularzy, ale z wyjątkiem kilku kolumn w DS extra, ale nic szczegółowego jak moduł układu formularza dla danych wejściowych formularza
Bruno Vincent,