Вопрос по AjaxForm

Если кому не лень подсказать, пожалуйста помогите. Использую migx чтобы создать динамические поля формы. То есть на разных страницах разное количество полей. Теперь вот вопрос, как сделать так, чтобы значения этих полей отправлять на почту и сделать их обязательными. Я на сейчас сделал так. Перебираю migx с полями формы. Затем составляю список полей для формы и список обязательных полей (в виде просто строки) и потом подставляю это все в AjaxForm

{set $pall = json_decode($_modx->resource.pall, true)}
{set $listQuest = ''}{* список вопросов *}
{foreach $pall as $questions}
  {set $validate = ''}
  {set $idAnswer = $questions.MIGX_id}{* id вопроса *}
  {set $listQuest =  $listQuest ~ '<p><b>{{+quest_' ~ $idAnswer ~ '}}</b>: ' ~ '{{+answer_' ~ $idAnswer ~ '}}' ~ ' (Другое: ' ~ '{{+answer_' ~ $idAnswer ~ '_oth}})'} {* записываем все поля для отправки на почту  получается строка в виде: <b>{{+quest_1}}</b>: {{+answer_1}} и так далее. Это для шаблона письма*}
  {if $questions.required == 1}
      {set $validate = $validate ~ "answer_" ~ $idAnswer ~ ":required,"} {* отмечаем все обязательные поля получается строка в виде: answer_1:required,answer_2:required и тд *}
  {/if}    
{/foreach}
{$_modx->runSnippet('!AjaxForm', [
                            'snippet' => 'FormIt',
                            'form' => 'opros.tpl',
                            'hooks' => 'email, spam',
                            'spamEmailFields'=> 'phone, name',
                            'emailSubject' => 'Опрос с сайта',
                            'emailTo' => $_modx->config.emailto,
                            'emailTpl' => '@INLINE <p>Опрос с сайта</b>
                                            <p>Страница: <b>{{+page}}</b>
                                            <p>Имя: <b>{{+name}}</b>
                                            <p>Телефон: <b>{{+phone}}</b>
                                            <p>Ответы:'
                                            ~ $listQuest,
                            'emailFrom' => 'test@test.ru',
                            'validate' => $validate
                        ])}
Наверное это жуткий костыль. Но в целом все работает. Только вот два вопроса.
Почему-то $validate когда я подставляю, поля не становятся required, хотя сама переменная правильно выглядит, если вручную из прописать, то все норм.
И я не могу проверить заполнено ли поле, поэтому на почту приходят все поля, а хотелось бы как-то проверить заполнено ли поле и отправить только заполненные поля.
А ну и чанк формы самой:

<form action="" method="post" class="modal-form ajax_form af_example">
    <input type="hidden" name="page" value="{$_modx->resource.pagetitle}"/>
    {set $pall = json_decode($_modx->resource.pall, true)} {* список вопросов *}
    {set $counter = 1}
    {foreach $pall as $questions}
        {set $answers = json_decode($questions.answers, true)} {* вопросы и ответы *}
        {set $idAnswer = $questions.MIGX_id}
        <h3>{$questions.question}{if $questions.required == 1}<span style="color:red">*</span>{/if}</h3>
        <input type="hidden" name="quest_{$idAnswer}" value="{$questions.question}">
        
            {switch $questions.type} {* выбираем тип вопроса *}
                {case "1"} {* radio button *}
                <div class="form-group">
                    {foreach $answers as $answer}
                        
                        <div class="radio">
                        <label><input type="radio" name="answer_{$idAnswer}" value="{$answer.answers}">
                        {$answer.answers}</label>
                        </div>
                        
                    {/foreach}
                        {if $questions.more == 1}
                            <label>Другое</label>
                            <input type="text" class="form-control" name="answer_{$idAnswer}_oth" value="">
                        {/if}
                    <span class="error_answer_{$idAnswer}">[[fi.error.answer_{$idAnswer}]]</span>
                    <hr>
                    </div>
                    
                {case "2"}{* checkbox *}
                <div class="form-group">
                    {foreach $answers as $answer}
                        {set $counter = 1}
                        {set $lenght = count($answer)}
                        {if $counter == 1}
                            <input type="hidden" name="answer_{$idAnswer}[]" value="" />
                            {set $counter = $counter + 1} 
                            
                        {/if}
                        <div class="checkbox">
                        <label><input type="checkbox" name="answer_{$idAnswer}[]" value="{$answer.answers}"> {$answer.answers}</label>
                        </div>
                        
                    {/foreach}
                        
                        {if $questions.more == 1}
                            <label>Другое</label>
                            <input type="text" class="form-control" name="answer_{$idAnswer}_oth" value="">
                        {/if}
                        <span class="error_answer_{$idAnswer}">[[fi.error.answer_{$idAnswer}]]</span>
                         <hr>
                </div>
                {case "3"}{* просто текст *}
                <div class="form-group">
                        <input type="text" class="form-control" name="answer_{$idAnswer}" value="{$answer.answers}"> <label></label>
                        <span class="error_answer_{$idAnswer}">[[fi.error.answer_{$idAnswer}]]</span>
                        {if $questions.more == 1}
                            <label>Другое</label>
                            <input type="text" name="answer_{$idAnswer}_oth" value="">
                        {/if}
                         <hr>
                </div>
                {case "4"}{* выпадающий список *}
                <div class="form-group">
                            {set $counter = 1}
                            {set $lenght = count($answer)}
                            {foreach $answers as $answer}
                                {if $counter == 1}
                                    <select name="answer_{$idAnswer}" class="form-control" >
                                    {set $counter = $counter + 1}
                                {/if}
                                <option value="{$answer.answers}" [[!+fi.color:FormItIsSelected=`{$answer.answers}`]] >{$answer.answers}</option>
                               
                                
                            {/foreach}
                            {if $counter == $lenght}
                                   </select>
                            {/if}
                             <hr>
                    </div>
                {/switch}
        {/foreach}
        <div class="form-group">
            <label for="call_name">[[!%r.main_form_name]]</label>
            <input type="text" class="form-control" id="call_name" value="[[+fi.name]]" name="name" placeholder="[[!%r.main_form_name]]">
                <span class="error_name">[[+fi.error.name]]</span>
            </div>
            <div class="form-group">
                <label for="call_phone">[[!%r.main_form_phone]]</label>
                <input type="text" class="form-control" name="phone" value="[[+fi.phone]]" placeholder="[[!%r.main_form_phone]]" name="phone">
                <span class="error_phone">[[+fi.error.phone]]</span>
            </div>
            <input type="hidden" name="polit[]">
            <input checked type="checkbox" name="polit[]" value="check" id="conf-checkbox" style="float:left; margin-right: 7px">
            <label for="conf-checkbox" style="display: table">[[!%r.forms_privacy_policy]]<span class="error_polit">[[+fi.error.polit]]</span></label>
            <button type="submit" class="btn btn-default">[[!%r.forms_send]]</button>
</form>
Александр
16 апреля 2018, 06:25
modx.pro
1 184
0

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0