Wie erstelle ich Knoten mit node_save?


9

Ich versuche, meine aktuelle HTML-Site in Drupal zu migrieren. Ich habe über 80.000 Seiten, die ich migrieren muss, also dachte ich, anstatt 50 Jahre lang vor einem Computer zu sitzen, würde ich ein Modul erstellen. Ich konnte ein Skript erstellen, das das HTML aus jedem Verzeichnis extrahiert, und jetzt kam ich zu einer Straßensperre, an der ich einen Knoten erstellen muss. Ich versuche, einen neuen Knoten mit zu erstellen node_save(), aber wenn node_save ausgeführt wird, PDOExceptionwird bei allem, was ich versuche , eine Fehlermeldung angezeigt . Ich gehe vorbei $node, das ist ein Array, das dann in ein Objekt umgewandelt wird.

PDOException: in field_sql_storage_field_storage_write () (Zeile 424 von /srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module).

So erstellen wir derzeit den Knoten, aber es entsteht ein Fehler:

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

Antworten:


6

Ich denke, Sie sollten lesen, wie Sie Knoten, Kommentare und Taxonomien in Drupal 7 programmgesteuert erstellen .

$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

Warum das Downvote?
vfclists


1

Ihr Problem ist, dass Sie versuchen, einen neuen Knoten mit nid = null und vid = null zu erstellen, wodurch die Knotentabelle durcheinander gebracht wird, während Sie versuchen, neue Datensätze mit der Indexnummer 0 einzufügen. Dies führt zu einem Problem mit doppelten Einträgen und verwirrender Drupalkern. Übrigens - Drupal Core ist anfällig für Aktionen, bei denen node_save das Problem nicht erkennt und versucht, diesen Datensatz in die Datenbank einzufügen - was einen SQL-Fehler verursacht - und eine PDO-Ausnahme auslöst

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.