I am creating nodes programatically based on the feed from an external api. I have managed to create all nodes, assign field values and also set the created
date. Now my problem is that I also need to set the changed
date of each node to match the value returned from the feed. I have tried to set this value before saving the node without any success:
// $data contains the release information used to create and populate the node
$node = new stdClass();
$node->title = $data->Release->Title;
$node->type = 'release';
node_object_prepare($node);
$node->status = NODE_PUBLISHED;
$node->uid = 1;
$node->language = LANGUAGE_NONE;
// handle any field data - not really important
handleFields($node, $data);
// submit the node
$node = node_submit($node);
$node->created = strtotime($data->Release->PublishDate);
// here I'm trying to set the changed value for the node
$node->changed = strtotime($data->Release->LastChangeDate);
// finally save the node
node_save($node);
Would be nice if anyone have a solution to this problem. Perhaps I can make a raw query against the database in order to update the changed
date of the node?
The reason I need to set this value is because later on it will be used to compare against the modification date of a release in the feed so I can decide if the node needs to be updated or not. I know I could use a custom field for this purpose, storing the releases modification time and then compare against this value instead of the changed column in the node table.
$node->changed
, so the problem is not surely using that instead of something else.changed
column, but I don't understand why I may set thecreated
but not thechanged
date? Not really sure what you mean by "so the problem is not surely using that instead of something else"? The reason I need to set the modification date is so that I later on can compare it against the modification date from the feed and decide if I need to update the node or not. I know this can be solved by using a separate field.node_submit()
, since it just sets$node->uid
and$node->created
, which is something your code already does.$node->created
is correct; it's not that you need to use, for example,$node->timestamp
instead of$node->created
. As for not using the value you set for$node->created
, that could depend from what other modules do. It could be a module is changing its value. For sure, Drupal core sets$node->created
, so setting it is correct.created
date - I can set this without any problems as long as I do so after callingnode_submit()
. The problem is thechanged
date which I'm not able to set at the moment.