[Решено] Drupal API - как изменить ноду и задать таксономию?

Главные вкладки

Аватар пользователя EvgenySorokin EvgenySorokin 29 июля 2011 в 10:37

Доброе утро Drupal сообществу.
1. Подскажите, есть ли возможность через drupal api изменить содержимое имеющейся ноды и ее дополнительных CCK-полей?
2. И вопрос второй - как задать конкретный термин (уже имеющийся) словаря при создании ноды через node_save [решено].
Спасибо.

Комментарии

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 29 июля 2011 в 11:11

По делу вопрошать надо, иначе твой вопрос можно сократить до "42?".
Изменить ноду, поля?
Что ноду? Что поля?
Изменить значения? Изменить настройки поля? Добавить поля? Удалить поля?
Отвечающие вам, сэр, все варианты расписывать должны?

Аватар пользователя razz razz 29 июля 2011 в 11:51

Сам не пользовался, но если вы не пробывали, то попробуйте, вдруг то, что ищите:)
1. http://api.drupal.ru/api/function/taxonomy_node_save/6 сохраняет связь ноды и термина.
2. Пример кода. Взято здесь.Там в комментариях и по первому вопросу есть пояснения.

<?php$node = new stdClass();
$node->title = 'Node title';
$node->body = 'Node body';
$node->type = 'book';
$node->uid = 1;
$node->filter = 1;
$node->status = 1;
$node->comment = 2;
$node->field_publisher[0]['value'] = 'Foo'; // текстовое cck поле field_publisher
$node->field_author[0]['value'] = 'Bar';    // текстовое cck поле field_author
 
node_save($node);?>
Аватар пользователя EvgenySorokin EvgenySorokin 29 июля 2011 в 12:32

razz спасибо! Но пример показывает как создать ноду с cck, а мне нужно отредактировать уже имеющиеся ноды, поля.
Но зато по таксономии нашлась инфа в комменте.
Осталось пока что открытым - редактирование содержимого полей через api.

Аватар пользователя razz razz 29 июля 2011 в 12:37

А почему нельзя изменить ноду таким же образом?
Вы вытаскиваете ноду http://api.drupal.ru/api/function/node_load/6 и присваиваете новые значения свойствам ноды, после чего сохраняете. Попробуйте, я этого ни разу не делал:)

Аватар пользователя EvgenySorokin EvgenySorokin 29 июля 2011 в 13:16

Заработало :).
Спасибо широко известному XandeadX, вот тут коммент, который помог.
И так, все вопросы решены, всем спасибо.

Возможному кому-то из новичков будут полезны коды создания, редактирования нод через API.
1. Создание ноды, присваивание ее к таксономии. В примере таксономия "товар". Можно писать ее без переменной, это для другого нужно мне. :

require_once 'includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$node = new stdClass();
$node->title = "Заголовок новости";
$node->body = "jjjjjjJJJJJJJJJjjjjjjjjjj";
$node->teaser = $node->body;
$node->type = "product";
$node->created = time(); // дата создания
$node->changed = $node->created; // дата обновления
$node->status = 1; // нода опубликована
$node->format = 1; // используется фильтр Filtered HTML
$node->comment = 2; // комментарии разрешены
$node->uid = 1; // ноду добавил "Гость", можно поставить uid=1, тогда ноду добавит админ сайта
$node->language = 'ru'; // нода на русском языке
$node->field_v[0]['value']='Gutenberg';
$te = Товар;
$terms = taxonomy_get_term_by_name($te);
if (count($terms)) {
  foreach ($terms as $value) {
    $node->taxonomy[$value->tid] = $value;
  }
}
node_save($node);
$new_id = $node->nid;

2. Изменение полей ноды, в данном случае изменяем титл и новое cck-поле "V" ноды номер 162.

require_once 'includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$node = node_load(162);
$node->title = "Заголовок измененный";
$node->field_v[0]['value']='ололол';
node_save($node);

В том случае, если URL генерируются модулем патчавто, то URL соотв. изменится. Видимо это тоже как-то можно решить, но сейчас это не требуется.