如何將'收音機'添加到圍繞theme_table構建的表單中?帶收音機的Drupal表
使用單個'複選框'或單個'收音機'似乎工作正常,但只要我使用'收音機',根本沒有單選按鈕。
從另一個堆棧溢出的問題,我已經看到form_process_radios()
提到,並使用它實際上顯示單選按鈕。但是他們不再被束縛在一起,他們都可以立即進入「開啓」狀態。
任何想法?
如何將'收音機'添加到圍繞theme_table構建的表單中?帶收音機的Drupal表
使用單個'複選框'或單個'收音機'似乎工作正常,但只要我使用'收音機',根本沒有單選按鈕。
從另一個堆棧溢出的問題,我已經看到form_process_radios()
提到,並使用它實際上顯示單選按鈕。但是他們不再被束縛在一起,他們都可以立即進入「開啓」狀態。
任何想法?
答案很簡單:你不能輕易。 (Allthough你可能在定義你自己的處理器方面取得了成功,使用expand_radios,hardcore的東西!)。
較長的回答:radios
使用theme_radios。正如你所看到的那樣,它使用單個DIV包裝器,這使得無法在桌子上分配無線電。
你最好做的是創建一個分層表格,每個選項有一個radio
。避免radios
。通過將它們分層次分組,name
將是相同的,這是radios are grouped的方式。
# 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'),
);
}
然後,在圍繞窗體構建表格的主題函數中,將每個無線電單元渲染到適當的表格單元格中。
我想,比如說你應該閱讀這種形式的回調:node_admin_nodes從node.admin.inc
因此,要使用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')),
);
}
這裏是我得到了一個表裏面單選按鈕,使他們易於使用一個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>');
這使我可以在我的模板文件中使用0123來渲染整個表格部分,並在驗證中獲得所選的單選按鈕值並提交處理程序$form_state['values']['item']
。單選按鈕已具有相同的名稱屬性,因此無需手動指定即可鏈接在一起。
@volocuga theme_table()的存在並不意味着通過其他方式構建表格會自動「拉屎」。 Drupal 7引入了一個'tableselect'FAPI元素,但它並沒有涵蓋所有的用例,我目前不知道如何通過theme_table()來實現。如果你這樣做,將其作爲答案寫在這裏會更有幫助,而不是對我的不完善但堅實的工作解決方案進行惡意攻擊。 – Dooshta 2012-11-27 17:36:55
是的,我可以理解這有點麻煩,但是這種解決方案可以直接使用,並且快速簡單。謝謝 :) – 2013-09-12 13:47:58
你需要to use thistheme_tableselect
功能
這是無關緊要的,據我所看到的。這既不是一張桌子,也不是收音機的。 – berkes 2011-03-24 09:54:58