Не работает Quiz опросник.

Добрый день.

Не работает Quiz. Пакет установлен, все настроено.

Вывод опросника такой
[[!Quiz? &id=`9` &form=`tpl.Quiz.form.oprosnik` &tplCover=`tpl.Quiz.cover.oprosnik`]]
Но на сайте, когда нажимаю Заполнить заявку, то кнопка не работает.

Сниппет:

<?php
/** @var modX $modx */
/** @var array $scriptProperties */
/** @var Quiz $Quiz */
$Quiz = $modx->getService('Quiz', 'Quiz', MODX_CORE_PATH . 'components/quiz/model/', $scriptProperties);
if (!$Quiz) {
    return 'Could not load Quiz class!';
}

if (!$modx->getService('AjaxForm', 'AjaxForm', MODX_CORE_PATH . 'components/ajaxform/model/ajaxform/', $scriptProperties)) {
    return 'Could not load AjaxForm class!';
}

// PDOTOOLS
$pdo = $modx->getService('pdoTools');

// Проверяем есть ли квиз
$id = $modx->getOption('id', $scriptProperties, $input);
if(empty($id)) return 'Не указан id квиза';
if(!$form = $modx->getObject('QuizForm', $id)) return 'Квиз с id: ' . $id . ' не найден';

// $scriptProperties
$subject = $modx->getOption('subject', $scriptProperties, $form->get('subject') ?: $modx->lexicon('quiz_form_subject_def'), true);
$emailTo = $modx->getOption('emailTo', $scriptProperties, $form->get('emails'), true);
$emailBCC = $modx->getOption('emailBCC', $scriptProperties, $form->get('emailBCC'), true);
$successMessage = $modx->getOption('successMessage', $scriptProperties, $form->get('success') ?: $modx->lexicon('quiz_form_success_def'), true);
$errorMessage = $modx->getOption('validationErrorMessage', $scriptProperties, $form->get('error') ?: $modx->lexicon('quiz_form_error_def'), true);
$hooks = $modx->getOption('hooks', $scriptProperties, '', true);
$email_admin = $modx->getOption('emailTpl', $scriptProperties, $form->get('chunk_email_admin') ?: 'tpl.Quiz.email', true);
$email_user = $modx->getOption('fiarTpl', $scriptProperties, $form->get('chunk_email_user') ?: 'tpl.Quiz.email', true);

// TPL
$tplForm = $modx->getOption('form', $scriptProperties, 'tpl.Quiz.form', true);
$tplCover = $modx->getOption('tplCover', $scriptProperties, 'tpl.Quiz.cover', true);
$tplCounter = $modx->getOption('tplCounter', $scriptProperties, 'tpl.Quiz.counter', true);
$tplProgress = $modx->getOption('tplProgess', $scriptProperties, 'tpl.Quiz.progress', true);
$tplStep = $modx->getOption('tplStep', $scriptProperties, 'tpl.Quiz.step', true);
$tplStepNav = $modx->getOption('tplStepNav', $scriptProperties, 'tpl.Quiz.stepNav', true);
$tplSubmit = $modx->getOption('tplSubmit', $scriptProperties, 'tpl.Quiz.submit', true);
$tplResult = $modx->getOption('tplResult', $scriptProperties, 'tpl.Quiz.result', true);

// TPL field
$tplFieldWrapper = $modx->getOption('tplFieldWrapper', $scriptProperties, 'tpl.Quiz.fieldWrapper', true);
$tplField = $modx->getOption('tplField', $scriptProperties, 'tpl.Quiz.field', true);
$tplFile = $modx->getOption('tplFile', $scriptProperties, 'tpl.Quiz.field_file', true);
$tplRadio = $modx->getOption('tplRadio', $scriptProperties, 'tpl.Quiz.field_radio', true);
$tplCheckbox = $modx->getOption('tplCheckbox', $scriptProperties, 'tpl.Quiz.field_radio', true);
$tplHidden = $modx->getOption('tplHidden', $scriptProperties, 'tpl.Quiz.field_hidden', true);
$tplTextarea = $modx->getOption('tplTextarea', $scriptProperties, 'tpl.Quiz.field_textarea', true);
$tplSelect = $modx->getOption('tplSelect', $scriptProperties, 'tpl.Quiz.field_select', true);
$ajaxform_frontend_css = $modx->getOption('ajaxform_frontend_css', $scriptProperties, '/assets/components/ajaxform/css/default.css', false);
$ajaxform_frontend_js = $modx->getOption('ajaxform_frontend_js', $scriptProperties, '/assets/components/ajaxform/js/default.js', false);
$emailsender = $modx->getOption('emailsender'); 
$site_name = $modx->getOption('site_name');
$site_url = $modx->getOption('site_url');

// Classes
$classSubmit = $modx->getOption('classSubmit', $scriptProperties, 'btn-lg btn-primary', true);

$formSelector = $Quiz->getFormSelector($id);
$validate = ['workemail' => 'workemail:blank', 'nospam' => 'nospam:blank'];

// Загрузка стилей и скриптов
$Quiz->loadJsCss($id);

// Записываем параметры в сессию
$_SESSION['Quiz'] = $scriptProperties;

// Получаем хуки
$hooks = $Quiz->getHooks($form, $hooks);

// Параметры для хука FormItSaveForm и QuizSave
$formFields = array();
$fieldNames = array();
if($steps = $Quiz->getSteps($id)) {
    foreach($steps as $step) {
        if($fields = $Quiz->getFields($id, array('step_id' => $step['id']))) {
            foreach($fields as $field) {
                $value = explode('||', $field['value']);
//                if(count($value) > 1 && $field['type'] == 'checkbox') {
//                    $field['name'] .= '[]';
//                }
                $formFields[] = $field['name'];
                $fieldNames[] = "{$field['name']}=={$field['fieldname']}";
                
                // Добавляем валидацию
                if($field['required'] && !isset($validate[$field['name']]) ) {
                    if($field['type'] == 'Email' ) {
                        $validate[$field['name']] = $field['name'] . ":email:required";
                    } else {
                        $validate[$field['name']] = $field['name'] . ":required";
                    }
                }
            }
        }       
    }
}

// Обложка квиза
$cover = '';
// Раздел
$step = '';
if($form->get('cover_active')) {
    $cover = $pdo->parseChunk($tplCover, array(
        'img' => $form->get('img'),
        'title' => $form->get('title'),
        'description' => $form->get('description'),
        'btn_start' => $form->get('btn_start') ?: $modx->lexicon('quiz_form_btn_start_def'),
        'content' => $form->get('content'),
        'formSelector' => $formSelector,
    ));    
} else {
    $step = $Quiz->getStepHTML(array('quizform' => $id));
    $step = json_decode($step, true);
    $step = $step['html'];
}

// Кнопка submit
$submit = $pdo->getChunk($tplSubmit, array(
    'formSelector' => $formSelector,
    'btn_submit' => $form->get('btn_submit') ?: $modx->lexicon('quiz_form_btn_submit_def'),
    'classSubmit' => $classSubmit
));

// Навигация
$nav = $pdo->getChunk($tplStepNav, array(
    'btn_prev' => $form->get('btn_prev'),
    'btn_next' => $form->get('btn_next') ?: $modx->lexicon('quiz_form_btn_next_def'),
    'submit' => $submit,
));

// Счетчик
$counter = $form->get('counter');
if($counter) {
    $step_count = $Quiz->getCountSteps($id);
    $counter = $pdo->getChunk($tplCounter, array(
        'steps_count' => $step_count
    )); 
}

// Прогресс
$progress = $form->get('progress');
if($progress) {
    $progress = $pdo->getChunk($tplProgress, array(
        'steps_count' => $Quiz->getCountSteps($id)
    )); 
}

$quiz = $form->toArray();
$quiz['steps'] = $Quiz->getSteps($id);
foreach($quiz['steps'] as $idx => $s) {
    $quiz['steps'][$idx]['fields'] = $Quiz->getFields($id, array('step_id' => $s['id']));
}

// Свойства для сниппета AjaxForm
$prop = array_merge(array(
    'snippet' => 'FormIt',
    'formName' => $form->get('name'),
    // 'frontend_css' => '',
    // 'frontend_js' => '',
    
    // Form
    'formSelector' => $formSelector,
    'form' => $tplForm,
    'emailTpl' => $email_admin,
    'hooks' => implode(',', $hooks),
    
    // Email
    'emailTo' => $emailTo,
    'emailFrom' => $emailsender,
    'emailFromName' => $site_name,
    'emailSubject' => $subject,
    
    // Email BCC
    'emailBCC' => $emailBCC,
    'emailBCCName' => $site_name,
    
    // Message
    'successMessage' => $successMessage,
    'validationErrorMessage' => $errorMessage,
    
    // Validate
//    'validate' => implode(',', $validate),
    
    // FormItSaveForm 
    'formFields' => implode(',', $formFields),
    'fieldNames' => implode(',', $fieldNames),
    
    // FormItAutoResponder
    'fiarToField' => 'email',
    'fiarTpl' => $email_user,
    'fiarSubject' => $subject,
    'fiarFrom' => $emailsender,
    'fiarFromName' => $site_name,
    'fiarReplyTo' => $emailsender,
    
    // Обложка квиза
    'cover' => $cover,
    // Раздел
    'step' => $step,
    // Скрытые поля
    'hidden' => $Quiz->getFieldsHTML(false, $id, array('type' => 'hidden')),
    // Навигация
    'nav' => $nav,
    // Кнопка submit
//    'submit' => $submit,
    // Cчетчик
    'counter' => $counter,
    // Прогресс
    'progress' => $progress,
    // Сопроводительное письмо
    'cover_letter' => $form->get('cover_letter'),
    // Прикрепленный файл
    'file' => $form->get('file'),
    
    // Контекст
    'context_key' => $modx->context->key,
    // Пользователь
    'user_id' => $modx->user->get('id'),
    'user' => $modx->user->get('username'),
    
    // Массив формы
    'quiz' => $quiz
    
), $scriptProperties);

$prop['frontend_css'] = $ajaxform_frontend_css;
$prop['frontend_js'] = $ajaxform_frontend_js;


// Возвращаем сниппет AjaxForm
return $modx->runSnippet('AjaxForm', $prop);


Чанк:

<div class="quiz d-flex flex-wrap" id="quiz-{$id}">
    {*Обложка*}
    {$cover}
    
    {*Счетчик*}
    {$counter}
    
    {*Прогресс-бар*}
    {$progress}
    
    {*Форма*}
    <form action='{$_modx->resource.uri}' method='post' class='form-column ajax-form quiz-form col-12{if $quiz.cover_active} d-none{/if}' id='{$formSelector}' enctype='multipart/form-data'>
        {*Скрытые поля*}
        <input type='text' class='sr-only' name='nospam' value=''/>
        <input type='email' class='sr-only' name='workemail' value=''/>
        <input type='text' class='sr-only' name='quizform' value='{$id}'/>
        {$hidden}
        
        {*Прикрепленный файл в письме*}
        {if $file}
            <input type="hidden" class='sr-only' name="attach_file" value="{$file}" />
        {/if}
        
        {*Сопроводительный текст*}
        {if $cover_letter}
            <input type="hidden" class='sr-only' name="cover_letter" value="{$cover_letter | replace: '"': '\''}" />
        {/if}
        
        {*Разделы*}
        <div class="steps">{$step}</div>
        
        {*Навигация*}
        {$nav}
    </form>
</div>
inkeri21
04 июля 2023, 12:27
modx.pro
732
0

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

Артур Шевченко
04 июля 2023, 12:48
0
Во-первых, уберите, пожалуйста код под cut (иконка якоря на панели редактирования). Во-вторых, если не работает кнопка, смотрите консоль браузера на предмет ошибок. Если там ошибок нет, смотрите журнал ошибок в админке. Если и там пусто, смотрите лог ошибок сервера. Если и там ничего нет, наймите более квалифицированного специалиста.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1