【发布时间】:2011-10-18 18:19:18
【问题描述】:
我有一个类型为文本的字段,我想在 Drupal 7 中将其转换为类型列表(文本)。我不能简单地更改值,因为它不会让我,有没有简单的方法可以这样做?
【问题讨论】:
我有一个类型为文本的字段,我想在 Drupal 7 中将其转换为类型列表(文本)。我不能简单地更改值,因为它不会让我,有没有简单的方法可以这样做?
【问题讨论】:
没有简单的方法,不。据我所知,这些是您需要进行的手动数据库更改:
在field_config 中,将您的字段的type 列更改为“list_text”,将module 列更改为“列表”。
然后,您需要更改data 列中的序列化数组以匹配列表类型(显然,它目前将具有文本类型的设置)。没有简单的方法可以在这里向您展示如何操作,最好的方法是将序列化数组与列表类型的不同字段的序列化数组进行比较,然后您将能够看到需要删除/更改的值. settings 下的 allowed_values 数组将是您放置列表值的位置。更改后,重新序列化它并将其放回您的字段的data 列中。
之后,从字段的 field_data 和 field_revision 表中删除以 field_myfield_ 但不是 field_myfield_value 开头的所有列(列表类型仍然需要该列)。
为value 列向这些表添加索引。
清除缓存
我必须警告说,这是完全未经测试的,从表结构来看似乎是有道理的,最好备份您将要玩的三张表以防万一。
【讨论】:
field_config_instance 中编辑数据,或编辑字段并选择“选择”或“复选框”作为小部件类型来完成。另外作为提示,我发现首先创建选择字段并使用该序列化数据来编辑现有列是最简单的。您基本上只需要更改名称(以及这些条目的字符长度)和 ID。
我刚刚在我的Helper module:http://cgit.drupalcode.org/helper/tree/lib/FieldChangeHelper.php?h=7.x-1.x 中写了一些应该为你处理这个问题的代码
FieldChangeHelper::changeType('my_text_field_name', 'list_text');
它应该适用于大多数简单的案例和领域,但应该彻底测试。它目前也不会更新任何字段格式化程序,因此您需要在运行后查看字段的显示配置。
【讨论】: