如何停止Drupal来设置创建节点的更改日期?


9

这是关于创建自定义迁移脚本的第二个问题。

我仅创建新节点,并且不关心更新。

码:

        $node = new stdClass();
        $node->type = 'migrate';
        $node->title = $content['title'];
        $node->language = LANGUAGE_NONE;

        $node->created = (int) date('U',strtotime($content['created']));

        $modified = $content['modified'];               
        if (! empty($modified) && $modified != '0000-00-00 00:00:00') {
            $modified = (int) date('U',strtotime($modified));
        } else {
            $modified = 0;
        }               
        $node->changed = $modified;

        node_object_prepare($node);

        #some lines later
        node_save($node);

例如,我的$ modified设置为0,保存后,我在管理内容列表中看到此节点行的更新列,并带有当前datetime值。

Answers:


14

changed通过$node->modified在调用之前在迁移脚本中首先在节点对象上设置一个自定义属性(例如),node_save()然后实现node_presave挂钩,您应该能够保留原始时间:

/**
 * Implements hook_node_presave().
 */
function mymodule_node_presave($node) {
  $node->changed = $node->modified;
}

这是可行的,因为在调用所有实现的模块之前先进行node_save()设置。$node->changedhook_node_presave()


是的,它可以100%使用:)
Codium 2012年

1
猜想我会被拒绝的,但是如果像我一样,您正在通过drush运行短暂的脚本,而该脚本不是模块的一部分,并且您不想仅出于实现钩子等目的而实现模块工程db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));保存后。
artfulrobot 2014年

我讨厌我们必须做一个像钩子一样笨拙的事情(笨拙,因为更改发生在完全不同的代码段中),但这是drupal的错,而不是您的错。+1
肯尼·怀兰德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.