【问题标题】:Programmatically get and set field values以编程方式获取和设置字段值
【发布时间】:2011-03-27 11:22:22
【问题描述】:

我想用完全相同的值填充两个字段;用户只能填写一个。
我还有一个函数可以检查第二个字段是否为空。在 Drupal 6 和 Drupal 7 中获取和设置字段值的方式是否有任何变化?

编辑: 我正在尝试编辑模块。
是的,我说的是节点字段。
$node 数组只有我添加到节点的术语的 ID。如何获取术语名称,知道它的 ID?

【问题讨论】:

  • 你的问题是什么?这是关于如何检查字段的值?或实施检查?如何将模块(这部分)从 D6 升级到 D7 ?

标签: drupal drupal-modules cck drupal-7


【解决方案1】:

既然你用 cck 标记了这个问题,我假设你正在使用节点字段。

要将一个字段 (x) 的值复制到另一个 (y),您可以安装 Computed Field 模块并将其设置为使值y 的值是根据 x 的值计算的,或者您可以使用类似于以下钩子的内容创建自定义模块:

这个钩子将所有数据从字段 x 复制到字段 y

function mymodule_node_presave($node) {
    $node->field_y = $node->field_x;
}

此钩子仅将字段 x 的第一个实例的值复制到字段 y

function mymodule_node_presave($node) {
    $node->field_y[$node->language][0]['value'] = $node->field_x[$node->language][0]['value'];
}

您可能希望在$node->field_x$node->field_y 上执行print_r,因为您的数据结构可能会根据您使用的字段类型而有所不同。如果您想检查任何一个字段是否为空,您可以将赋值语句包装在调用您的自定义函数的条件中。

【讨论】:

  • 为了检查我需要什么数据我使用了Devel模块,所以不需要在print_r函数中崩溃
【解决方案2】:

找出字段值的一个好方法是使用由字段 API 提供的field_get_items()

field_get_items($entity_type, $entity, $field_name, $langcode = NULL);

地点:

$entity_type:类似于“节点”或“用户”,

$entity:是否需要其字段值的实体,

$field_name:字段的机器名,

$langcode:实体存储的语言,可选,如果不提供,field_get_items会自动查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2021-02-07
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多