Jak zatrzymać Drupala w celu ustawienia daty zmiany węzła podczas tworzenia?

9

To jest moje drugie pytanie dotyczące problemów z tworzeniem niestandardowego skryptu migracji.

Tworzę tylko nowe węzły i nie dbam o aktualizacje.

Kod:

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

Np. Mój $ zmodyfikowany jest ustawiony na 0 i po zapisaniu widzę zaktualizowaną kolumnę tego wiersza węzła na liście treści administratora z bieżącą wartością daty / godziny.

Codium
źródło

Odpowiedzi:

14

Powinieneś być w stanie zachować pierwotny changedczas, najpierw ustawiając niestandardową właściwość obiektu węzła, powiedzmy $node->modified, w skrypcie migracji przed wywołaniem node_save(), a następnie implementując hook_presave:

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

Działa to od node_save()zestawów $node->changedprzed wywołaniem wszystkich implementujących modułów hook_node_presave().

jhedstrom
źródło
Tak, działa w 100% :)
Codium
1
Podejrzewam, że zostanę z tego powodu zestrzelony, ale jeśli tak jak ja, uruchamiasz krótkotrwały skrypt za pośrednictwem drush, który nie jest częścią modułu i nie chcesz implementować modułu tylko po to, aby zaimplementować hak itp. działa db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));po zapisaniu.
artfulrobot
Nienawidzę tego, że musimy zrobić coś tak niezręcznego jak haczyk (niezręczny, ponieważ zmiana dzieje się w zupełnie innym segmencie kodu), ale to wina Drupala, a nie twojej. +1
Kenny Wyland