3

theme_tableを中心に構築されたフォームに「radios」を追加するにはどうすればよいですか?

単一の「チェックボックス」または単一の「ラジオ」を使用すると正常に機能するようですが、「ラジオ」を使用するとすぐにラジオボタンがまったくレンダリングされません。

別のStackOverflowの質問から、私はform_process_radios()言及しましたが、これを使用すると実際にラジオボタンが表示されます。しかし、それらはもはや結び付けられておらず、それらすべてを一度に「オン」状態にすることができます。

何か案は?

4

5 に答える 5

7

簡単な答え:簡単にはできません。(expand_radios、ハードコアなものを使用して、独自のプロセッサを定義することに成功するかもしれませんが!)

より長い答え:theme_radiosradiosを使用します。ご覧のとおり、これは単一のDIVラッパーを使用しているため、テーブル全体に無線を分散させることはできません。

最善の方法は、オプションごとに1つずつ、階層形式を作成することradioです。避けてくださいradios。それらを階層的にグループ化することにより、ラジオがグループ化nameされる方法と同じになります。

# from install.php:
  foreach ($names as $profile => $name) {
    $form['profile'][$name] = array(
      '#type' => 'radio',
      '#value' => 'default',
      '#return_value' => $profile,
      '#title' => $name,
      '#description' => isset($profiles[$profile]['description']) ? $profiles[$profile]['description'] : '',
      '#parents' => array('profile'),
    );
  }

次に、フォームを中心にテーブルを作成するテーマ関数で、各ラジオを適切なテーブルセルにレンダリングします。

于 2011-03-24T10:12:06.617 に答える
6

したがって、Berkesのアドバイスを使用するには、同じグループのすべての無線要素に同じ名前の「#atributes」プロパティを使用する必要があります。

このような:

'#attributes' => array('name' => array('somename'))

これはより完全な例です:

for ($i = 0; $i < $num; $i++){
  $element[$i]['answer'] = array(
    '#type' => 'textfield',
    '#title' => t('Answer'),
  );
  $element[$i]['correct'] = array(
      '#type' => 'radio',
      '#value' => 'default',
      '#return_value' => $i,
      '#title' => t('Correct answer'),
      '#attributes' => array('name' => array('correct-answer')),
  );
}
于 2012-02-09T17:03:45.450 に答える
4

これは、テーブル内にラジオボタンを配置して操作しやすいようにする方法のDrupal7の例です。

$form['item']['table_start'] = array(
  '#markup' => '<table><thead><tr><th>Header 1</th><th>Header 2</th></tr></thead><tbody>'
);
for ($i = 1; $i < 3; $i++) {
  $form['item']['tr_start_'.$i] = array('#markup' => '<tr>');
  $form['item'][$i]['item'] = array(
    '#type' => 'radio',
    '#title' => t('Title'),
    '#return_value' => $i,
    '#prefix' => '<td>',
    '#suffix' => '</td>',
  );
  $form['item']['item_'.$i] = array('#markup' => '<td>'. $i .'</td>');
  $form['item']['tr_end_'.$i] = array('#markup' => '</tr>');
}
$form['item']['table_end'] = array('#markup' => '</tbody></table>');

これにより、テンプレートファイル内のフォームのテーブル部分全体をでレンダリング<?php print drupal_render($form['item']); ?>し、検証で選択したラジオボタンの値を取得し、ハンドラーをで送信することができました$form_state['values']['item']。ラジオボタンはすでに同じ名前属性を持っていたため、手動で指定しなくてもリンクされていました。

于 2012-02-14T19:47:03.150 に答える
0

たとえば、次のフォームコールバックを読む必要があると思います:node.admin.incのnode_admin_nodes

于 2011-03-24T05:07:20.193 に答える
0

この機能を使用 する必要がありますtheme_tableselect

于 2014-04-11T08:11:22.913 に答える