Какая версия Drupal?
В Drupal 6 вы можете присоединиться к изменениям на узлах, используя hook_nodeapi и использовать необязательные параметры node_load для сравнения полей в старом узле и новом узле.
т.е.
<?php
/**
* Implementation of hook_nodeapi().
*/
// fires mymodule_send_email() when the field 'specialfield' on nodes
// of type 'specialnodetype' is updated
function mymodule_nodeapi($node, $op, $a3, $a4) {
if ($node->type == 'specialnodetype' && $op == 'update') {
// $node stores the "old node" and $new_node stores the "new node"
// we're about to save
$new_node = node_load($node->nid,null,true);
// if a particular field doesn't match, fire a particular action
if ($node->field_specialfield[0]['value'] !=
$new_node->field_specialfield[0]['value']) {
mymodule_send_email();
}
}
}
?>
Вы можете использовать аналогичную реализацию hook_nodeapi для автоматического обновления поля без необходимости повторного вызова node_save .
Обратите внимание, что содержимое, хранящееся в поле CCK, не всегда извлекается как «значение», поскольку поля CCK бывают разных видов и могут состоять из нескольких частей. Вы всегда можете просмотреть детали, используя print_r, который будет всегда получаться / присваиваться следующим образом:
<?php
// Displays an associative array with keys and values of the first instance
// of the CCK field 'fieldname'
print_r($node->field_fieldname[0]);
// Displays an associative array with keys and values of the third instance
// of the CCK field 'fieldname'
print_r($node->field_fieldname[2]);
?>
(Второй пример для поля, которое принимает несколько значений в узле.)
Не стесняйтесь ответить с более подробной информацией, если это необходимо.