xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Темизация группы чекбоксов (#type => checkboxes)

Опубликовано в

Пример вывода элемента '#type' => 'checkboxes' в виде таблицы, где в первой колонке будут чекбоксы, а во второй обычный текст:

/**
 * Form builder.
 */
function modulename_test_form($form, &$form_state) {
  $form['checkboxes'] = array(
    '#type' => 'checkboxes',
    '#title' => 'Checkboxes',
    '#options' => array(
      1 => 'value1',
      2 => 'value2',
      3 => 'value3',
    ),
    // пример дополнительного параметра, который будет доступен в 
    // функции theme_checkboxes_table()
    '#extra_data' => array(
      1 => 'extra data 1',
      2 => 'extra data 2',
      3 => 'extra data 2',
    ),
    '#theme' => 'checkboxes_table', // функция темизации элемента
  );
 
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
  );
 
  return $form;
}
 
/**
 * Implements hook_theme().
 */
function modulename_theme() {
  return array(
    'checkboxes_table' => array(
      'render element' => 'element',
    ),
  );
}
 
/**
 * Render checkboxes as table.
 */
function theme_checkboxes_table($vars) {
  $element = $vars['element'];
  $rows = array();
  foreach (element_children($element) as $key) {
    unset($element[$key]['#title']);
    $rows[] = array(
      drupal_render($element[$key]),
      $element['#extra_data'][$key],
    );
  }
  return theme('table', array('rows' => $rows));
}

Результат:

То же самое можно сделать и с одиночными чекбоксами — Создание табличной формы

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Хм. Я делаю проще:

$header = array('name' => t('Payments'));
$query   = db_select('payments', 'pays')
    ->fields('pays', array('id', 'title'))
    ->extend('PagerDefault') 
    ->limit(25)
    ->execute();
foreach($query as $key=>$val){
$row  = (array)($val);
$id = $val['id']; unset($val['id']);
$rows[$id] = $row;
}
$form['payments'] = array(
    '#type' => 'tableselect',
    '#header' => $header,
    '#options' => $rows,
    '#empty' => t('No data.'),
);
$form['pager'] = array('#markup' => theme('pager'));
return $form;

И можно работать как с обычной формой.

Опечатка, должно быть так:
$header = array('title' => t('Payments'));
Рабочий пример можно посмотреть здесь:
https://github.com/servekon/payonline-hcs/blob/master/payonline_hcs.admi...
Строка 229(функция payonline_hcs_viewpayment)

Это пример темизации конкретного элемента. Вместо таблицы здесь могли бы быть какие-нибудь вкладки или любая другая разметка.

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

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании