Я уже писал о системе обучения в битриксе. Есть у неё еще одна интересная особенность. В стандартном компоненте пользователь, пройдя тест, не может увидеть список вопросов, на которые он ответил неправильно. Это, мягко говоря, странно.
Задача
Сделать вывод неправильных ответов в тесте.
Поиск решения
Результаты всех попыток прохождения теста выводятся в «журнале обучения». Логично было бы предположить, что там же должна быть информация о неправильных ответах. Поэтому изменять было решено именно шаблон для этого компонента.
Перед тем как начать в чём-то ковыряться, я спросил на форуме битрикса, не реализован ли уже этот функционал в компоненте. Там мне ответили, что уже давно планируется новая версия модуля обучения, где такую штуковину уже написали.
Этот факт повлиял на выбор решения. Изначально я думал вывести тест вопроса, неправильный ответ пользователя и то, что нужно было выбрать. Но потом решил обойтись только текстом вопроса. Т.к. нет смысла дублировать функционал того, что скоро будет.
Решение
В шаблоне компонента learning.student.gradebook нужно найти код для вывода попыток
Здесь на каждую попытку отведено по строке таблицы. Для вывода неправильных ответов я решил создать еще дону строчку под попыткой и вывести там неправильные ответы с помощью метода CTestResult::GetList Получился вот такой код.
//получаем список ответов
$CDBResult = CTestResult::GetList(
Array(
'QUESTION_ID' => 'ASC'
),
Array(
'CORRECT' => 'N',
'ATTEMPT_ID' => $arAttempt['ID'],
'ANSWERED' => 'Y'
)
);?>
<tr class="error-list"><td colspan="5"><p>Список неправильно отвеченных вопросов:</p><ol>
<?while($arTestResult = $CDBResult->Fetch()){?>
<li><?=$arTestResult['QUESTION_NAME']?></li>
<?}?>
</ol></td></tr>
Внешне это выглядит вот так:

Вывод неправильных ответов в Bitrix'е
10 комментариев
Задумка класная. Благодаря непонятной ошибке у меня получилось то, что мне надо было (вывод всех неправильных вопросов без привязки к тестированию). А вот как у Автора — не вышло %)
Проблема в том, что для каждого тестирования выводится общий список ошибочно отвеченных вопросов, а не список ошибок именно в том или ином тестировании — не понял почему :(
Не серчайте, так как воркаю в битриксе 2-й месяц. *CRAZY*
Ответить
Вероятно это потому, что у вас в $arAttempt[«ID»] нет айдишника попытки =)
Ответить
Добрый день! Столкнулся с проблемкой — битрикс старенький, а Вы написали «Изначально я думал вывести тест вопроса, неправильный ответ пользователя и то, что нужно было выбрать.» — а не подскажете как это сделать ?
Ответить
Можно кастомизировать шаблон компонента learning.student.gradebook, который выводит результаты. И воспользоваться вот этим методом. Собственно, это я в записи и предлагал.
Но, возможно за 5 лет там уже что-то поменяли и теперь можно в настройках что-то указать =)
Ответить
по этому методу RESPONSE получается вывести только ID неправильного ответа :(
и в итоге
Список неправильно отвеченных вопросов:
вопрос №1
номер неправильного ответа: 4 (это ID ответа в админке)
неправильный ответ:
Ответить
Для ответов лучше использовать метод CLAnswer::GetByID() этот метод возвращает по id ответа вот такой массив:
Ну и при таком раскладе лучше сразу использовать CLAnswer::GetList(), чтобы получать не список вопросов, а список ответов =)
Ответить
Да как раз воспользовался этими методами )
спасибо огромное добрый человек!
вот что удалось реализовать -вывел 2 строки под результатами — может пригодится:
‘ASC’
),
Array(
‘CORRECT’ => ‘N’,
‘ATTEMPT_ID’ => $arAttempt[‘ID’],
‘ANSWERED’ => ‘Y’
)
);
$ANSWER_ID = $arTestResult[‘RESPONSE’];
$res = CLAnswer::GetByID($ANSWER_ID);
if ($arAnswer = $res->GetNext())
{
}
?>
Список НЕправильно отвеченных вопросов:
Fetch()){
$ANSWER_ID = $arTestResult[‘RESPONSE’];
$res = CLAnswer::GetByID($ANSWER_ID);
if ($arAnswer = $res->GetNext())
{
}
?>
Вопрос —
НЕправильный ответ —
‘ASC’
),
Array(
‘CORRECT’ => ‘Y’,
‘ATTEMPT_ID’ => $arAttempt[‘ID’],
‘ANSWERED’ => ‘Y’
)
);
if (CModule::IncludeModule(«learning»))
{
$ANSWER_ID = $arAnswer[‘ID’];
$res = CLAnswer::GetByID($ANSWER_ID);
if ($arAnswer = $res->GetNext())
{
}
}
?>
Список правильно отвеченных вопросов:
Fetch()){
$ANSWER_ID = $arTestResult[‘RESPONSE’];
$res = CLAnswer::GetByID($ANSWER_ID);
if ($arAnswer = $res->GetNext())
{
}
?>
Вопрос —
Правильный ответ —
Ответить
вырезались теги :(
Ответить
Вывести правильный и неправильный вариант ответа получилось, а не подскажете как вывести правильный вариант ответа на вопрос в том случае, если дали неправильный ответ. То есть тот вариант, который задан у вопроса в админке? почему-то у меня не выходит.
Ответить
Огромное Вам спасибо! Все заработало! Теперь меня не будут мучать сотрудники с вопросом, а чего я там неправильно ответила.
Ответить