как написать триггер после сохранения


Крючок node_api предоставляет набор триггеров, которые позволяют настраивать то, что может произойти, например, при предварительном сохранении. Код операции предварительного сохранения node_api запускает действие, которое происходит после нажатия кнопки "Сохранить" узла, но ДО того, как информация в форме узла будет вставлена в базу данных. Я хотел бы создать триггер, который будет триггером после сохранения, для запуска моего пользовательского кода после нажатия кнопки сохранить, но ПОСЛЕ того, как информация об узле будет сохранена в база данных. Есть ли у кого-нибудь идеи о том, как я мог бы создать такой триггер?

(Я прочитал документацию о том, как создать триггер, я просто не знаю, как закодировать триггер, который я описываю выше.)

Author: user1015214, 2012-05-09

1 answers

Просто чтобы немного разбить процесс (на основе ваших других вопросов:1,2); когда вы отправляете форму узла:

  1. node_form_submit() звонки node_save().
  2. node_save() немедленно вызывает node_invoke_nodeapi($node, 'presave');, чтобы сообщить другим модулям о предварительном сохранении.
  3. node_save() затем устанавливает несколько свойств для объекта узла, и запись узла записывается в таблицу node в базе данных с помощью drupal_write_record().
  4. В самом, самом конце функции ( после того, как данные были записаны в таблицу node), node_invoke_nodeapi() вызывается снова с помощью 'insert' или 'update', в зависимости от выполняемой текущей операции.

Если вы просмотрите эти функции и приведенную выше сводку, вы увидите, что данные узла на 100%, определенно зафиксированы в базе данных до 'insert' или 'update' операции выполняются для hook_nodeapi().

Если этого не происходит для вашей установки, я бы настоятельно рекомендовал заменить ядро на свежая версия, так как это звучит так, как будто что-то пошло ужасно неправильно!

Переходя к фактическому вопросу; единственный способ добавить крючок после сохранения - это добавить еще одну строку в основную функцию node_save() для ее вызова. Но вы все равно добавите его сразу после вызова в node_invoke_nodeapi($node, $op); (где $op - это 'insert' или 'update'), так что я не уверен, что это поможет.

 1
Author: Clive, 2017-04-13 12:47:08