Создание узлов программно в Drupal 6

Создание узлов программно в Drupal 6

31.03.2010 12:35:01 Просмотров 50 Источник

Я искал как создать узлы в Drupal 6. Я нашел некоторые записи здесь на stackoverflow, но вопросы, казалось, были либо для более старых версий, либо решения не работали для меня. Итак, вот мой текущий процесс для создания

$node = new stdClass();

$node->title = "test title";
$node->body = "test body";
$node->type= "story";
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->format = 1;
$node->uid = 1;

node_save( $node );

Когда я выполняю этот код, узел создается, но когда я получил страницу администрирования, он выдает следующие ошибки:

предупреждение: недопустимый аргумент, предоставленный для foreach () в C:\wamp\www\steelylib\includes\menu.Inc на линии 258.

предупреждение: недопустимый аргумент, предоставленный для foreach () в C:\wamp\www\steelylib\includes\menu.Inc на линии 258.

предупреждение пользователя: повторяющаяся запись '36' для ключа 1 запрос: вставить в node_comment_statistics (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) значения (36, 1269980590, NULL, 1, 0) в C:\wamp\www\steelylib\sites\all\modules\nodecomment\nodecomment.модуль на линии 409.

предупреждение: недопустимый аргумент, предоставленный для foreach () в C:\wamp\www\steelylib\includes\menu.Inc на линии 258.

предупреждение: недопустимый аргумент, предоставленный для foreach () в C:\wamp\www\steelylib\includes\menu.Inc на линии 258.

Я посмотрел на разные учебники, и все они, похоже, следуют одному и тому же процессу. Я не уверен, что я делаю неправильно. Я использую Drupal 6.15. Когда я откатываю базу данных (до того, как я внес изменения), ошибки исчезают.

Править:
Немного поиграв с ним, я обнаружил, что у меня была ошибка в моих "аргументах доступа" в моем hook_menu (), но что касается дубликата записи, я никогда не мог понять это.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6#comment2550981_2548507
Ваша проблема, кажется, модуль комментариев.
https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6#comment2551301_2548507
Все таблицы имеют автоинкрементные идентификаторы в установке по умолчанию, поэтому ошибка произошла из uknown thing (модули, ручное изменение БД, проблема хостинга,...). Также попробуйте создать узел через drupal_execute: drupal.org/search/apachesolr_search/…
https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6#comment2551420_2548507
Я согласен с тем, что вы говорите. Однако узел с идентификатором 36 является тем, который создается. Это почти так же, как если бы он пытался вставить его дважды. Я хотел бы сказать, что ошибка будет в модуле комментариев, однако нет ошибки, когда любой другой модуль создает узел, поэтому я не могу сказать, что это модуль комментариев.

Ответы - Создание узлов программно в Drupal 6 / Creating nodes programmatically in Drupal 6

Kevin

31.03.2010 03:20:23

Необходимо стереть таблицу статистики узлов, ревизий узлов и комментариев узлов.

Проблема в том, что он пытается вставить запись, которая уже существует в статистике комментариев узлов.

https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6/2549374#comment2551424_2549374
я тоже так думал, но узел, который уже существует, - это тот, который я только что вставил (при проверке его в базе данных). Это почти как если бы он вставляется дважды.
https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6/2549374#comment2551468_2549374
Ну, node_save вызовет операцию сохранения hook_nodeapi в любых других включенных модулях. Начните с отключения несущественных модулей.
https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6/2549374#comment2551536_2549374
хорошая мысль, Я сделаю это завтра, когда вернусь на работу.
https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6/2549374#comment2555400_2549374
Ну, я попытался очистить все таблицы, но все равно получил ту же ошибку для дубликата записи. Однако я исправил другие ошибки. Смотрите пост Фарзана.
Является ответом!
farzan

31.03.2010 12:54:35

Я считаю, что проблема проистекает откуда-то еще. Приведенный выше фрагмент кода является 100% правильным. Но я уверен, что вы где-то ошиблись.

Я столкнулся с предупреждениями в строке 258 меню.инк. Источником предупреждения были неправильные записи меню. проверьте все hook_menu s в вашем модуле.
Одна распространенная ошибка - как и моя-присваивает неправильные значения этим пунктам меню: 'access callback', 'access arguments', 'page callback', 'page arguments'

Имейте эти пункты в виду:

  • 'access arguments'и 'page arguments'должны быть массивами.
  • Если вы хотите предоставить неограниченный доступ к элементу меню, выполните следующее: 'access callback' => true

Что касается дубликата записи, я до сих пор понятия не имею.

https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6/2551558#comment2555260_2551558
Спасибо! вы были прямо на крючке. У меня были аргументы доступа в виде одного значения вместо массива, содержащего только одно значение. Однако это только решило проблему меню.проблемы inc. Я все еще получаю это тревожное сообщение о том, что запись уже существует.
googletorp

31.03.2010 05:46:40

Я не уверен, что происходит с вашим сайтом точно, нужно будет проверить вашу БД и другие вещи, но ошибка, которую вы видите, вызвана этой строкой:

db_query('INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) VALUES (%d, %d, NULL, %d, %d)', $node->nid, $node->created, $node->uid, 0);

Это точно, когда узел сохраняется, и все выглядит нормально. Это место, где что-то get вставляется в эту таблицу. Так или иначе, у вас уже есть запись для узла с nid 36 в вашей таблице node_comment_statistics. Я не знаю, если ваши таблицы не синхронизированы, или вы вставляете две строки в эту таблицу.

Возможная причина:

  • У вас есть какой-то пользовательский код / другой модуль, который использует эту таблицу?
  • Вы запускаете nook_nodeapi op insert дважды в коде при создании узла.
https://stackoverflow.com/questions/2548507/creating-nodes-programmatically-in-drupal-6/2553424#comment2563580_2553424
Я определенно вставляю две строки в таблицу. Таблицы находятся в идеальной синхронизации. Он пытается вставить две повторяющиеся строки. Я ищу, чтобы попытаться найти проблему до сих пор...
wilsonodk

04.08.2010 06:36:42

То, что я сделал, чтобы программно создать узел в Drupal 6-это;

$node = new stdClass();

$node->name    = "test title";
$node->title   = $node->name;
$node->body    = "test body";
$node->type    = "story";
$node->created = time();
$node->changed = $node->created;
$node->status  = 1;
$node->promote = 1;
$node->sticky  = 0;
$node->format  = 1;
$node->uid     = 1;

if ($node = node_submit($node)) {
  node_save($node);
}
else {
  // Process error
}
augusto

15.09.2014 02:15:24

Хорошие изменения - это вопрос разрешений.

В моем случае я должен был дать разрешение "история : создание нового контента" для роли пользователя.

Закрыть X