Wir erstellen ein Screening-Tool und das ist der Fragen Teil. Es gibt eine Fortschrittsleiste unter der Frage mit der Uhrzeit, aber es füllt nur die Leiste oder zeigt den Fortschritt an, wenn Sie die Seite neu laden.Progressbar Timer mit nur neu geladen auf Seitenaktualisierung
Dies ist der Code
public function screening(Request $request){
$user_test = User_test::find(Session::get('user_test_id'));
$test = $user_test->test;
var_dump($user_test->questionsLeft());
$time = floor((strtotime(date('Y-m-d H:i:s')) - strtotime($user_test->started_at))/60);
if($test->time <= $time){
$user_test->unanswered = array_sum($user_test->questionsLeft());
$user_test->finished_at = date('Y-m-d H:i:s');
$user_test->score = $user_test->calculateScore();
$user_test->save();
return Redirect::route('user.dashboard')->with('error', ['test timed out']);
}
//Get user test object
$test = $user_test->test;
$current = $test->test_subcategories()->sum('amount') - array_sum($user_test->questionsLeft()) + 1;
//Get next question
if(Session::get('question_id') == null){
$question = $user_test->getNextQuestion();
Session::flash('question_id', $question->id);
} else if(!$user_test->answers()->where('question_id', Session::get('question_id'))->exists()){
$question = Question::find(Session::get('question_id'));
} else {
$question = $user_test->getNextQuestion();
Session::flash('question_id', $question->id);
}
// Calculate time
if($user_test->started_at == null){
return Redirect::route('user.dashboard');
} else {
$time = round((strtotime(date('Y-m-d H:i:s')) - strtotime($user_test->started_at))/60);
}
$lang = Sentinel::check()->text_lang_code;
return view('screening.test', array(
'test' => $test,
'question' => $question,
'lang' => $lang,
'time' => $time,
'current' => $current
));
}
Dies ist die progressbar
<progress value="{{$time}}" max="{{$test->time}}"></progress>
Php läuft Server-Seite im Browser nicht zu bekommen. Der Browser weiß also nicht, dass er einen anderen Fortschrittsbalken haben soll, bis er den Server erneut fragt. – shamsup