【问题标题】:convert field text to List (text) drupal 7将字段文本转换为列表(文本)drupal 7
【发布时间】:2011-10-18 18:19:18
【问题描述】:

我有一个类型为文本的字段,我想在 Drupal 7 中将其转换为类型列表(文本)。我不能简单地更改值,因为它不会让我,有没有简单的方法可以这样做?

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    没有简单的方法,不。据我所知,这些是您需要进行的手动数据库更改:

    1. field_config 中,将您的字段的type 列更改为“list_text”,将module 列更改为“列表”。

    2. 然后,您需要更改data 列中的序列化数组以匹配列表类型(显然,它目前将具有文本类型的设置)。没有简单的方法可以在这里向您展示如何操作,最好的方法是将序列化数组与列表类型的不同字段的序列化数组进行比较,然后您将能够看到需要删除/更改的值. settings 下的 allowed_values 数组将是您放置列表值的位置。更改后,重新序列化它并将其放回您的字段的data 列中。

    3. 之后,从字段的 field_datafield_revision 表中删除以 field_myfield_不是 field_myfield_value 开头的所有列(列表类型仍然需要该列)。

    4. value 列向这些表添加索引。

    5. 清除缓存

    我必须警告说,这是完全未经测试的,从表结构来看似乎是有道理的,最好备份您将要玩的三张表以防万一。

    【讨论】:

    • 工作就像一个魅力!谢谢
    • 我还必须更改小部件类型,您可以通过直接在field_config_instance 中编辑数据,或编辑字段并选择“选择”或“复选框”作为小部件类型来完成。另外作为提示,我发现首先创建选择字段并使用该序列化数据来编辑现有列是最简单的。您基本上只需要更改名称(以及这些条目的字符长度)和 ID。
    【解决方案2】:

    我刚刚在我的Helper module:http://cgit.drupalcode.org/helper/tree/lib/FieldChangeHelper.php?h=7.x-1.x 中写了一些应该为你处理这个问题的代码

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

    它应该适用于大多数简单的案例和领域,但应该彻底测试。它目前也不会更新任何字段格式化程序,因此您需要在运行后查看字段的显示配置。

    【讨论】:

    • 我在这里没有看到任何关于调整外键的内容。这就是我坚持的一点。这是否解释了将 MUL 从值转移到格式的原因?
    • 嗯,我试过了,外键确实更新了。我仍然不知道如何在我自己的自定义模块中进行这项工作,但我想我现在可以使用它。戴夫里德来救援:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多