×

Битрикс: просмотр неправильных ответов в тестах

Я уже писал о системе обучения в битриксе. Есть у неё еще одна интересная особенность. В стандартном компоненте пользователь, пройдя тест, не может увидеть список вопросов, на которые он ответил неправильно. Это, мягко говоря, странно.

Задача

Сделать вывод неправильных ответов в тесте.

Поиск решения

Результаты всех попыток прохождения теста выводятся в «журнале обучения». Логично было бы предположить, что там же должна быть информация о неправильных ответах. Поэтому изменять было решено именно шаблон для этого компонента.

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

Этот факт повлиял на выбор решения. Изначально я думал вывести тест вопроса, неправильный ответ пользователя и то, что нужно было выбрать. Но потом решил обойтись только текстом вопроса. Т.к. нет смысла дублировать функционал того, что скоро будет.

Решение

В шаблоне компонента learning.student.gradebook нужно найти код для вывода попыток

<?foreach ($arResult["ATTEMPTS"] as $arAttempt):?>Syhi-подсветка кода

Здесь на каждую попытку отведено по строке таблицы. Для вывода неправильных ответов я решил создать еще дону строчку под попыткой и вывести там неправильные ответы с помощью метода 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'е

Вывод неправильных ответов в Bitrix'е

Как временное решение, сойдёт. Надеюсь, новая версия модуля выйдет раньше нового года. Иначе придётся переписывать.
logo