Drupal → Как программно создать ноду (материал)
Drupal 7:
$node = new stdClass(); $node->type = 'story'; node_object_prepare($node); $node->title = 'Заголовок ноды'; $node->language = LANGUAGE_NONE; $node->body[LANGUAGE_NONE][0]['value'] = 'Содержание ноды'; $node->body[LANGUAGE_NONE][0]['summary'] = 'Текст анонса'; $node->body[LANGUAGE_NONE][0]['format'] = 'filtered_html'; $node->uid = 1; // необязательно $node->status = 1; // необязательно $node->promote = 1; // необязательно node_save($node);
Способ с помощью модуля Entity API:
$node = entity_create('node', array( 'type' => 'page', 'title' => 'test', 'body' => array( 'und' => array( array( 'value' => 'body value', 'summary' => 'body teaser', 'format' => 'filtered_html', ), ), ), )); node_save($node);
Drupal 6:
$node = new stdClass(); $node->type = 'story'; $node->title = 'Заголовок ноды'; $node->body = 'Содержание ноды'; $node->teaser = 'Текст анонса'; $node->uid = 1; // id автора $node->status = 1; // 1 - опубликовано, 0 - нет $node->promote = 1; // 1 - показывать на главной, 0 - нет node_save($node);
Комментарии
А как же node_submit() перед node_save() ?
Добрый день!
Использую указанный Вами код в модуле для 7-ки.
Почему-то если заголовок и значение поля кириллические, то открывается "На сайте произошла непредвиденная ошибка. Пожалуйста, повторите попытку позже." и нода соответственно не создается. При латинском заголовке и полях все нормально.
Подскажите, пожалуйста, в чем может быть проблема?
читайте логи
Выдает ошибку
PDOException: в функции field_sql_storage_field_storage_write() (строка 448 в файле /home/u120949/mysiteru/www/modules/field/modules/field_sql_storage/field_sql_storage.module)
Гуглил, связано с кодировкой БД, но вменяемого решения так и не нашел :(
Проблема в кодировке файла модуля, а не БД
Нету ли способа, чтобы весь шаблон объекта ноды уже был собран(со всеми полями),
а значения полей можно было просто дописать в сформированый объект?
Можно через node_load() загрузить ноду такого же типа изменить нужные поля и сохранить.
Да, я уже разобрался, спасибо - именно в кодировке файла модуля и была проблема.
Я уже думал об этом. Если ноду, которую я загружал, ктотоо удалит, то код не будет работать. Или сайт чистый, и на нет нет еще контента, код не сработает.
При создании новой ноды или доугой entity нужно приходится сохранять значение созданых полей. Нашел хороший способ тут .
Поля присоеденины к новому товару с помощью функции field_attach_submit.
А как url необходимый задать?
что за url?
http://xandeadx.ru/blog/drupal/441 извиняюсь я имел ввиду alias )))Благодарю!
Стоит обратить внимание на функцию node_object_prepare(), которая делает сразу несколько полезных вещей:
- заполняет объект ноды данными по умолчанию для этого типа ноды (например, флаги статуса, комментариев,
показа и подобное).
- заносит идентификатор текущего пользователя в $node->uid (делает пользователя автором материала)
- вызывает хуки hook_prepare() и hook_node_prepare()
Добрый день уважаемый xandeadx!
Как мне создать программно ноду с данными, которые я предварительно отправил из формы?
Заранее спасибо!
В функции сабмита твоей формы достаешь все данные. Они находятся в
$form_state['values'];
Оставить комментарий