2011-10-18 71 views

回答

5

有沒有簡單的方法,沒有。至於我可以告訴這些都是手工DB改變你需要做:

  1. field_config變化type列「list_text」和module欄爲您的字段「列表」。

  2. 然後,您需要更改data列中的序列化數組,以匹配列表類型(顯然它將具有文本類型的設置)。有沒有簡單的方法來告訴你如何在這裏做到這一點,最好的辦法是將序列化數組與一個列表類型的不同字段進行比較,然後您將能夠看到需要刪除/更改的值。在settings下的allowed_values數組將是您放置列表值的位置。一旦更改,請重新將其序列化並將其放回到您的字段的data列中。

  3. 之後,從與field_myfield_開始你的領域的field_datafield_revision表中刪除任何列,但field_myfield_value(列表類型仍需要此列)。

  4. value列的那些表添加索引。

  5. 清除您的緩存

我必須警告這是完全未經測試它只是似乎是有道理的看錶結構,它會是一個好主意,退居了三個表的你以防萬一。

+0

工作就像一個魅力!謝謝 –

+1

我還必須更改窗口部件的類型,您可以直接在'field_config_instance'中編輯數據,或編輯字段並選擇「選擇」或「複選框」作爲窗口部件類型。 同樣作爲一個提示,我發現最簡單的做法是先選擇字段並使用該序列化數據來編輯現有列。您基本上只需要更改名稱(以及這些條目的字符長度)和ID。 – Wayne

4

我只是寫一些代碼,應該在我Helper module您處理該問題:http://cgit.drupalcode.org/helper/tree/lib/FieldChangeHelper.php?h=7.x-1.x

FieldChangeHelper::changeType('my_text_field_name', 'list_text'); 

它應該適合大多數簡單的情況和領域,而應該進行徹底的測試。它目前還不更新任何字段格式化程序,因此您需要在運行此操作後查看該字段的顯示配置。

+0

謝謝你 - 這工作很好,節省了大量的時間:) –