Làm thế nào để tạo các nút bằng cách sử dụng node_save?


9

Tôi đang cố gắng di chuyển trang web html hiện tại của mình vào Drupal. Tôi có hơn 80.000 trang tôi phải di chuyển nên tôi nghĩ thay vì ngồi trước máy tính trong 50 năm tôi sẽ tạo ra một mô-đun. Tôi đã có thể tạo một tập lệnh trích xuất html từ mỗi thư mục và bây giờ tôi đã đến một khối đường nơi tôi cần tạo một nút. Tôi đang cố gắng tạo một nút mới bằng cách sử dụng node_save(), nhưng khi node_save được thực thi, tôi gặp PDOExceptionlỗi với mọi thứ tôi thử. Tôi đang đi vào $node, đó là một mảng mà sau đó được đúc vào một đối tượng.

PDOException: trong trường_s_s

Đây là cách chúng tôi hiện đang tạo nút, nhưng nó tạo ra lỗi:

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

Câu trả lời:


6

Tôi nghĩ rằng bạn nên đọc Cách lập trình tạo các nút, nhận xét và phân loại theo chương trình trong 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

Tại sao các downvote?
vfclists

6

Thay vì truyền một mảng vào một stdClassđối tượng, bạn có thể thử tạo một stdClass()đối tượng mới và sau đó sử dụng node_object_prepare () để chuẩn bị đối tượng tạo một nút mới và sau đó thay đổi thủ công các giá trị của uid, name, title, ngôn ngữ, body, v.v. Ngoài ra, hãy chắc chắn sử dụng node_submit () trước khi lưu nút mới vào cơ sở dữ liệu.

Ví dụ: http://drupal.org/node/1173136


1

Vấn đề của bạn là, bạn đang cố gắng tạo một nút mới với nid = null và vid = null, điều này làm hỏng bảng nút khi bạn đang cố gắng chèn các bản ghi mới với chỉ số 0 - đang tạo ra một vấn đề trùng lặp và lõi drupal khó hiểu. Nhân tiện - lõi drupal dễ bị tổn thương đối với các hành động như node_save sẽ không thấy vấn đề và cố gắng chèn bản ghi đó vào db - điều này gây ra lỗi sql - và loại bỏ ngoại lệ PDO

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.