Comment arrêter Drupal pour définir la date de modification du nœud lors de la création?

9

Ceci est ma deuxième question sur mes problèmes avec la création d'un script de migration personnalisé.

Je ne crée que de nouveaux nœuds et ne me soucie pas des mises à jour.

Code:

        $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);

Par exemple, mon $ modified est défini sur 0 et après l'enregistrement, je vois la colonne mise à jour de cette ligne de nœud dans la liste de contenu d'administration avec la valeur datetime actuelle.

Codium
la source

Réponses:

14

Vous devriez pouvoir conserver l' changedheure d' origine en définissant d'abord une propriété personnalisée sur l'objet nœud, par exemple $node->modified, dans votre script de migration avant d'appeler node_save(), puis en implémentant le hook node_presave:

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

Cela fonctionnera depuis les node_save()ensembles $node->changedavant d'appeler tous les modules qui implémentent hook_node_presave().

jhedstrom
la source
Oui ça marche à 100% :)
Codium
1
Je pense que je serai abattu pour cela, mais si comme moi vous exécutez un script de courte durée via drush qui ne fait pas partie d'un module et que vous ne voulez pas implémenter un module juste pour implémenter un hook, etc. fonctionne après db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));avoir enregistré.
artfulrobot
Je déteste que nous devions faire quelque chose d'aussi maladroit qu'un crochet (maladroit parce que le changement se produit dans un segment de code complètement différent), mais c'est la faute de Drupal, pas la vôtre. +1
Kenny Wyland