¿Cómo detener Drupal para configurar la fecha de cambio de nodo en la creación?

9

Esta es mi segunda pregunta sobre mis problemas con la creación de secuencias de comandos de migración personalizadas.

Estoy creando solo nuevos nodos y no me importan las actualizaciones.

Código:

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

Por ejemplo, mi $ modificado se establece en 0 y después de guardar veo la columna actualizada de esta fila de nodos en la lista de contenido de administrador con el valor de fecha y hora actual.

Codium
fuente

Respuestas:

14

Debería poder conservar el changedtiempo original estableciendo primero una propiedad personalizada en el objeto de nodo, por ejemplo $node->modified, en su script de migración antes de llamar node_save(), y luego implementando el gancho node_presave:

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

Esto funcionará desde node_save()conjuntos $node->changedantes de llamar a todos los módulos que implementan hook_node_presave().

jhedstrom
fuente
Sí, funciona al 100% :)
Codium
1
Sospechoso, seré derribado por esto, pero si como yo estás ejecutando un script de corta duración a través de drush, eso no es parte de un módulo y no quieres implementar un módulo solo para implementar un gancho, etc. trabaja para db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));después de guardar.
artfulrobot
Odio que tengamos que hacer algo tan incómodo como un gancho (incómodo porque el cambio ocurre en un segmento de código completamente diferente), pero eso es culpa de Drupal, no tuya. +1
Kenny Wyland