Создание узлов программно в Drupal 6
Я искал как создать узлы в 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 (), но что касается дубликата записи, я никогда не мог понять это.




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






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
Что касается дубликата записи, я до сих пор понятия не имею.


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 дважды в коде при создании узла.


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
}