Come fermare Drupal per l'impostazione della data di modifica del nodo al momento della creazione?


9

Questa è la mia seconda domanda sui miei problemi con la creazione di script di migrazione personalizzati.

Sto creando solo nuovi nodi e non mi importa degli aggiornamenti.

Codice:

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

Ad esempio il mio $ modificato è impostato su 0 e dopo il salvataggio vedo la colonna aggiornata di questa riga del nodo nell'elenco dei contenuti dell'amministratore con il valore datetime corrente.

Risposte:


14

Dovresti essere in grado di preservare l' changedora originale impostando prima una proprietà personalizzata sull'oggetto nodo, ad esempio $node->modified, nello script di migrazione prima di chiamare node_save()e quindi implementando l'hook node_presave:

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

Funzionerà dal momento che node_save()imposta $node->changedprima di chiamare tutti i moduli che implementano hook_node_presave().


Sì, funziona al 100% :)
Codium,

1
Sospetto che mi verrà abbattuto per questo, ma se come me stai eseguendo uno script di breve durata tramite Drush che non fa parte di un modulo e non vuoi implementare un modulo solo per implementare un hook ecc. funziona db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));dopo il salvataggio.
artfulrobot,

Odio che dobbiamo fare qualcosa di imbarazzante come un hook (imbarazzante perché il cambiamento avviene in un segmento di codice completamente diverso), ma è colpa di Drupal, non tua. +1
Kenny Wyland,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.