Подскажите, пожалуйста, как программно реализовать действие, которое должно случится после того как данные формы были сохранены в БД?
Все хуки, которые нахожу в api позволяют сделать что либо после нажатия кнопки "сохранить", но перед сохранением данных в БД. А нужно после сохранения.
Например, есть нода "Заявка", имеющая ряд полей. Заявка может принимать разные статусы, которые меняются программно в зависимости от заполненности полей формы. Пользователь закачал файл в поле1 - статус изменился. Изменил значение в поле2 - статус снова изменился. То есть, требуется анализировать измененные пользователем данные после отправки формы, после чего запускать скрипт смены статуса.
Действие после сохранения ноды в БД
Главные вкладки
Лучший ответ
У ноды есть хук hook_node_presave
Комментарии
У ноды есть хук hook_node_presave
даже из названия хука видно, что он выполняется перед сохранением в БД.
А зачем сохранять, менять статус, опять сохранять, если можно поменять значения в ваших полях и сохранить один раз?
эээ..не очень понял этот комментарий. Сохраняется нода только один раз. Дальше запускается функция, которая проверяет, что там сохранилось, и меняет статусы.
Но я проверил - ваш вариант подходит. Я был уверен, что до сохранения ноды в БД значение поля ноды, которое можно вытащить с помощью field_get_items('node', $node, 'field_name') - будет прежним, каким было ДО полноценного сохранения в БД. Однако это не так. Внутри hook_node_presave поле выводится уже с измененным значением. И это то, что надо. Спасибо! Есть конечно вероятность, что произойдет какой-нить сбой и поле не запишется в БД, но она ничтожна, думаю
А после смены статуса ОПЯТЬ сохраняет ноду. Вот я и говорю, зачем дважды сохранять. Это же лишняя нагрузка на БД
да, теперь понятно, спасибо!