Стол Drupal с радио - PullRequest
       24

Стол Drupal с радио

3 голосов
/ 24 марта 2011

Как я могу добавить «радио» в форму, построенную вокруг theme_table?

Использование одного «флажка» или одного «радио», кажется, работает нормально, но как только я использую «радио», радио не работаеткнопки визуализируются вообще.

Из другого вопроса переполнения стека я видел упомянутое form_process_radios(), и при использовании этого на самом деле отображаются переключатели.Но они больше не связаны друг с другом, и все они могут быть сразу переведены во включенное состояние.

Есть идеи?

Ответы [ 5 ]

7 голосов
/ 24 марта 2011

Простой ответ: вы не можете легко. (Несмотря на то, что вы можете добиться успеха в определении собственного процессора, используя расширенные_радио, хардкорные вещи!).

Более длинный ответ: radios использует theme_radios . И, как вы можете видеть, он использует одну DIV-оболочку, которая делает невозможным распределение радиостанций по столу.

Что вы могли бы лучше всего сделать, так это создать иерархическую форму с одним 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'),
    );
  }

Затем в функции-теме, в которой вы строите таблицу вокруг формы, вы отображаете каждое радио в соответствующей ячейке таблицы.

6 голосов
/ 09 февраля 2012

Таким образом, чтобы воспользоваться советом 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')),
  );
}
4 голосов
/ 14 февраля 2012

Вот пример Drupal 7, как я установил переключатели внутри таблицы, чтобы с ними было легко работать:

$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'].Радиокнопки уже имели один и тот же атрибут имени и, таким образом, были связаны друг с другом без необходимости указывать его вручную.

0 голосов
/ 11 апреля 2014

Вам нужно , чтобы использовать эту theme_tableselect функцию

0 голосов
/ 24 марта 2011

Я думаю, например, вы должны прочитать эту форму обратного вызова: node_admin_nodes from node.admin.inc

...