Bagaimana cara menghentikan Drupal untuk mengatur simpul yang diubah tanggal saat pembuatan?

9

Ini adalah pertanyaan kedua saya tentang masalah saya dalam membuat skrip migrasi khusus.

Saya hanya membuat node baru dan tidak peduli tentang pembaruan.

Kode:

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

Misalnya $ saya dimodifikasi diatur ke 0 dan setelah simpan saya melihat kolom diperbarui dari baris node ini dalam daftar konten admin dengan nilai datetime saat ini.

Natrium
sumber

Jawaban:

14

Anda harus dapat mempertahankan changedwaktu asli dengan terlebih dahulu menetapkan properti kustom pada objek node, katakanlah $node->modified, dalam skrip migrasi Anda sebelum menelepon node_save(), dan kemudian menerapkan kait node_presave:

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

Ini akan bekerja sejak node_save()set $node->changedsebelum memanggil semua modul yang mengimplementasikan hook_node_presave().

jhedstrom
sumber
Ya itu bekerja 100% :)
Codium
1
Dugaan saya akan tertembak jatuh untuk ini, tetapi jika seperti saya Anda menjalankan skrip berumur pendek melalui drush yang bukan bagian dari modul dan Anda tidak ingin menerapkan modul hanya untuk mengimplementasikan pengait dll. Maka berfungsi db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));setelah menyimpan.
artfulrobot
Saya benci bahwa kita harus melakukan sesuatu yang canggung seperti hook (canggung karena perubahan terjadi pada segmen kode yang sama sekali berbeda), tapi itu kesalahan drupal, bukan milikmu. +1
Kenny Wyland