2011-10-05 14 views
3

我正在與商業模塊創建一個在線商店。我正在修改產品.install文件以創建內容類型(因爲我已經告訴過這是必需的),並且作爲該內容類型的一部分,我需要創建大量字段。該列表將大約有50-60條不同的信息。一張表中的字段數據不多。爲drupal7

理想情況下,我想這些在一個單一的表在開始產品ID和所有其他信息一起保存,但是這似乎並沒有這樣的情況;所有的字段都存儲在不同的表中。

我注意到,這也與商業中使用的「地址」模塊創建一個字段類型,它有大約15個不同的值全部存儲在同一個盒子。這怎麼可能?我注意到,如果我將基數設置爲5,則會創建不同的行。我只想要一個表如下:

ID - 值1 - 值2 - 值3等等等等

我也不需要任何模塊/擴展,因爲這需要所有的文件被寫入。我也不認爲改用mongoDB(我認爲)是一種選擇,那麼在這種情況下我有什麼選擇?

回答

6

那不是如何Drupal的場系統的工作我很害怕,one field == one table(實際上還有2個表,如果你包括每個字段的修訂表)。

的地址模塊使用hook_field_schema()定義幾個該特定領域(在address.install看看,你就會明白我的意思)。

所以,如果你想把所有東西都放在一張桌子上,你只需要定義你自己的字段類型(請參閱examples module,特別是field_example以獲得幫助)。

記住

熊,雖然你在hook_field_schema()定義的列數將是靜態的,一旦被安裝在模塊,和你要去的唯一途徑,能夠增大/減小它與_update鉤爲您定製模塊。

另外,如果你在黑客的文件中所包含的商業模塊...... 停止!:商務部在很大程度上仍然是在它的起步階段,你將有可能很快更新......一旦你這樣做,你的代碼更改將會消失,並有一個很好的機會,您的網站將處於不一致的狀態。

整點Drupal是一切被鉤/租出去,以便它可以通過系統的其他部分被改變。在product.install中沒有任何東西可以通過在另一個模塊中實現Drupal鉤子來完成。

如果你不確定,後一個問題,詳細說明你試圖通過直接編輯的contrib模塊文件和SO Drupal的大師之一將指向您在正確的方向:-)

完成的任務編輯

只是說我一直在Ubercart工作在Drupal 7相當長的一段時間了,發現這是一個非常,非常好的解決方案(有很多商業的貢獻的模塊仍處於開發/α/β;對於Ubercart貢獻的模塊來說這種情況並不那麼嚴重)。這可能值得一看。

一些更多的信息

我想你基本上有兩個選擇:在這裏,但你需要創建一個自定義模塊(excellent set of instructions here)兩種方式。

選項1:創建自定義字段

如果你是一個Drupal編碼初學者,我建議這可能是完成你想要的最簡單的方法,但它仍然不是完全直線前進。從上面的Drupal示例模塊鏈接抓取field_example模塊,並查看.install文件,特別是field_example_field_schema()函數。它定義了該字段在表格中的列。然後看看field_example.module ...幾乎每個被Implements hook_x評論的函數都是你想要複製到你的模塊並根據自己的需要調整的函數。

我認爲這會更容易,因爲Drupal將爲您處理表格/表格字段創建 ,因此您不必混淆數據庫,模式或表單API。

選項2:創建一個自定義模塊

此選項涉及實現自己的表(就像你在您的評論建議),其中主鍵是該產品的實體ID,也將包含所有自定義的列。 (有關這方面的幫助,請參閱Schema API documentation)。

然後,您將實施hook_form_alter()以添加用戶輸入數據所需的表單字段,然後執行hook_node_insert()hook_node_update()以將此數據保留到數據庫表中。如果沒有真正編寫代碼,它很難進入更多細節,而且代碼相當多!

希望幫助,對不起,我不能有任何更具體,但它不容易在不知道的情況

+0

謝謝你非常詳細的響應克萊夫所有的來龍去脈。我非常受限於我可以用於新網站的方法,因爲我被告知我必須做什麼。 該計劃是創建一個「產品」表,並具有所有的價值。如果我創建一個內容類型,然後將字段添加到這些值,這是可能的嗎?從技術上講,只要有一個帶有「產品」的表格並且所有列都在一個地方,是否所有的字段表都被創建並不重要。我們有一個複雜的系統,我們需要鏈接,所以有一張桌子可以讓生活變得更輕鬆! – Terry

+0

爲了澄清,你是否在說我應該創建一個新模塊來完成我想要的所有事情?如果是這樣,我將如何正確地將它鏈接到系統中?我注意到,你需要保持所有的名稱與你在數據庫中創建項目相同,名稱鉤子等,所以如果我有一個不同的模塊,這不會不同於我的商務產品模塊的名稱?因爲我們必須使用商業,所以我也不能改用ubercart。 – Terry

+0

是的Drupal的命名約定是最好的和最差的功能都集成到一個!我會更新上面的答案,並提供更多信息我認爲這適合一個評論 – Clive

相關問題