如何将表单呈现为表格

时间:2010-08-26 21:11:19

标签: php drupal

我创建了一个具有以下结构的表单

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 = selectCol 2 = checkboxCol 3 = texfield,第一列是row # Row1, Row2, Row3

编辑:drupal有没有你可以给它一个表格的东西,它会自动产生那个彩色的行,白色的行?

5 个答案:

答案 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_functiontheme_my_custom_item_theme_function并将其注册到hook_theme