Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
de:create:feedback-correct [30.08.2021 17:42] adminde:create:feedback-correct [03.03.2023 15:06] – [Prüfen der Antwort] admin
Zeile 15: Zeile 15:
  
 Der Abgleich zwischen der gegebenen Antwort und der korrekten Antwort hängt von zwei Faktoren ab: Der Abgleich zwischen der gegebenen Antwort und der korrekten Antwort hängt von zwei Faktoren ab:
-  +
   * Zum einen das Antwortformat, hier ist besonders wichtig, ob man nur einen Wert vergleicht (z.B. in einer einfachen Auswahl) oder ob mehrere Werte verglichen werden müssen (z.B. in einer Mehrfachauswahl oder wenn die Antwort mehrere Einzelantworten beinhaltet).   * Zum einen das Antwortformat, hier ist besonders wichtig, ob man nur einen Wert vergleicht (z.B. in einer einfachen Auswahl) oder ob mehrere Werte verglichen werden müssen (z.B. in einer Mehrfachauswahl oder wenn die Antwort mehrere Einzelantworten beinhaltet).
   * Zum anderen ist für die Implementierung wichtig, ob das Feedback nur für eine Handvoll Fragen benötigt wird oder ob es um einen längeren Fragenkatalog geht. Im zweiten Fall ist es zielführend, mit [[:de:create:array|Arrays]] und ''[[:de:create:functions:looptopage]]'' zu arbeiten, sodass man den PHP-Code nicht vielfach kopieren muss.   * Zum anderen ist für die Implementierung wichtig, ob das Feedback nur für eine Handvoll Fragen benötigt wird oder ob es um einen längeren Fragenkatalog geht. Im zweiten Fall ist es zielführend, mit [[:de:create:array|Arrays]] und ''[[:de:create:functions:looptopage]]'' zu arbeiten, sodass man den PHP-Code nicht vielfach kopieren muss.
Zeile 76: Zeile 76:
  
 <code php> <code php>
-$answer  = array_values(valueList('AB02')); +$antwort = array_values(valueList('AB02')); 
-$correct = [1,2,1,2];+$korrekt = [1,2,1,2];
 if ($antwort == $korrekt) { if ($antwort == $korrekt) {
     text('FB01'); // Antwort korrekt     text('FB01'); // Antwort korrekt
Zeile 95: Zeile 95:
  
 <code php> <code php>
-$answer  = array_values(valueList(['AB01', 'AB02_01', 'AB02_02', 'AB02_03', 'AB02_04'])); +$antwort  = array_values(valueList(['AB01', 'AB02_01', 'AB02_02', 'AB02_03', 'AB02_04'])); 
-$correct = [3,1,2,1,2];+$korrekt = [3,1,2,1,2];
 if ($antwort == $korrekt) { if ($antwort == $korrekt) {
     text('FB01'); // Antwort korrekt     text('FB01'); // Antwort korrekt
Zeile 134: Zeile 134:
 Die Reaktion auf eine richtige oder falsche Antwort kann ganz unterschiedlich gestaltet werden. Wesentliche Bausteine sind: Die Reaktion auf eine richtige oder falsche Antwort kann ganz unterschiedlich gestaltet werden. Wesentliche Bausteine sind:
  
-  * Die PHP-Funktion ''[[:de:create:functions:text]]'' zur Anzeige eines vordefinierten Textes, evtl. als HTML-Code mit zusätzlichen Gestaltungselementen (siehe [[:de:create:images]] und [[:de:create:texts#texte_formatieren|Texte formatieren]]).+  * Die PHP-Funktion ''[[:de:create:functions:text]]'' zur Anzeige eines vordefinierten Textes.
   * Die PHP-Funktion ''[[:de:create:functions:option|option('nextbutton', false)]]'' zum Ausblenden des Weiter-Knopfes, sodass Befragte erst auf die vorherige Seite zurückkehren und die Antwort korrigieren müssen.   * Die PHP-Funktion ''[[:de:create:functions:option|option('nextbutton', false)]]'' zum Ausblenden des Weiter-Knopfes, sodass Befragte erst auf die vorherige Seite zurückkehren und die Antwort korrigieren müssen.
   * Die PHP-Funktion ''[[:de:create:functions:repeatpage]]'', um eine Meldung zu zeigen und direkt zur vorigen Seite zurückzukehren.   * Die PHP-Funktion ''[[:de:create:functions:repeatpage]]'', um eine Meldung zu zeigen und direkt zur vorigen Seite zurückzukehren.
   * Die PHP-Funktionen ''[[:de:create:functions:getitems]]'', ''[[:de:create:functions:getitemtext]]'' und ''[[:de:create:functions:html]]'', um die vorherige Frage nochmal anzuzeigen und falsche/richtige Antwortoptionen zu markieren.   * Die PHP-Funktionen ''[[:de:create:functions:getitems]]'', ''[[:de:create:functions:getitemtext]]'' und ''[[:de:create:functions:html]]'', um die vorherige Frage nochmal anzuzeigen und falsche/richtige Antwortoptionen zu markieren.
 +
 +
 +==== Einen Text anzeigen ====
 +
 +Die einfachste Variante, nämlich einen Text "Ihre Antwort war richtig" zu zeigen, wurde oben bereits mehrfach verwendet.
 +
 +Wenn Sie im Fragenkatalog in eine Rubrik Ihrer Wahl einen //Text hinzufügen// und für die //Darstellung// die Option "Formatierter Text" auswählen, können Sie den Text auch ein klein wenig gestalten.
 +
 +Wenn Sie den Text etwas ansprichsvoller gestalten möchten, wählen bei //Darstellung// die Option "HTML-Code" und verwenden Sie HTML und CSS ([[:de:create:texts#texte_formatieren|Texte formatieren]]):
 +
 +<code html>
 +<div style="border: 2px solid green; padding: 10px 16px; border-radius: 5px; background-color: #99FF99; text-align: center; Width: 50%; margin: 3em auto;">
 +Ihre Antwort ist richtig.
 +</div>
 +</code>
 +
 +Zur weiteren Gestaltung können Sie auch Bilder verwenden, siehe [[:de:create:images]].
 +
 +Die Einbindung des Textes erfolgt, wie oben gezeigt, mittels ''text()''. Das folgende Beispiel geht davon aus, dass die Text für die positive Rückmeldung die Kennung "FB01" und der Text für die negative Rückmeldung die Kennung "FB02".
 +
 +Die [[:de:create:variables#php-variablen|PHP-Variable]] ''$allRight'' wäre weiter oben im PHP-Code definiert worden -- etwa so wie im Beispiel oben. Im IF-Filter kann natürlich auch eine andere Bedingung stehen (siehe oben).
 +
 +<code php>
 +if ($allRight) {
 +  text('FB01');
 +} else {
 +  text('FB02');
 +}
 +</code>
 +
 +
 +==== Weiter-Knopf blockieren ====
 +
 +Mit der Funktion ''[[:de:create:functions:option|option('nextbutton', false)]]'' kann man bei einer falschen Antwort auch den Zurück-Knopf ausblenden.
 +
 +<code php>
 +if ($allRight) {
 +  text('FB01');
 +} else {
 +  text('FB02');
 +  option('nextbutton', false);
 +}
 +</code>
 +
 +
 +==== Direkt zur vorigen Seite springen ====
 +
 +Mit der Funktion ''[[:de:create:functions:repeatpage]]'' kann man im Fall einer falschen Antwort auch direkt die Seite mit der Frage wiederholen.
 +
 +<code php>
 +if (!$allRight) {
 +  repeatPage('FB02');
 +}
 +</code>
 +
 +Die positive Meldung wäre in diesem Fall obsolet.
 +
 +
 +===== Detailliertes Feedback =====
 +
 +Etwas aufwändiger ist es, wenn man die Frage und die falschen und richtigen Antworten direkt als Feedback zeigen möchte. Der folgende PHP-Code prüft zunächst die Antworten auf unterschiedliche Fragen "AB01" bis "AB05" und zeigt dann für jede Teilfrage an, ob diese korrekt beantwortet wurde oder nicht.
 +
 +<code php>
 +// Hier die Fragen und die korrekten Antworten eintragen
 +$antworten = [
 +  'AB01' => 1,
 +  'AB02' => 2,
 +  'AB03' => 2,
 +  'AB04' => 1,
 +  'AB05' => 1
 +];
 +
 +// Hier folgt der PHP-Code für die Anzeige
 +foreach ($antworten as $frage => $correct) {
 +    html('
 +        <div class="question">
 +        <div class="text">'.getItemtext($frage, 'question').'</div>
 +    ');
 +    $antwort = value($frage);
 +    if ($antwort == $correct) {
 +        html('<div class="correct">✔️ '.getItemtext($frage, $antwort).'</div>');
 +    } else {
 +        html('<div class="wrong">❌ '.getItemtext($frage, $antwort).'</div>');
 +        html('<div class="better">⚠️ '.getItemtext($frage, $correct).'</div>');
 +    }
 +    html('</div>');
 +}
 +
 +// Hier das Layout
 +pageCSS('
 +    div.question { margin-bottom: 3em; }
 +    div.question div.text { font-weight: bold; margin-bottom: 0.5em; }
 +    div.question div.correct { margin-bottom: 0.5em; color: green; }
 +    div.question div.wrong { margin-bottom: 0.5em; text-decoration: line-through; }
 +    div.question div.better { margin-bottom: 0.5em; color: green; font-weight: bold; }
 +');
 +</code>
 +
 +
 +===== Viele Fragen =====
 +
 +Wenn eine größere Anzahl Fragen auf einzelnen Seiten präsentiert werden soll, dann kommt die Funktion ''loopToPage()'' zum Einsatz. Die Liste der Fragen inklusive Antworten wird in einem Array definiert.
 +
 +Im Fragebogen werden zwei Seiten benötigt. Die erste Seite bekommt im folgenden Beispiel die [[:de:glossary#seitenkennung|Seitenkennung]] "frage", die zweite Seite bekommt die Seitenkennung "feedback".
 +
 +Auf der Seite "frage" wird die Liste der Fragen und korrekter Antworten definiert. Im folgenden Beispiel für Mehrfachauswahlfragen "AB02" bis "AB06". Mittels ''registerVariable()'' wird dieses Array auch für Seite 2 verfügbar gemacht.
 +
 +<code php>
 +$fragen = [
 +  'AB02' => [1,2,1,2],
 +  'AB03' => [2,2,1,1],
 +  'AB04' => [2,1,1,2],
 +  'AB05' => [1,2,2,1],
 +  'AB06' => [1,1,1,2]
 +];
 +registerVariable($fragen);
 +
 +$i = loopToPage('feedback', count($fragen));
 +
 +// Frage anzeigen
 +$frageIDs = array_keys($fragen);
 +$frageID = $frageIDs[$i];
 +question($frage);
 +</code>
 +
 +Auf der zweiten Seite "feedback" wird dann die Antwort überprüft und das Feedback angezeigt.
 +
 +<code php>
 +$i = loopIndex();
 +$frageIDs = array_keys($fragen);
 +$frageID = $frageIDs[$i];
 +
 +$correct = $fragen[$frageID];
 +$answer  = array_values(valueList($frageID));
 +if ($answer == $correct) {
 +  text('FB01');
 +} else {
 +  text('FB02');
 +}
 +</code>
de/create/feedback-correct.txt · Zuletzt geändert: 03.05.2024 10:42 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki