it-swarm-id.com

Bagaimana cara membuat node menggunakan node_save?

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 kesalahan PDOException dengan semua yang saya coba. Saya lewat $node, yang merupakan array yang kemudian dimasukkan 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();
9
samwell

Saya pikir Anda harus membaca Cara pemrograman membuat node, komentar dan taksonomi dalam Drupal 7 .

$node = new stdClass(); // We create a new node object
$node->type = "page"; // Or any other content type you want
$node->title = "Your title goes jere";
$node->language = LANGUAGE_NONE; // Or any language code if Locale module is enabled. More on this below *
$node->path = array('alias' => 'your node path'); // Setting a node path
node_object_prepare($node); // Set some default values.
$node->uid = 1; // Or any id you wish

// Let's add standard body field
$node->body[$node->language][0]['value'] = 'This is a body text';
$node->body[$node->language][0]['summary'] = 'Here goes a summary';
$node->body[$node->language][0]['format'] = 'filtered_html'; // If field has a format, you need to define it. Here we define a default filtered_html format for a body field

$node = node_submit($node); // Prepare node for a submit
node_save($node); // After this call we'll get a nid
6
penguin89

Alih-alih melemparkan array ke objek stdClass, Anda bisa mencoba membuat objek stdClass() baru dan kemudian menggunakan node_object_prepare () untuk menyiapkan objek untuk membuat objek baru simpul 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

6
dwieeb

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 membingungkan drupal core. Omong-omong - drupal core 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

1
Daniofantasy