2009-10-11 48 views
0

我需要在CakePHP中創建一個表單,以允許用戶在下表中顯示的單元格中輸入數據(數字)。輸入屏幕需要如下所示的表格。用戶應該能夠選擇任何他們想要輸入/更新值的單元格,然後輸入值,點擊提交併提交值。每個「度量標準」部分(例如,度量標準A,度量標準B ..)「將具有一個提交按鈕,以便用戶可以編輯/更新表格上的每個部分。如何爲2D /多維表創建表單?

 
___________________________ ____________________ 
|___  ___|___2006_______|__2007____|___2008___| 
|_METRIC A__|______________|__________|__________| 
| item A1 |   1 | 5  | 7  | 
| item A2 |   15 | 18  | 21  | 
| item A3 |   3 | 6  | 11  | 
| item A4 |   1 | 1  | 3  | 
|___________|______________|__________|__________| 
|_METRIC B__|______________|__________|__________| 
| item B1 |   12 | 18  | 31  | 
| item B2 |   1 | 4  | 6  | 
| item B3 |   0 | 0  | 2  | 
-------------------------------------------------- 

正如你可以看到每個度量部分是一個二維表。所以我想在2D數組中捕獲輸入數據。目前我已經成功創建了數據顯示(這非常容易)。我簡單地創建了一組度量標準,它是一個二維數組數組。然後,我將該2D數組數組傳遞給視圖文件以顯示錶格。

我對如何獲得此表的用戶輸入感到厭倦。任何人都有類似的經歷?任何建議都會對我很有幫助。

回答

-1

在這種情況下,要成爲別人有用的,我在這裏發佈我的解決方案..

我設法通過使用「並行二維數組」來解決這一個。

這是一個簡單的伎倆。您可以創建二維數組來顯示數據。所以你在表中的每一行都有一個數組。例如,如果這些列是'2006年','2007年'&'2008年',就像我上面的問題。您將創建一個包含每年值的數據行。

$data_for_row_array = array('10', '15', '35'); 

這樣你在你的表中創建的每一行數據陣列,你會得到一組行:

$rows_array = array(data_for_row_1_array, data_for_row_2_array, ..) etc 

這將爲顯示陣列做。現在,如果你想捕獲表中每個單元格的用戶輸入,您只需創建一個類似的第二個二維數組,其中每個數據單元的ID都來自數據庫。如果某個ID尚不存在,請將其留空。當用戶輸入數據並提交時,只需循環兩個二維數組,並使用一個數組中的ID和另一個數組中的數據與之匹配即可。因爲在這兩個數組中,匹配的ID和它的數據值將處於相同的位置。因此,如果您在「ids數組」中查找並使用ID,並在「數據數組」中找到相同位置的數據值,則只需使用它來更新數據庫表。這是'平行二維陣列'的概念。

如果您在ID數組中找到並清空ID值,但數據數組中的某個數據值位於數據數組中的相同位置,這意味着用戶輸入了一個全新的值,因此您將它作爲新的數據單元保存在數據庫中。

希望這會給你一些想法..如果不清楚只是讓我知道,我會更詳細地解釋它。

1

您可能想要開始研究一些具有編輯功能的Javascript網格解決方案。想到Ext的網格,但肯定會爲您選擇的JavaScript框架(例如jQuery)提供替代方案。這將在客戶端處理所有onclick的優點,讓您實現表單可以提交數據的AJAX操作。在那裏由您決定使用數據的每個部分更新哪些模型。

+0

謝謝。 Javascript網格,但我還沒有想過。將看看它是否有幫助。順便說一句,我可能已經找到了一種方法獲得輸入到二維數組。 $ form-> input('x',array('value'=> $ dataRow [$ n],'name'=>'data [multi] ['。$ m。'] ['。$ n。 ']')) 仍在工作。 – Vicer 2009-10-12 22:33:20