Wie stoppe ich Drupal, um das Änderungsdatum des Knotens bei der Erstellung festzulegen?

9

Dies ist meine zweite Frage zu meinen Problemen beim Erstellen eines benutzerdefinierten Migrationsskripts.

Ich erstelle nur neue Knoten und kümmere mich nicht um Updates.

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

ZB ist mein $ modifiziert auf 0 gesetzt und nach dem Speichern wird die aktualisierte Spalte dieser Knotenzeile in der Admin-Inhaltsliste mit dem aktuellen Datum / Uhrzeit-Wert angezeigt.

Codium
quelle

Antworten:

14

Sie sollten in der Lage sein, die ursprüngliche changedZeit beizubehalten $node->modified, indem Sie vor dem Aufruf zunächst eine benutzerdefinierte Eigenschaft für node_save()das Knotenobjekt festlegen , z. B. in Ihrem Migrationsskript , und dann den Hook node_presave implementieren:

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

Dies funktioniert seit node_save()Sätzen $node->changedvor dem Aufruf aller implementierten Module hook_node_presave().

jhedstrom
quelle
Ja, es funktioniert zu 100% :)
Codium
1
Ich vermute, ich werde dafür abgeschossen, aber wenn Sie wie ich ein kurzlebiges Skript über Drush ausführen, das nicht Teil eines Moduls ist, und Sie kein Modul implementieren möchten, nur um einen Hook usw. zu implementieren, dann ist es das funktioniert db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));nach dem Speichern.
Artfulrobot
Ich hasse es, dass wir etwas tun müssen, das so umständlich ist wie ein Haken (umständlich, weil die Änderung in einem völlig anderen Codesegment erfolgt), aber das ist Drupals Schuld, nicht deine. +1
Kenny Wyland