Я уже писал о системе обучения в битриксе. Есть у неё еще одна интересная особенность. В стандартном компоненте пользователь, пройдя тест, не может увидеть список вопросов, на которые он ответил неправильно. Это, мягко говоря, странно.
Задача
Сделать вывод неправильных ответов в тесте.
Поиск решения
Результаты всех попыток прохождения теста выводятся в «журнале обучения». Логично было бы предположить, что там же должна быть информация о неправильных ответах. Поэтому изменять было решено именно шаблон для этого компонента.
Перед тем как начать в чём-то ковыряться, я спросил на форуме битрикса, не реализован ли уже этот функционал в компоненте. Там мне ответили, что уже давно планируется новая версия модуля обучения, где такую штуковину уже написали.
Этот факт повлиял на выбор решения. Изначально я думал вывести тест вопроса, неправильный ответ пользователя и то, что нужно было выбрать. Но потом решил обойтись только текстом вопроса. Т.к. нет смысла дублировать функционал того, что скоро будет.
Решение
В шаблоне компонента 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>
Внешне это выглядит вот так:
Как временное решение, сойдёт. Надеюсь, новая версия модуля выйдет раньше нового года. Иначе придётся переписывать.
Вероятно это потому, что у вас в $arAttempt[«ID»] нет айдишника попытки =)
Ответить