Estou tentando migrar meu site html atual para o Drupal. Como tenho mais de 80.000 páginas para migrar, pensei que, em vez de ficar sentado na frente de um computador por 50 anos, criaria um módulo. Consegui criar um script que extrai o html de cada diretório e agora cheguei a um bloqueio no qual preciso criar um nó. Estou tentando criar um novo nó usando node_save()
, mas quando node_save é executado, recebo um PDOException
erro com tudo o que tento. Estou passando $node
, que é uma matriz que é lançada em um objeto.
PDOException: em field_sql_storage_field_storage_write () (linha 424 de /srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module).
É assim que estamos criando o nó atualmente, mas produz um erro:
$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();
Em vez de converter uma matriz em um
stdClass
objeto, você pode tentar criar um novostdClass()
objeto e, em seguida, usar node_object_prepare () para preparar o objeto para criar um novo nó e, finalmente, alterar manualmente os valores de uid, nome, título, idioma, corpo, etc. Além disso, certifique-se de usar node_submit () antes de salvar o novo nó no banco de dados.Exemplo: http://drupal.org/node/1173136
fonte
Seu problema é que você está tentando criar um novo nó com nid = null e vid = null, que está estragando a tabela de nós enquanto tenta inserir novos registros com o número de índice 0 - o que está criando um problema de entradas duplicadas e núcleo drupal confuso. A propósito - o núcleo drupal é vulnerável a ações como o node_save não verá o problema e tentará inserir esse registro no db - o que está causando um erro de sql - e lançando uma exceção DOP
fonte