web-dev-qa-db-fra.com

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

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.

9
Codium

Vous devriez pouvoir conserver l'heure changed 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(), et puis implémenter le hook node_presave:

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

Cela fonctionnera puisque node_save() définit $node->changed Avant d'appeler tous les modules qui implémentent hook_node_presave().

14
jhedstrom