Таблица с checkboxes / radios drupal
09.08.2015
Порой нужно добавить на страницу таблицу с чекбоксами или радио-кнопками для обработки большого количества данных. Вот рецепт, как это сделать:
<?php
// подготавливаем данные
$users = array
(
array('uid' => 1, 'first_name' => 'Indy', 'last_name' => 'Jones'),
array('uid' => 2, 'first_name' => 'Darth', 'last_name' => 'Vader'),
array('uid' => 3, 'first_name' => 'Super', 'last_name' => 'Man'),
);
// задаем заголовок таблицы
$header = array
(
'first_name' => t('First Name'),
'last_name' => 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' => $user['first_name'], // 'first_name' was the key used in the header
'last_name' => $user['last_name'], // 'last_Name' was the key used in the header
);
}
// если мы хотим чекбоксы
$form['table'] = array
(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
);
// если мы хотим radios
$form['table'] = array
(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#multiple' => TRUE,
);
// запрещаем выбрать сразу все
$form['table'] = array
(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#js_select' => FALSE,
);
В итоге:
function my_form($form, $form_state)
{
$users = array
(
array('uid' => 1, 'first_name' => 'Indy', 'last_name' => 'Jones'),
array('uid' => 2, 'first_name' => 'Darth', 'last_name' => 'Vader'),
array('uid' => 3, 'first_name' => 'Super', 'last_name' => 'Man'),
);
$header = array
(
'first_name' => t('First Name'),
'last_name' => t('Last Name'),
);
$options = array();
foreach($users as $user)
{
$options[$user['uid']] =array
(
'first_name' => $user['first_name'],
'last_name' => $user['last_name'],
);
}
$form['table'] = array
(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#empty' => t('No users found'),
);
$form['submit'] = array
(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
