チェックボックスの列を持つフォームテーブルを作成しようとしています。テーマは以下のコードでは機能しません。すべての助けに感謝します:)
myadmin.module
function myadmin_menu() {
$weight=0;
$t = get_t();
$items = array();
$items['myadmin_dispute'] = array(
'title' => 'Dispute Queue',
'access arguments' => array('view myadmin'),
'page callback' => 'drupal_get_form',
'page arguments' => array('myadmin_dispute'),
'file' => 'myadmin_dispute.php',
'type' => MENU_NORMAL_ITEM,
'expanded' => true,
'weight' => $weight++,
'menu_name' => 'myadmin',
'module' => 'myadmin',
);
}
myadmin_dispute.php
function myadmin_dispute($form_state) {
//add output - css and javascript to include
drupal_add_js ( drupal_get_path ( 'module', 'myadmin' ) . '/scripts/jquery.tablesorter.js' );
drupal_add_js ( drupal_get_path ( 'module', 'myadmin' ) . '/scripts/myadmin.js' );
drupal_add_css ( drupal_get_path ( 'module', 'myadmin' ) . '/blue/style.css' );
$disputes = array
(
array('uid' => 1, 'first' => 'Joe', 'last' => 'Smith'),
array('uid' => 2, 'first' => 'Susan', 'last' => 'Doe'),
array('uid' => 3, 'first' => 'John', 'last' => 'Doe'),
);
foreach($disputes as $dispute)
{
$checkboxes[$dispute['uid']] = '';
$form[$dispute['uid']]['first_name'] = array
(
'#value' => $dispute['first'],
);
$form[$dispute['uid']]['last_name'] = array
(
'#value' => $dispute['last'],
);
}
$form['checkboxes'] = array
(
'#type' => 'checkboxes',
'#options' => $checkboxes,
);
$form['#theme'] = 'dispute_theme';
return $form;
}
function myadmin_dispute_theme()
{
return array
(
'dispute_theme' => array
(
'arguments' => array('form' => NULL),
),
);
}
function theme_dispute_theme($form)
{
$rows = array();
foreach(element_children($form['checkboxes']) as $uid)
{
$row = array();
$row[] = drupal_render($form['checkboxes'][$uid]);
$row[] = drupal_render($form[$uid]['first_name']);
$row[] = drupal_render($form[$uid]['last_name']);
$rows[] = $row;
}
if(count($rows))
{
$header = array(theme('table_select_header_cell') , t('First Name'), t('Last Name'));
}
else
{
$header = array(t('First Name'), t('Last Name'));
$row = array();
$row[] = array
(
'data' => t('No users were found'),
'colspan' => 2,
'style' => 'text-align:center',
);
$rows[] = $row;
}
$output = theme('table', $header, $rows);
return $output . drupal_render($form);
}
function myadmin_dispute_submit($form_id, &$form_state) {
}
更新、これはdrupal 6インスタンスで機能する必要があります。
Drupalには組み込みの tableselect 要素タイプがあり、このような状況では、代わりにそれを使用する方がはるかに簡単です。
$disputes = array(
1 => array('Joe', 'Smith'),
2 => array('Susan', 'Doe'),
3 => array('John', 'Doe')
);
$header = array(t('First Name'), t('Last Name'));
$form['checkboxes'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $disputes,
'#empty' => 'No users were found.'
);
上記のコードはこのテーブルを生成します:
フォーム送信関数では、次のようなコードで選択したユーザーIDを取得できます。
$selected_uids = array_filter($form_state['values']['checkboxes']);
[〜#〜]編集[〜#〜]
上記はDrupal 7の場合です。Drupal 6を使用している場合は、同じコードを使用できますが、 Elementsモジュールをインストールする必要があります。 。