以编程方式获取和设置字段值

时间:2011-03-27 11:22:22

标签: drupal drupal-modules cck drupal-7

我想要用完全相同的值填充两个字段;用户应该只填一个 我还有一个函数来检查第二个字段是否为空。在Drupal 6和Drupal 7中如何获得和设置字段值有什么变化吗?

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

2 个答案:

答案 0 :(得分:7)

由于您使用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'];
}

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

答案 1 :(得分:2)

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

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

其中:

$ entity_type:类似于'node'或'user',

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

$ field_name:字段的计算机名称,

$ langcode:存储实体的语言,它是可选的,如果没有提供,field_get_items会自动找到它。