it-swarm.com.de

Wie erstelle ich Knoten mit node_save?

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, mit node_save() einen neuen Knoten zu erstellen, aber wenn node_save ausgeführt wird, wird bei allem, was ich versuche, ein PDOException -Fehler angezeigt. Ich gehe vorbei $node, 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();
9
samwell

Ich denke, dass Sie lesen sollten Wie man programmgesteuert Knoten, Kommentare und Taxonomien in Drupal 7 erstellt.

$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

Anstatt ein Array in ein stdClass Objekt umzuwandeln, können Sie versuchen, ein neues stdClass() Objekt zu erstellen und dann node_object_prepare () zu verwenden, um das Objekt für die Erstellung eines neuen vorzubereiten Knoten und ändern Sie schließlich manuell die Werte von UID, Name, Titel, Sprache, Text usw. Verwenden Sie außerdem node_submit (), bevor Sie den neuen Knoten in der Datenbank speichern.

Beispiel: http://drupal.org/node/1173136

6
dwieeb

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 verwirrend drupal core. Übrigens - drupal core ist anfällig für Aktionen wie node_save wird das Problem nicht sehen und versuchen, diesen Datensatz in die Datenbank einzufügen - Dies verursacht einen SQL-Fehler - und löst eine PDO-Ausnahme aus

1
Daniofantasy