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, PDOException
wird 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();
Anstatt ein Array in ein
stdClass
Objekt umzuwandeln , können Sie versuchen, ein neuesstdClass()
Objekt zu erstellen und dann mit node_object_prepare () das Objekt für die Erstellung eines neuen Knotens vorzubereiten und schließlich die Werte von uid, name, title, language, body usw. Manuell zu ändern Stellen Sie außerdem sicher, dass Sie node_submit () verwenden, bevor Sie den neuen Knoten in der Datenbank speichern.Beispiel: http://drupal.org/node/1173136
quelle
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
quelle