【问题标题】:Saving node's fields without saving the node itself drupal 7保存节点的字段而不保存节点本身 drupal 7
【发布时间】:2021-11-08 12:16:32
【问题描述】:
//i would like to use a Drupal function named field_attach_update() for certain nodeids
$node = node_load($nid);
$node->field_fieldname[LANGUAGE_NONE][0]['value'] = 'some value';
field_attach_update('node', $node);

我需要创建一个函数,并将其放在 drupal 文件夹中,并为数千个节点运行它。我有节点 ID,我想更改它们的子字段值。

如何更改上述代码以便仅更改子字段值,并将我需要更改的所有节点作为参数提供?

我想用 drush 来运行函数

并且肯定类似的东西不是一个好的解决方案...(也许我应该在每次保存之间添加一些计时器?我需要更新 20k 节点,而不是让我们托管 drupal 的服务器崩溃)

$node = node_load(123);
    $node->field_fieldname[LANGUAGE_NONE][0]['value'] = 'some value';
    field_attach_update('node', $node);
$node = node_load(124);
    $node->field_fieldname[LANGUAGE_NONE][0]['value'] = 'some value';
    field_attach_update('node', $node);

...

【问题讨论】:

  • 您可能想要使用batch api 或者创建一个利用views bulk operations module 的函数。投票结束这一点,因为有很多方法可以做到这一点,并且会产生基于意见的答案。另外,我不确定为什么标题说“不保存节点本身”,因为如果您更改字段值,则需要保存节点(除非您直接通过数据库进行)

标签: drupal drupal-7


【解决方案1】:

在我看来,BatchApi 将是更好的解决方案。我更喜欢仅在 1k 节点以下进行批量更新的 VBO。 这是一篇关于自定义 drush 命令的批处理文章:

https://www.metaltoad.com/blog/using-drupal-batch-api

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多