Действие после сохранения ноды в БД

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

Аватар пользователя Никки Никки 11 августа 2021 в 12:52

Подскажите, пожалуйста, как программно реализовать действие, которое должно случится после того как данные формы были сохранены в БД?
Все хуки, которые нахожу в api позволяют сделать что либо после нажатия кнопки "сохранить", но перед сохранением данных в БД. А нужно после сохранения.
Например, есть нода "Заявка", имеющая ряд полей. Заявка может принимать разные статусы, которые меняются программно в зависимости от заполненности полей формы. Пользователь закачал файл в поле1 - статус изменился. Изменил значение в поле2 - статус снова изменился. То есть, требуется анализировать измененные пользователем данные после отправки формы, после чего запускать скрипт смены статуса.

Лучший ответ

Комментарии

Аватар пользователя ivnish ivnish 11 августа 2021 в 12:58

А зачем сохранять, менять статус, опять сохранять, если можно поменять значения в ваших полях и сохранить один раз?

Аватар пользователя Никки Никки 11 августа 2021 в 13:18

эээ..не очень понял этот комментарий. Сохраняется нода только один раз. Дальше запускается функция, которая проверяет, что там сохранилось, и меняет статусы.

Но я проверил - ваш вариант подходит. Я был уверен, что до сохранения ноды в БД значение поля ноды, которое можно вытащить с помощью field_get_items('node', $node, 'field_name') - будет прежним, каким было ДО полноценного сохранения в БД. Однако это не так. Внутри hook_node_presave поле выводится уже с измененным значением. И это то, что надо. Спасибо! Есть конечно вероятность, что произойдет какой-нить сбой и поле не запишется в БД, но она ничтожна, думаю Smile

Аватар пользователя ivnish ivnish 11 августа 2021 в 14:47

Никк wrote: Сохраняется нода только один раз. Дальше запускается функция, которая проверяет, что там сохранилось, и меняет статусы.

А после смены статуса ОПЯТЬ сохраняет ноду. Вот я и говорю, зачем дважды сохранять. Это же лишняя нагрузка на БД