Изменения полей ноды

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

Аватар пользователя ducebod ducebod 22 июля 2011 в 16:53

Через какие хуки я могу отследить какие конкретные поля ноды были изменены?
т.е. при сабмите сравнить каждое поле со старым значением и если оно изменилось обработать это.

Пробовал hook_form_alter - добавить в каждое поле новый элемент массива со старым значением

$form['#node']->field_track1['0']['old_value'] = $form['#node']->field_track1['0']['value'];

а потом обработать это в hook_nodeapi. Но проблема в том что в hook_nodeapi приходит уже объект ноды и моего поля 'old_value' там уже нет.

Возможно есть какой то способ сделать это?

Так же ищу аналогичное решение только для полей профиля.

Комментарии

Аватар пользователя ducebod ducebod 22 июля 2011 в 17:29

nnikol wrote:
Если что-то надо проверить при сохранении ноды, то есть hook validate
http://api.drupal.org/api/drupal/developer--hooks--node.php/function/hoo...

Мне надо сравнить два значения - старое и новое. hook_validate предоставляет только новое.

Аватар пользователя ducebod ducebod 22 июля 2011 в 17:32

nnikol wrote:
Если что-то надо проверить при сохранении ноды, то есть hook validate
http://api.drupal.org/api/drupal/developer--hooks--node.php/function/hoo...

Тем более в документации написано
To validate nodes of all types (not just nodes of the type(s) defined by this module), use hook_nodeapi() instead

Аватар пользователя ducebod ducebod 23 июля 2011 в 13:35

Если кому интересно - использовал модуль Rules. Очень удобен. Не забудьте включить Modules/Core/PHP Filter что бы исполнять произвольный PHP код.