【问题标题】:Drupal delete a field instance for nodeDrupal删除节点的字段实例
【发布时间】:2014-05-01 01:27:12
【问题描述】:

如何删除节点的字段实例。我将此字段用于节点的文件附件。

当我使用删除的附件更新节点时,更新节点中不存在该字段,但 node_save 不会从表中删除该字段的条目。

那么是否有一些 api 可以将其从节点中删除。

谢谢,

【问题讨论】:

    标签: file drupal field


    【解决方案1】:

    删除一个字段实例意味着从给定的bundle中删除该field_name字段及其数据,这意味着每个字段field_name附加到给定的bundle 将被删除。

    您不想删除所有节点附件,只删除一个。这里是如何删除特定实体($node)的文件附件字段的示例:

    // Optionally : Load file object.
    $filefoo = file_load($node->field_name[LANGUAGE_NONE][0][$fid]);
    
    // Remove the field value from $node.
    unset($node->field_name[LANGUAGE_NONE][0]);
    
    // Save the entity
    entity_save('node', $node);
    
    // Optionally : safely delete the file (won't be deleted if still in use)
    file_delete($filefoo);
    

    【讨论】:

    • 我只想为特定的节点 ID 删除它。我可以使用上面的函数吗?
    • 不!不要使用field_delete_instance()field_delete_field() 删除特定的节点字段。有一个误解,但我更新了我的答案,现在更清楚了。
    • 是的,问题是这就是我正在做的,就像在我保存节点之前,字段数组不存在。但是在我保存节点之后,字段表中该节点的条目并没有消失。所以基本上 node_save() 不负责从字段表中删除该节点的条目。所以我正在寻找其他一些 api 来摆脱这个领域
    • 问题恰恰在于,由于保存节点时该字段不存在,因此未更新。您必须取消设置字段值,而不是字段。 $node->field_name 必须设置为空值,以便保存更改。
    • 可能我不明白,但 unset 用于取消设置已设置的内容。如果我没有任何 $node->field_name(field_name 不是节点对象的一部分),我将如何使用 unset($node->field_name[LANGUAGE_NONE][0]);
    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多