недоступны поля в hook_update, которые добавляются в hook_load

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

Аватар пользователя g-lock g-lock 9 октября 2009 в 6:24

Здравствуйте. Создал свой тип материала с помощью модуля.
Нода создаётся успешно. Затем изменяю её и жму сохранить. Далее выводятся сообщения:

* hook_load
* hook_validate
* node_form_submit_handler
* hook_update
* mynode test был обновлен.
* hook_load

Эти сообщения соответсвуют выполняемым хукам. Но я не могу понять, почему в hook_update не видно полей, которые я добавляю в hook_load.

Комментарии

Аватар пользователя zhylik zhylik 9 октября 2009 в 13:38

в hook_update() $node -- не нода... а что-то типа (object)$form_state['values'] при обработке (submit, validate) форм... вобщем совпадает с $node в hook_insert()

Путь $form_state['values']->$node в hook_update() можете сами отследить в этих функциях:
node_form_submit()
node_form_submit_build_node()
node_submit()
node_save()
node_invoke() -- тут запускается hook_update()

вы бы уточнили конкретную задачу.

Аватар пользователя g-lock g-lock 9 октября 2009 в 15:27

Спасибо за ответ.
Задача такая: я добавил своё поле. В hook_update мне нужно найти запись из внешней таблицы по этому полю и внести в неё изменения.
Пытался это сделать так:
function hook_update($node) {
db_query("UPDATE mytable SET flags = %d WHERE val = %d", 1, $node->val);
}

Тогда единственное решение - вытащить $node->val по $node->nid?

Еще вопрос, какой путь проходится для вызова hook_validate (откуда вызывается node_validate)?