我创建了一个具有以下结构的表单
function myfunction(){
$form['myform']['row1']['field1'] = array(
//type, title, etc.
);
$form['myform']['row1']['field2'] = array(
//type, title, etc.
);
$form['myform']['row1']['field3'] = array(
//type, title, etc.
);
$form['myform']['row2']['field1'] = array(
//type, title, etc.
);
$form['myform']['row2']['field2'] = array(
//type, title, etc.
);
$form['myform']['row2']['field3'] = array(
//type, title, etc.
);
}
但是如果可能的话,我想将它呈现为以下格式的表格。
Col 1 Col 2 Col 3
----------------------------------------------------------------------
Row 1 Field 1 Field 2 Field 3
Row 2 Field 1 Field 2 Field 3
Row 3 Field 1 Field 2 Field 3
我应该采用什么格式让Drupal将表单呈现为表格?
P.S。 Col 1 = select
,Col 2 = checkbox
,Col 3 = texfield
,第一列是row #
Row1, Row2, Row3
。
编辑:drupal有没有你可以给它一个表格的东西,它会自动产生那个彩色的行,白色的行?
答案 0 :(得分:2)
这应该有效。我不确定你的实际数组中是什么(被注释掉的部分),但这应该将它全部显示为一个表。我正在使用内爆,因为我不知道那些数组中有什么,但是这将在单元格数组中的每个项目之间显示一个空格。
echo '<table>';
echo '<tr><th></th><th>Cell 1</th><th>Cell 2</th><th>Cell 3</th></tr>';
foreach( $form['myform'] as $row )
{
echo '<tr>';
foreach( $row as $cell )
{
echo '<td>' . implode(' ',$cell) . '</td>';
}
echo '</tr>
}
echo '</table>';
答案 1 :(得分:2)
这样的事可能有所帮助。
function yourmodule_yourform($form){
$header = array(
'field1', 'field2', 'field3',
);
$rows = array();
$rows[] = array('data' => array(drupal_render($form['row1']['field1'], drupal_render($form['row1']['field2'], drupal_render($form['row1']['field3'])))));
$rows[] = array('data' => array(drupal_render($form['row2']['field1'], drupal_render($form['row2']['field2'], drupal_render($form['row2']['field3'])))));
$rows[] = array('data' => array(drupal_render($form['row3']['field1'], drupal_render($form['row3']['field2'], drupal_render($form['row3']['field3'])))));
$output = theme('table', $header, $rows, array('id' => 'yourid'));
$output .= drupal_render($form);
return $output;
}
UPD。
你也可以使用这样的类属性:
$header = array(
'Title', array('data' => t('Checkbox one'), 'class' => 'checkbox'), array('data' => t('Checkbox two'), 'class' => 'checkbox'),
);
$row[] = drupal_render($form['name']);
$row[] = array('data' => drupal_render($form['checkbox_one']), 'class' => 'checkbox');
$row[] = array('data' => drupal_render($form['checkbox_two'], 'class'=> 'checkbox');
$rows[] = $row;
$output = theme('table', $header, $rows, array('id' => 'yourid'));
$output .= drupal_render($form);
return $output;
我不确定你是否可以使用复选框以外的其他类。很确定你可以以某种方式使用重量,但不确定其他人。
答案 2 :(得分:1)
假设row1,row2是fieldset。
如果您想要主题表单并将字段放入表格中:
定义您的表单ID(您可以在表单的html源代码中查看:type =“hidden”name =“form_id”value =“YOURFORMID”,它应该像“YOURMODULENAME_myform”)。
在template.php中添加此函数(如果已经在那里添加数组,则添加数组)
function YOURTHEME_theme($existing, $type, $theme, $path) {
$items[] = array(
'YOURMODULENAME_myform' => array(
'arguments' => array('form' => NULL),
'template' => 'YOURMODULENAME_myform'
// This is file name of your themer of form
),
...
return $items;
将文件添加到主题中:YOURMODULENAME_myform.tpl.php
放置代码,如下所示:
<table><tbody>
<tr>
<td>
<?php print drupal_render($form['row1']['field1'] ); ?>
</td>
<td>
<?php print drupal_render($form['row1']['field2'] ); ?>
</td>
...
</tr>
</tbody></table>
<?php print drupal_render($form); // Required! ?>
在Perfomance页面刷新缓存。
如果你想要表格的主题结果,那么只需输出主题页面(如node-TYPE.tpl.php)
答案 3 :(得分:1)
我会从表单的drupal_render()
构建element_children
- ed输出数组,可以使用theme('table', $header, $rows, $attributes = array(), $caption = NULL)
为主题。
答案 4 :(得分:1)
您可以通过设置#theme
属性来单独覆盖每个表单项的主题功能。
$form = array();
...
$form['#theme'] = 'my_custom_form_theme_function';
...
$form['item'] = array(
...
'#theme' => 'my_custom_item_theme_function',
);
您必须定义theme_my_custom_form_theme_function
和theme_my_custom_item_theme_function
并将其注册到hook_theme
。