【问题标题】:Dynamically creating field using Drupal使用 Drupal 动态创建字段
【发布时间】:2012-08-07 15:29:47
【问题描述】:

好吧,假设我有一个基本的人口统计内容类型(客户端),我将其保存为节点。

我需要为我们偶尔需要使用的外部数据库创建一个密钥。

我希望 Drupal 获取客户端内容类型中收集的三个字段的片段,并将它们连接到单个字段中以保存在客户端内容类型中。理想情况下,这应该在我创建一个新的(客户端)节点时完成。

新字段应包含以下内容 名字的前 3 个字母 姓氏的前 3 个字母 和社会安全号码的最后 4 位数字。

例如
名字:约翰
姓氏:Doe
社会保险号:123-45-6789

应该创建一个新字段,我们称之为 fk_database。使用上面的示例,字段 >created 将是 -> johdoe6789

这可以通过规则模块完成,还是我应该以不同的方式处理?如果我需要通过 PHP 脚本执行此操作,那么应该将其添加到 Drupal 结构的哪个位置?

【问题讨论】:

    标签: drupal drupal-7 drupal-modules drupal-rules


    【解决方案1】:

    最简单的方法可能是使用 Computed Field 模块,它几乎完全是为您想要做的事情而构建的:

    Computed Field 是一个非常强大的 CCK 字段模块,可让您将自定义“计算字段”添加到您的内容类型。这些计算字段由您通过 PHP 代码定义的值填充。您可以利用 Drupal 可用的任何内容,包括其他字段、当前用户、数据库表,等等。

    如果您确实需要在代码中执行此操作,请查看 hook_entity_presave(),这可能是您运行代码的最佳位置。

    【讨论】:

    • 我一定会看看 Computed Fields 模块,似乎它会满足我的需求。对 Drupal 来说还很新,所以我很感激你的提醒。
    【解决方案2】:

    如果您想即时构建自定义字段,我个人会构建一个自定义模块来处理此问题并使用节点 API 来处理自定义字段?

    模块可以在“根”的模块目录中创建,也可以在站点>所有>模块中创建

    您必须在后端的站点构建> 模块下打开它才能启用它

    您将能够连接到 API 并通过案例语句处理请求,例如

    function hook_node_load($node, $types) {
        //do something on node load
    }
    
    function hook_node_update($node) {
        //do something on node update
    }
    
    function hook_node_insert($node) {
        //do something on node insert
    }
    

    【讨论】:

    • 这个问题有一个drupal-7 标签...这段代码都是针对Drupal 6 的。另外,您关于自定义模块可以放在核心模块文件夹中的建议是完全错误的。那应该永远这样做。
    • 啊抱歉没有看到 - 你需要使用升级后的方法,比如 function hook_node_load($node), function hook_node_update($node), function hook_node_insert($node) 代替跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多