多肢選択問題の結果表示について、ご教示ください。
大変初歩的な質問で申し訳ありませんが、小テストで多肢選択問題を作成し、結果表示すると
の表示となります。
この表示において「正答を番号で表示」を実現したいと希望しています。
対応可能であれば対応方法をご教授いただければ幸いです。
よろしくお願いいたします。
【環境】Moodle 3.0.10 MySQL5.7 PHP5.6.30
moodle.orgより入手
下記プログラム修正ではいかがでしょうか。
修正対象プログラム:
question/type/multichoice/renderer.php
修正箇所:
281行目
[ 修正前 ]
public function correct_response(question_attempt $qa) {
$question = $qa->get_question();
$right = array();
foreach ($question->answers as $ansid => $ans) {
if ($ans->fraction > 0) {
$right[] = $question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
$qa, 'question', 'answer', $ansid));
}
}
[ 修正後 ]
public function correct_response(question_attempt $qa) {
$question = $qa->get_question();
$right = array();
foreach ($question->answers as $ansid => $ans) {
if ($ans->fraction > 0) {
$right[] = array_search($ans->id ,$question->get_order($qa)) + 1 . '. ' . $question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
// $right[] = $question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
$qa, 'question', 'answer', $ansid));
}
}
数字だけを表示する場合、下記のような修正になります。
修正対象プログラム:
question/type/multichoice/renderer.php
修正箇所:
281行目
[ 修正前 ]
public function correct_response(question_attempt $qa) {
$question = $qa->get_question();
$right = array();
foreach ($question->answers as $ansid => $ans) {
if ($ans->fraction > 0) {
$right[] = $question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
$qa, 'question', 'answer', $ansid));
}
}
[ 修正後 ]
public function correct_response(question_attempt $qa) {
$question = $qa->get_question();
$right = array();
foreach ($question->answers as $ansid => $ans) {
if ($ans->fraction > 0) {
$right[] = array_search($ans->id ,$question->get_order($qa)) + 1;
// $right[] = $question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
// $qa, 'question', 'answer', $ansid));
}
}
下記プログラム修正ではいかがでしょうか。
修正対象プログラム:
question/type/multichoice/renderer.php
修正箇所:
229行目
[ 修正前 ]
public function correct_response(question_attempt $qa) {
$question = $qa->get_question();
foreach ($question->answers as $ansid => $ans) {
if (question_state::graded_state_for_fraction($ans->fraction) ==
question_state::$gradedright) {
return get_string('correctansweris', 'qtype_multichoice',
$question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
$qa, 'question', 'answer', $ansid)));
}
}
return '';
}
[ 修正後 ]
public function correct_response(question_attempt $qa) {
$question = $qa->get_question();
foreach ($question->answers as $ansid => $ans) {
if (question_state::graded_state_for_fraction($ans->fraction) ==
question_state::$gradedright) {
// return get_string('correctansweris', 'qtype_multichoice',
// $question->make_html_inline($question->format_text($ans->answer, $ans->answerformat,
// $qa, 'question', 'answer', $ansid)));
return get_string('correctansweris', 'qtype_multichoice', array_search($ans->id ,$question->get_order($qa)) + 1);
}
return '';
}
修正された内容に何らかの文法ミスがあると思われます。
ご参考までに本投稿の添付ファイル (question.zip) をお使いください。