Передача значения из MigX в шаблон AjaxForm

Добрый день. На сайте создана страница с вакансиями. Каждая вакансия является элементом MigX, которая выводится по шаблону:
...
<div>[[+vacancy_name]]</div>
<span>[[+price]]</span>
...
[[!AjaxForm?
&form=`tpl.vacancyAjaxForm`
...
]]
То есть в каждом элементе (в каждой вакансии) есть форма, выведенная через AjaxForm. Кто-нибудь знает как в шаблон формы tpl.vacancyAjaxForm вставить [[+vacancy_name]] и [[+price]], чтобы эти данные отправлялись на почту?
Шаблон сейчас выглядит так, но вместо [[+...]] — пустота

<form action="" id="vacancy-[[+idx]]" >
<input name="vacancy" placeholder="[[+vacancy_name]]" type="text">
...
</form>
Дмитрий
20 марта 2022, 09:25
modx.pro
584
0

Комментарии: 5

Артур Шевченко
20 марта 2022, 10:02
+1
1. AjaxForm принимает любые параметры и в шаблоне они доступны как [[+placeholder]].
2. Чтобы данные передавались на почту они должны быть значениями именованного поля формы.
3. Чья фантазия придумала вызывать AjaxForm внутри каждого элемента? Хорошей практикой считает сделать 1 форму и с помощью JS подставлять в неё нужные данные, например название вакансии.
    Дмитрий
    20 марта 2022, 10:49
    0
    1. Так и пишем — [[+idx]], [[+vacancy_name]] и т.д. Но выводится пустота
    2. Так и написал
    <input name="vacancy" placeholder="[[+vacancy_name]]" value="[[+vacancy_name]]" type="text">
    3. Каждая форма должна быть идентифицирована уникальным ID, соответствующим номеру элемента modx (то есть с помощью [[+idx]])
      Александр Мельник
      20 марта 2022, 11:00
      +1
      1. Но вы же не передаете эти параметры внутрь AjaxForm. Чтобы внутри формы вам был доступен [[+vacancy_name]] нужно передать его при вызове AjaxForm
      [[!AjaxForm?
      &form=`tpl.vacancyAjaxForm`
      &vacancy_name=`hello world`
      ]]
      2. Вы наверное не так поняли Артура. Это очень плохая практика, когда у каждой услуги (товаре или что там еще) создается своя форма при помощи ajaxform. А если их будет 1000? 1000 раз будете на одной странице запускать сниппет ajaxform? Более экономично и разумно, иметь один вызов ajaxform где то в футере, он реализует одну форму. А дополнительно на js вы пишите просто скрипт который при клике на кнопку берет данные конкретно той вакансии, по которой кликнули и вставляет данные в ту форму, которая у вас в футере. И открывает модальное окно с этой формой. Тогда имея всего одну форму вы сможете сделать заказ любой вакансии, потому что данные в форме будут заполнены при клике и будут каждый раз разные.
      Дмитрий
      20 марта 2022, 11:15
      0
      1. Спасибо огромное, это работает) Я так и думал, что есть какая-то такая фишка
      2. Там не очень много вакансий. Это корпоративный сайт одной компании. Вакансий 10 будет. И форма вызывается не по кнопке, а просто стоит в тексте. Но я согласен. Если форм много, то лучше что-то придумать без сотен вызовов форм.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5