J'essaie de migrer mon site html actuel vers Drupal. J'ai plus de 80 000 pages à migrer, alors j'ai pensé qu'au lieu de m'asseoir devant un ordinateur pendant 50 ans, je créerais un module. J'ai pu créer un script qui extrait le code HTML de chaque répertoire et maintenant je suis arrivé à un barrage routier où j'ai besoin de créer un nœud. J'essaie de créer un nouveau nœud en utilisant node_save()
, mais lorsque node_save est exécuté, j'obtiens une PDOException
erreur avec tout ce que j'essaie. Je passe $node
, qui est un tableau qui est ensuite converti en objet.
PDOException: dans field_sql_storage_field_storage_write () (ligne 424 de /srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module).
Voici comment nous créons actuellement le nœud, mais cela produit une erreur:
$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();
Au lieu de convertir un tableau en
stdClass
objet, vous pouvez essayer de créer un nouvelstdClass()
objet, puis d'utiliser node_object_prepare () pour préparer l'objet à la création d'un nouveau nœud, puis enfin modifier manuellement les valeurs de uid, nom, titre, langue, corps, etc. Assurez-vous également d'utiliser node_submit () avant d'enregistrer le nouveau nœud dans la base de données.Exemple: http://drupal.org/node/1173136
la source
Votre problème est que vous essayez de créer un nouveau nœud avec nid = null et vid = null, ce qui fout la table des nœuds lorsque vous essayez d'insérer de nouveaux enregistrements avec le numéro d'index 0 - ce qui crée un problème d'entrées en double et noyau drupal déroutant. Soit dit en passant - drupal core est vulnérable pour des actions telles que node_save ne verra pas le problème et essaiera d'insérer cet enregistrement dans la base de données - ce qui provoque une erreur sql - et de lever une exception PDO
la source