Я разрабатываю Действие в Drupal, который, как предполагается, активируется после сохранения узла, экспортируя содержание в XML (который включает данные из узла, который был просто сохранен), с помощью "Триггера: После сохранения обновленного сообщения" триггер.
К сожалению, это действие на самом деле происходит прямо, прежде чем информация из недавно сохраненного сообщения сохранена к базе данных. т.е. при рассмотрении XML позже, я нахожу, что новое изменение, которое я внес, не было включено. Сохранение после редактирования другого узла восстановит ранее недостающие данные.
Как я могу заставить свое действие стрелять после того, как процесс сохранения будет завершен?
В этом контексте есть распространенная ошибка, независимо от того, используете ли вы триггер или предложение Майка Манроуса через hook_nodeapi ()
(+1):
Пока ваша логика экспорта работает в том же цикле страницы, который обработал обновление, и использует node_load ()
для получения данных узлов, node_load ()
может вернуть статически кэшированную версию узла до обновления, которая еще не содержит изменений .Если это проблема в вашем случае, вы можете обойти ее двумя способами:
TRUE
в качестве третьего параметра в node_load ()
. Это обеспечит свежее заполнение узла из базы данных (за счет некоторых дополнительных запросов к базе данных, поэтому следует помнить о потенциальном влиянии на производительность). hook_nodeapi ()
, вы можете вообще избежать необходимости вызывать node_load ()
, если передадите доступный объект $ node
прямо к вашей функции экспорта, так как это будет представление обновленного состояния. Вы должны использовать hook_nodeapi и вызывать ваше действие при вставке и обновлении. Просмотрите документацию по hook_nodeapi для других случаев, когда вы можете вызвать вашу логику экспорта.
пример, где имя модуля = 'export_to_xml':
/**
* Implementation of hook_nodeapi().
*/
function export_to_xml_nodeapi(&$node, $op, $a3, $a4) {
if ($op == 'update' || $op == 'insert') {
export_logic_function();
}
}