Созонов Алексей

Веб-разработчик

Таблица с checkboxes / radios drupal

09.08.2015

Порой нужно добавить на страницу таблицу с чекбоксами или радио-кнопками для обработки большого количества данных. Вот рецепт, как это сделать:

<?php
// подготавливаем данные
$users = array
(
  array('uid' =&gt; 1, 'first_name' =&gt; 'Indy', 'last_name' =&gt; 'Jones'),
  array('uid' =&gt; 2, 'first_name' =&gt; 'Darth', 'last_name' =&gt; 'Vader'),
  array('uid' =&gt; 3, 'first_name' =&gt; 'Super', 'last_name' =&gt; 'Man'),
);

// задаем заголовок таблицы
$header = array
(
  'first_name' =&gt; t('First Name'),
  'last_name' =&gt; t('Last Name'),
);

// формируем строки и столбцы
$options = array();
foreach($users as $user)
{
  $options[$user['uid']] = array // each element of the array is keyed with the UID
  (
    'first_name' =&gt; $user['first_name'], // 'first_name' was the key used in the header
    'last_name' =&gt; $user['last_name'], // 'last_Name' was the key used in the header
  );
}

// если мы хотим чекбоксы
$form['table'] = array
(
  '#type' =&gt; 'tableselect',
  '#header' =&gt; $header,
  '#options' =&gt; $options,
);

// если мы хотим radios
$form['table'] = array
(
  '#type' =&gt; 'tableselect',
  '#header' =&gt; $header,
  '#options' =&gt; $options,
  '#multiple' =&gt; TRUE,
);

// запрещаем выбрать сразу все
$form['table'] = array
(
  '#type' =&gt; 'tableselect',
  '#header' =&gt; $header,
  '#options' =&gt; $options,
  '#js_select' =&gt; FALSE,
);

В итоге:

function my_form($form, $form_state)
{
  $users = array
  (
    array('uid' =&gt; 1, 'first_name' =&gt; 'Indy', 'last_name' =&gt; 'Jones'),
    array('uid' =&gt; 2, 'first_name' =&gt; 'Darth', 'last_name' =&gt; 'Vader'),
    array('uid' =&gt; 3, 'first_name' =&gt; 'Super', 'last_name' =&gt; 'Man'),
  );

  $header = array
  (
    'first_name' =&gt; t('First Name'),
    'last_name' =&gt; t('Last Name'),
  );
  $options = array();
  foreach($users as $user)
  {
    $options[$user['uid']] =array
    (
      'first_name' =&gt; $user['first_name'],
      'last_name' =&gt; $user['last_name'],
    );
  }
  $form['table'] = array
  (
    '#type' =&gt; 'tableselect',
    '#header' =&gt; $header,
    '#options' =&gt; $options,
    '#empty' =&gt; t('No users found'),
  );
  $form['submit'] = array
  (
    '#type' =&gt; 'submit',
    '#value' =&gt; t('Submit'),
  );
  return $form;
}

#Drupal