Помощь

Создание тестов с переходами

Общая информация
"Тест с переходами" позволяет, в зависимости от количества набранных на предыдущем этапе тестирования баллов, направить дальнейшее тестирование по той или иной ветке. Количество таких переходов и веток неограничено - все зависит только от вашего терпения и настойчивости при создании таких сложных тестов. Фактически - это уже программирование, однако с помощью "тестов с переходами" можно создавать даже очень замысловатые игры.

ВАЖНО! В "тестах с переходами" можно использовать только числовые "веса" ответов! Веса в форме идентификаторов не поддерживаются.

Команды
В "тесте с переходами" используется тот же набор команд, что и в обычном тесте, а переход создается с помощью ключевого слова cmd(jump) в команде $question. Ключевое слово cmd(jump) нужно поместить там, где для обычного вопроса размещается текст вопроса, например:
$question=cmd(jump)

После этого определения, как обычно, должны идти команды $answer, только в данном случае они будут связывать количество набранных баллов с метками перехода. В них записывается:
- вместо теста ответа: диапазон баллов, которые должен набрать пользователь, чтобы перейти на метку.
- вместо "веса ответа": имя метки.
Например:
$answer=0:10=HappyLife
Если пользователь набрал на предыдущих этапах тестирования от 0 до 10 баллов, ему будет показываться ветка вопросов, помеченная меткой "HappyLife".
Понятно, что в одном блоке cmd(jump) можно использовать много таких команд $answer.

Если вам нужно сделать переход, только если пользователь набрал определенное количество баллов, а в остальных случаях направить его по основной ветке (а обсчитывать все остальные случаи не обязательно) - вместо диапазона баллов можно использовать ключевое слово else.
Например:
$answer=0:10=HappyLife
$answer=else=Next
Если пользователь набрал на предыдущих этапах тестирования от 0 до 10 баллов - ему будет показываться ветка вопросов, помеченная меткой "HappyLife". Во всех остальных случаях он перейдет на метку "Next".

Кроме того, в команде $answer можно сохранить или переопределить количество набранных баллов! Новое количество баллов, которое будет присвоено пользователю после перехода, задается в дополнительном параметре команды $answer, после знака "=", например:
$answer=0:10=HappyLife=100
$answer=else=Next
В первом случае, после перехода на метку "HappyLife", все ранее набранные баллы обнулятся, а пользователю будет присвоено 100 баллов.
Во втором случае ранее набранные баллы просто сохраняются без изменений.

Баллы так же можно прибавлять или отнимать. Для прибавления новых баллов к уже набранным, перед числом нужно просто поставить знак "+". Для отнимания - "-".
Например:
$answer=0:10=HappyLife=+100
$answer=-10:-1=UnhappyLife=-100

Метки
Метки - цифры или ключевые слова, которые могут быть указаны в любой команде $question после текста вопроса или ключевого слова cmd(jump). Например:
$question=Любите ли вы кошек?=LoveCats
$question=cmd(jump)=Turn1
В этом примере - "LoveCats" и "Turn1" - метки.

Если в какой-либо команде $answer блока перехода указана, например, метка "LoveCats", то пользователь будет перенаправлен на ветку, начинающуюся с вопроса "Любите ли вы кошек?".

Все метки должны быть уникальными в пределах теста. Поэтому, чтобы не запутаться, лучше задавать их такими, чтобы самим было понятно, что они значат.

В именах меток можно использовать цифры, а так же как русские, так и английские буквы. Но русские могут неправильно восприниматься браузерами из-за разной интерпретации кодировок на разных компьютерах у разных пользователей. То есть, даже если у вас с русскими буквами все работает нормально - это не значит, что будет работать и у других. Поэтому настоятельно рекомендуется использовать только английские буквы, без пробелов и спецсимволов.

Если в какой либо команде $answer вами была по ошибке указана метка, не существующая нигде в тесте, то при прохождении теста на страницу будет выведено сообщение об ошибке, в котором будет показана "битая" метка.

Завершение веток
Так как в тексте теста все вопросы следуют один за другим, то отдельные ветки нужно как-то отделять друг от друга, чтобы пройдя через одну ветку пользователю не стала бы показываться следующая за ней в тексте. Каких-либо специальных команд для этого не определено. То есть для заверешения ветки:
- Нужно, чтобы тест заканчивался каким-то общим для всех блоком $question.
- В конце каждой ветки следует использовать тот же переход с cmd(jump), ведущий, без всяких условий, на этот общий блок $question.
Например:
[... Какие-то вопросы, вопросы...]
[...Последний вопрос ветки:]
$question=Любите ли вы кошек?=LoveCats
$answer=Да=1
$answer=Нет=-1

$question=cmd(jump)
$answer=else=End

[...Здесь могут быть другие вопросы других веток...]

$question=Итак...=End

Пример теста с переходами

$question=Вы стоите перед придорожным камнем. Куда пойдете?=Start
$answer=Налево=1
$answer=Прямо=2
$answer=Направо=3
$answer=Обратно пойду. Ну его к Аллаху от греха подальше!=4

$question=cmd(jump)=Change
$answer=1:1=LostHorse=-11
$answer=2:2=Death=-1000
$answer=3:3=Marriage=11
$answer=4:4=Reset=0
$answer=else=End

$question=Неужели не знаете, что назад дороги нет?=Reset

$question=cmd(jump)
$answer=else=Start

$question=Вы потеряли коня. А тут враги. Что делать-то будете?=LostHorse
$answer=Достану меч и буду сражаться=50
$answer=В штаны наложу=-50
$answer=Сдамся в плен=10

$question=cmd(jump)
$answer=else=End

$question=Поздравляем, вы теперь женаты! А тут враги. Что делать-то будете?=Marriage
$answer=Достану меч и буду сражаться=50
$answer=В штаны наложу=-20
$answer=Сдамся в плен=-10
$answer=Отдам жену в качестве выкупа=-20

$question=cmd(jump)
$answer=else=End

$question=Выбор, достойный самурая! Больше вопросов не имеем=Death

$question=Итак...=End

$results=Поздравляем!!! Вы -
$result=Настоящий воин!=11:1000000=И это хорошо.
$result=Обыватель=0:10=Ну, это почти все такие.
$result=Трус=-499:-1=Ну, так уж как-то получилось, извиняйте.
$result=Самурай=-1000000:-500=И так бывает.

Помогла ли вам эта статья?
Предложить свою статью