Como parar o Drupal para definir a data de alteração do nó na criação?

9

Esta é minha segunda pergunta sobre meus problemas com a criação de scripts de migração personalizados.

Estou criando apenas novos nós e não me importo com atualizações.

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 exemplo, meu $ modified é definido como 0 e após salvar, vejo a coluna atualizada desta linha do nó na lista de conteúdo do administrador com o valor atual da data e hora.

Códio
fonte

Respostas:

14

Você deve conseguir preservar a changedhora original definindo primeiro uma propriedade customizada no objeto nó, digamos $node->modified, em seu script de migração antes da chamada node_save()e, em seguida, implementando o gancho node_presave:

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

Isso funcionará desde os node_save()conjuntos $node->changedanteriores à chamada de todos os módulos implementados hook_node_presave().

jhedstrom
fonte
Sim ele funciona 100% :)
Codium
11
Suspeito que eu seja abatido por isso, mas se, como eu, você estiver executando um script de curta duração via drush, isso não faz parte de um módulo e você não deseja implementar um módulo apenas para implementar um gancho, etc. trabalha para db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));depois de salvar.
Artfulrobot
Eu odeio que tenhamos que fazer algo tão estranho quanto um gancho (estranho porque a mudança acontece em um segmento de código completamente diferente), mas isso é culpa do drupal, não sua. +1
Kenny Wyland