Можно ли разместить несколько форм на одной странице?
Я пытаюсь сделать страницу предложения купона. Я хотел иметь две формы для двух разных предложений на каждой стороне страницы. Каждая форма имеет текстовое поле для кода купона и собственную кнопку отправки. Первая форма работает хорошо; однако скрытые значения второй формы, похоже, переопределяются значениями первой формы.
Я использую hook_alter, чтобы изменить вторую форму, чтобы она отличалась, но она по-прежнему имеет тот же form_id, что и первая. Это то, что вызывает мои проблемы, или мне нужно искать / думать где-то еще?
Две формы имеют одинаковые значения для «form_id» и «form_token», но разные значения для «form_build_id».
hook_forms()
не решает автоматически это. Если вы просто используете одну и ту же форму дважды на одной и той же странице, у вас все еще остается проблема повторения одного и того же поля формы дважды.hook_forms()
не используется для двух форм с одинаковыми полями формы на одной странице; он используется, чтобы позволить иметь единый конструктор форм для разных идентификаторов форм.hook_forms()
. OP затем изменяет одну из двух форм.Вы можете иметь более одной формы на одной странице; посмотрите, что сделано с помощью node_admin_content () , который использует следующий код:
Оставляя первый оператор IF, функция добавляет две разные формы, которые имеют свои собственные обработчики представления.
Проблема с полями формы, которые повторяются дважды. Следующая структура массива создаст проблемы при выравнивании массива форм, так как будет два «купонных» поля.
Не видя используемого кода, я мог бы подумать, что использование обратного вызова страницы, который вызывает drupal_get_form (), вероятно, в вашем случае является более простым способом.
Я попытался использовать следующий код в Drupal 6.
Содержимое
$output
для этих двух форм было следующим (я удалил вывод для отдельных полей формы).Нет конфликта между идентификатором HTML, назначенным одному и тому же полю формы, и значение для "form_build_id" (или "form_token") отличается в двух формах.
Реализация,
hook_form_alter()
используемая для изменения формы, должна уметь понимать, в каком случае изменять форму, или обе формы будут отображать одинаковые поля.С точки зрения пользовательского опыта, я не уверен, что показ двух разных форм с их собственными кнопками отправки - лучший способ сделать то, что вы пытаетесь достичь.
Я думаю, что было бы лучше использовать форму, которая показывает различные поля на основе значений, установленных для других полей. Например, форма может иметь селектор для типа купона и отображать различные поля формы в зависимости от выбранного типа купона.
источник