Создание узлов программно в Drupal 6 - PullRequest
3 голосов
/ 31 марта 2010

Я искал, как создавать узлы в 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: INSERT INTO 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.module в строке 409.

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

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

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

Редактировать: Немного поиграв с ней, я обнаружил, что у меня произошла ошибка в моих «аргументах доступа» в hook_menu(), но что касается дубликата, я так и не смог разобраться.Так что, если вы столкнетесь с той же проблемой, удачи и напишите здесь, если вы найдете проблему!: -)

Ответы [ 5 ]

3 голосов
/ 04 августа 2010

То, что я сделал для программного создания узла в 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
}
3 голосов
/ 31 марта 2010

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

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

Помните об этих вещах:

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

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

1 голос
/ 31 марта 2010

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

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

0 голосов
/ 15 сентября 2014

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

В моем случае мне пришлось дать разрешение «История: создание нового контента» на роль пользователя.

0 голосов
/ 31 марта 2010

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

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);

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

Возможные причины:

  • У вас есть какой-то пользовательский код / ​​другой модуль, который использует эту таблицу?
  • Вы дважды запускаете вставку операции nook_nodeapi в своем коде при создании узла.
...