web-dev-qa-db-ja.com

フォームテーブルのチェックボックスを設定する

チェックボックスの列を持つフォームテーブルを作成しようとしています。テーマは以下のコードでは機能しません。すべての助けに感謝します:)

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インスタンスで機能する必要があります。

1
Jeffrey

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.'
);

上記のコードはこのテーブルを生成します:

TableSelect

フォーム送信関数では、次のようなコードで選択したユーザーIDを取得できます。

$selected_uids = array_filter($form_state['values']['checkboxes']);

[〜#〜]編集[〜#〜]

上記はDrupal 7の場合です。Drupal 6を使用している場合は、同じコードを使用できますが、 Elementsモジュールをインストールする必要があります。

4
Clive