Я пытаюсь перенести мой текущий сайт HTML в Drupal. У меня есть более 80 000 страниц, которые я должен перенести, поэтому я подумал, что вместо того, чтобы сидеть перед компьютером в течение 50 лет, я бы создал модуль. Мне удалось создать скрипт, который извлекает html из каждого каталога, и теперь я попал в дорожный блок, где мне нужно создать узел. Я пытаюсь создать новый узел, используя node_save()
, но когда выполняется node_save, я получаю сообщение PDOException
об ошибке со всем, что я пытаюсь. Я передаю $node
, который является массивом, который затем преобразуется в объект.
Исключение PDO: в field_sql_storage_field_storage_write () (строка 424 из /srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module).
Вот как мы сейчас создаем узел, но он выдает ошибку:
$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();
Вместо приведения массива к
stdClass
объекту вы можете попробовать создать новыйstdClass()
объект, а затем с помощью node_object_prepare () подготовить объект к созданию нового узла и, наконец, вручную изменить значения uid, name, title, language, body и т. Д. Также обязательно используйте node_submit () перед сохранением нового узла в базе данных.Пример: http://drupal.org/node/1173136
источник
Ваша проблема заключается в том, что вы пытаетесь создать новый узел с nid = null и vid = null, который портит таблицу узлов, когда вы пытаетесь вставить новые записи с индексом 0 - что создает проблему с дублирующимися записями и сбивает с толку друпальное ядро. Кстати, ядро drupal уязвимо для таких действий, так как node_save не увидит проблему и попытается вставить эту запись в базу данных - что вызывает ошибку sql - и выдает исключение PDO
источник