Saya mencoba memigrasikan situs html saya saat ini ke Drupal. Saya memiliki lebih dari 80.000 halaman yang harus saya migrasikan, jadi saya pikir daripada duduk di depan komputer selama 50 tahun saya akan membuat modul. Saya dapat membuat skrip yang mengekstrak html dari setiap direktori dan sekarang saya sampai pada blok jalan di mana saya perlu membuat simpul. Saya mencoba membuat simpul baru menggunakan node_save()
, tetapi ketika node_save dieksekusi, saya mendapatkan PDOException
kesalahan dengan semua yang saya coba. Saya lewat $node
, yang merupakan array yang kemudian dilemparkan ke objek.
PDOException: di field_sql_storage_field_storage_write () (baris 424 dari /srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module).
Ini adalah bagaimana kami saat ini membuat simpul, tetapi menghasilkan kesalahan:
$node= array(
'uid' => $user->uid,
'name' => $user->name,
'type' => 'page',
'language' => LANGUAGE_NONE,
'title' => $html['title'],
'status' => 1,
'promote' => 0,
'sticky' => 0,
'created' => (int)REQUEST_TIME,
'revision' => 0,
'comment' => '1',
'menu' => array(
'enabled' => 0,
'mlid' => 0,
'module' => 'menu',
'hidden' => 0,
'has_children' => 0,
'customized' => 0,
'options' => array(),
'expanded' => 0,
'parent_depth_limit' => 8,
'link_title' => '',
'description' => '',
'parent' => 'main-menu:0',
'weight' => '0',
'plid' => '0',
'menu_name' => 'main-menu',
),
'path' => array(
'alias' => '',
'pid' => null,
'source' => null,
'language' => LANGUAGE_NONE,
'pathauto' => 1,
),
'nid' => null,
'vid' => null,
'changed' => '',
'additional_settings__active_tab' => 'edit-menu',
'log' => '',
'date' => '',
'submit' => 'Save',
'preview' => 'Preview',
'private' => 0,
'op' => 'Save',
'body' => array(LANGUAGE_NONE => array(
array(
'value' => $html['html'],
'summary' => $link,
'format' => 'full_html',
),
)),
'validated' => true,
);
node_save((object)$node);
// Small hack to link revisions to our test user.
db_update('node_revision')
->fields(array('uid' => $node->uid))
->condition('vid', $node->vid)
->execute();
Alih-alih melemparkan array ke
stdClass
objek, Anda bisa mencoba membuatstdClass()
objek baru dan kemudian menggunakan node_object_prepare () untuk menyiapkan objek untuk membuat node baru dan akhirnya secara manual mengubah nilai-nilai uid, nama, judul, bahasa, tubuh, dll. Juga, pastikan untuk menggunakan node_submit () sebelum menyimpan node baru ke database.Contoh: http://drupal.org/node/1173136
sumber
Masalah Anda adalah, bahwa Anda mencoba untuk membuat simpul baru dengan nid = null dan vid = null, yang mengacaukan tabel simpul saat Anda mencoba untuk memasukkan catatan baru dengan nomor indeks 0 - yang menciptakan masalah entri duplikat dan inti drupal membingungkan. Omong-omong - inti drupal rentan untuk tindakan seperti node_save tidak akan melihat masalah dan mencoba memasukkan catatan itu ke db - yang menyebabkan kesalahan sql - dan membuang pengecualian PDO
sumber