Drupal 7: разница между вставкой/обновлением узла

Я создал модуль для получения информации о сервере. Итак, я создал определенный тип контента. Для сбора всех данных требуется одно поле — имя хоста.

Я использую функцию hook_node_presave() для добавления такой информации, как ЦП, ОЗУ и т. д. в моем узле. Поэтому, когда я создаю новый узел, я вручную указываю имя, и drupal вызывает функцию hook_node_presave(), которая автоматически вставляет другую информацию в мой узел.

Я также установил cron для периодического обновления информации о каждом узле. Для этого я использую hook_cron(). Мне удается загрузить каждый узел благодаря node_load(), чтобы обновить их, но когда я хочу сохранить их с помощью node_save() Drupal, логически вызываю hook_node_presave()... Но не хочу, чтобы это произошло: потому что эта функция еще раз обновляет информацию!

Как я могу отличить новый узел от обновленного узла в hook_node_presave()? В противном случае какую функцию я могу вызвать, чтобы избежать этой проблемы?

Спасибо за вашу помощь


person BDR    schedule 12.07.2013    source источник


Ответы (1)


Просто проверьте элемент is_new в объекте узла или на наличие элемента nid:

function MYMODULE_node_presave($node) {
  if ($node->is_new) {
    // ...
  }
 
  // Equivalent to
  if (empty($node->nid)) {
    // ...
  }
}

Согласно документам user_save():

Параметры

$node: объект $node, который необходимо сохранить. Если $node-›nid опущен (или $node-›is_new имеет значение TRUE), будет добавлен новый узел.

person Clive    schedule 12.07.2013