Когда выполнение функции входит в функцию обратного вызова любой из кнопок, $ form_state ['triggering_element'] всегда одинакова, последняя кнопка
Это, к сожалению, как работает API форм Drupal. Если у вас есть несколько кнопок отправки в форме, вы иногда не можете определить, какая из них была нажата.
Во-первых, посмотрите этот ответ на Drupal.org , который, я думаю, может вам помочь:
Посмотрите в вашем коде настройки формы. Где вы определяете различные кнопки, измените '#value'
на '#default_value'
. Это позволит Drupal распознавать, что значение поля (т. Е. Значение отправки формы) может измениться, и поэтому оно не будет зафиксировано на значении последней кнопки независимо от того, какая кнопка была нажата.
Если это не поможет, вот несколько других решений, которые могут помочь:
Посмотрите прямо на массив PHP $_POST
, чтобы узнать, какая кнопка была нажата. Это работает, но идет вразрез с "The Drupal Way". Весь смысл API форм в Drupal состоит в том, чтобы скрыть от вас необработанную функциональность PHP. Но в такие моменты может быть полезно взглянуть на это.
Положите кнопки в отдельные формы. Это, очевидно, будет работать только в том случае, если вам не нужно одновременно отправлять какие-либо другие поля.
Создайте скрытое поле в вашей форме и используйте Javascript, чтобы заполнить его именем нажатой кнопки непосредственно перед отправкой формы.
Надеюсь, это поможет.