Drupal: вывод элементов формы в одну строку

Как вывести элементы формы в одну строку?
Варианты решения нашлись быстро:

  1. через вызов функций темизации
  2. через контейнер для полей формы

Пишу модуль, писать кода придется много, и даже не смотря на это, мне стало лень 🙂 писать еще и код функций для первого варианта.
2-й вариант очень близок к тому, что мне нужно. Единственное что меня не устраивало – все элементы в контейнере выводятся в одну строку и при при превышении ширины div'а переносятся на новую. Ниже приведен вариант с контейнером:

  1. // Собственно сам контейнер
  2.   $form['fields_wrapper'] = array(
  3.     '#type' => 'fieldset',
  4.     '#title' => t('Container'),
  5.     '#collapsible' => TRUE,
  6.     '#collapsed' => FALSE,
  7.     '#prefix' => '<div class="container-inline">',
  8.     '#suffix' => '</div>',
  9.   );
  10.  
  11. // '#prefix' и '#suffix' - именно они решают задачу
  12.   $form['fields_wrapper']['field_1'] = array(
  13.     '#type' => 'textfield',
  14.     '#title' => t('Field 1'),
  15.     '#size' => 10,
  16.     '#maxlength' => 32,
  17.     '#required' => TRUE,
  18.   );
  19.   $form['fields_wrapper']['field_2'] = array(
  20.     '#type' => 'textfield',
  21.     '#title' => t('Field 2'),
  22.     '#size' => 10,
  23.     '#maxlength' => 32,
  24.     '#required' => TRUE,
  25.   );

Как любит говорить наш админ - все просто как тапочки.
Но мне надо вывести N пар полей, каждую пару в свой контейнер? - некрасиво и громоздко. Давайте заглянем в "тайные записи" документации - Forms API Reference... Оказывается, аттрибуты '#prefix' и '#suffix' свойственны всем возможным элементам формы - это как раз то что нужно. Ниже приведен пример с двумя парами полей, аттрибуты '#prefix' и '#suffix' у контейнера убраны и перенесены - '#prefix' для field_1_1 и field_2_1, а '#suffix' для field_1_2 и field_2_2.

// Собственно сам контейнер
  $form['fields_wrapper'] = array(
    '#type' => 'fieldset',
    '#title' => t('Container'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
 
  $form['fields_wrapper']['field_1_1'] = array(
    '#type' => 'textfield',
    '#title' => t('Row 1 / Field 1'),
    '#size' => 10,
    '#maxlength' => 32,
    '#required' => TRUE,
    '#prefix' => '<div class="container-inline">',
  );
 
  $form['fields_wrapper'][ 'fields_1_2'] = array(
    '#type' => 'textfield',
    '#title' => t('Row 1 / Field 2'),
    '#size' => 10,
    '#maxlength' => 32,
    '#required' => TRUE,
    '#suffix' => '</div>',
 );
 
  $form['fields_wrapper']['field_2_1'] = array(
    '#type' => 'textfield',
    '#title' => t('Row 2 / Field 1'),
    '#size' => 10,
    '#maxlength' => 32,
    '#required' => TRUE,
    '#prefix' => '<div class="container-inline">',
  );
 
  $form['fields_wrapper'][ 'fields_2_2'] = array(
    '#type' => 'textfield',
    '#title' => t('Row 2 / Field 2'),
    '#size' => 10,
    '#maxlength' => 32,
    '#required' => TRUE,
    '#suffix' => '</div><p>',
  );

Ни тебе излишних контейнеров, ни тебе лишнего кода.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *