2010-08-26 48 views
2

我已經創建了具有以下結構的形式的表格如何呈現形式

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

編輯:不drupal有東西,你可以給它一個窗體,它會自動產生彩色的行,白色的行看?

+0

其中一個數組的實際內容是什麼? – hookedonwinter 2010-08-26 21:14:39

回答

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; 

我不知道您是否可以使用一些其他類除了複選框。肯定你可以用某種方式使用體重,但不確定其他人。

+0

你應該在表單的主題或預處理函數中做到這一點,對吧? – 2010-08-27 08:42:41

+0

您在表單的主題功能中執行此操作,而不是預處理。 – angryobject 2010-08-27 08:55:12

+0

我一直在試着讓這段代碼工作一個小時。你有沒有正在運行的示例代碼? – AgA 2011-12-17 19:16:37

2

這應該工作。我不確定你的實際數組中有什麼(註釋掉的部分),但是這應該顯示爲一個表格。我正在使用implode,因爲我不知道這些數組中的內容,但是這將在單元格數組中的每個項目之間顯示一個空格來顯示它。

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>'; 
+0

我也意識到這不完全漂亮。如果其中任何一個都沒有意義,讓我知道,我會草率。 – hookedonwinter 2010-08-26 21:22:07

+0

另外值得注意的是,我對drupal一無所知。所以其他一些答案可能更適合你的情況。 – hookedonwinter 2010-08-26 22:04:32

1

承擔ROW1,ROW2是字段集。

如果你想主題,形式和地點字段放入表:

定義表單ID(你可以看看它在窗體的HTML源代碼:類型=「隱藏」名稱=「form_id」值=」 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)

1

我將建立drupal_render() -ed輸出數組從形式的element_children能以theme('table', $header, $rows, $attributes = array(), $caption = NULL)爲主題。

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_functionhook_theme註冊。