Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:create:filter-items [22.10.2014 20:56] adminde:create:filter-items [03.05.2023 21:14] (aktuell) – [Items in eine andere Frage übernehmen] admin
Zeile 1: Zeile 1:
-======  Items in eine anderen Frage übernehmen ======+======  Items in eine andere Frage übernehmen ======
  
 Gelegentlich soll eine Frage nicht alle Items anzeigen, sondern nur solche, die in einer anderen Frage vorher ausgewählt wurden. Und eventuell soll die Anzahl der Items auch noch beschränkt werden. Gelegentlich soll eine Frage nicht alle Items anzeigen, sondern nur solche, die in einer anderen Frage vorher ausgewählt wurden. Und eventuell soll die Anzahl der Items auch noch beschränkt werden.
  
-Dieses Kapitel erklärt, wie man Items in eine andere Frage übernimmt. Normalerweise genügen dafür 2-3 Zeile PHP-Code. Falls Sie bisher noch keinen PHP-Code verwendet haben, lesen Sie bitte zunächst die [[php|Einführung in PHP-Code]].+Dieses Kapitel erklärt, wie man Items in eine andere Frage übernimmt. Normalerweise genügen dafür 2-3 Zeilen PHP-Code. Falls Sie bisher noch keinen PHP-Code verwendet haben, lesen Sie bitte zunächst die [[php|Einführung in PHP-Code]]
 + 
 +**Tipp:** Sehen Sie sich zu dieser Anleitung auch das Video-Tutorial [[https://www.soscisurvey.de/de/screencast#extra5|Item-Piping]] an.
  
-Falls es komplizierter wird, benötigen Sie zusätzlich sogenannte //Arrays//. Sollten Sie in den Beispielen unten über eckige Klammern stolpern (''['' und '']''), dann erklärt die [[array|Einführung in Arrays]], was es damit auf sich hat. 
  
 ===== Aufgabenstellung 1 ===== ===== Aufgabenstellung 1 =====
Zeile 13: Zeile 14:
 {{scr.filter-itemcount.png?nolink|Filterfrage mit mehreren Items}} {{scr.filter-itemcount.png?nolink|Filterfrage mit mehreren Items}}
  
-In folgender Frage (TF05) sollen nur die Medien zur Auswahl stehen, die der Befragte mindestens einmal im Monat nutzt. Damit dieselben Items mit derselben Kennung enthalten sindwurde die obigen Frage einfach kopiert (//Frage duplizieren// oben in der Frage) und anschließend in der Kopie //Frage-Typ// und -Texte geändert+In folgender Frage (TF05) sollen nur die Medien zur Auswahl stehen, die der Befragte mindestens einmal im Monat nutzt. 
 + 
 +**Tipp:** Es ist wichtig, dass beide Fragen dieselben Items mit derselben Kennung enthalten. Dies erzielen Sie am einfachstenindem Sie die Frage kopieren (Funktion //Frage duplizieren// oben in der Frage) und anschließend in der Kopie den //Frage-Typ// und ggf. die Texte ändern.
  
 {{scr.filter-items.selection.png?nolink|Auswahlfrage mit allen Items}} {{scr.filter-items.selection.png?nolink|Auswahlfrage mit allen Items}}
Zeile 19: Zeile 22:
 Ziel ist es nun, dass die zweite Frage nur die Medien (Items) zu Auswahl zeigt, die in der ersten Frage eine Bewertung von mindestens 2 erhalten haben. Ziel ist es nun, dass die zweite Frage nur die Medien (Items) zu Auswahl zeigt, die in der ersten Frage eine Bewertung von mindestens 2 erhalten haben.
  
-==== Kurzfassung ==== 
  
-Die Funktion ''[[:de:create:functions:getitems|getItems()]]'' erstellt Ihnen eine Liste (Array) jener Items, die mindestens (min) einmal im Monat genutzt werden (Ausprägung 2). Diese Liste übergeben Sie einfach der Funktion [[functions-base#question|question()]] -- aber natürlich nur dann, wenn sie mindestens ein Element enthält.+==== Die kompakte Lösung ==== 
 + 
 +Die Funktion ''[[:de:create:functions:getitems|getItems()]]'' erstellt Ihnen eine Liste ([[array|Array]]) jener Items, die mindestens (min) einmal im Monat genutzt werden (Ausprägung 2). Diese Liste übergeben Sie einfach der Funktion [[:de:create:functions:question|question()]] -- aber natürlich nur dann, wenn sie mindestens ein Element enthält.
  
-Wenn Sie die Frage TF04 auf Seite gestellt haben, können Sie folgenden Code frühestens auf Seite 2 plazieren:+Damit der PHP-Code funktioniert, muss die Frage TF04 auf einer vorhergehenden Seite im Fragebogen gestellt worden sein.
  
 <code php> <code php>
Zeile 33: Zeile 37:
  
 Die weitere Anleitung beschreibt, wie Sie mit Arrays im Detail arbeiten. Dies ist vor allem dann interessant, wenn ''getItems()'' einmal nicht weiterhilft. Die weitere Anleitung beschreibt, wie Sie mit Arrays im Detail arbeiten. Dies ist vor allem dann interessant, wenn ''getItems()'' einmal nicht weiterhilft.
 +
  
 ==== Der Lange Weg ==== ==== Der Lange Weg ====
  
-Die Funktion ''getItems()'' erstellt ein Array -- das kann man auch zu Fuß erledigen. Man muss ja nur ein Array erstellen, in dem alle Item-Kennungen stehen, die in der zweiten Frage auftauchen sollen. Das funktioniert wie folgt+Die Funktion ''getItems()'' erstellt ein [[array|Array]] -- das kann man auch zu Fuß erledigen. Man muss ja nur ein Array erstellen, in dem alle Item-Kennungen stehen, die in der zweiten Frage auftauchen sollen. Das funktioniert wie folgt.
- +
-Bitte lesen Sie zum Verständnis des folgenden PHP-Code die [[array|Einführung in Arrays]].+
  
 <code php> <code php>
Zeile 46: Zeile 49:
  
 for ($i=1; $i<=$anzahl_items; $i++) { // Durchzählen von 1 bis 6 for ($i=1; $i<=$anzahl_items; $i++) { // Durchzählen von 1 bis 6
-  $kennung = $frage.'_'.$i; // Ergibt z.B. TF_04_1+  $kennung = id($frage$i); // Ergibt z.B. TF04_01
   // Hat das Item einen Wert von mindestens 2?   // Hat das Item einen Wert von mindestens 2?
   if (value($kennung) >= 2) {   if (value($kennung) >= 2) {
Zeile 76: Zeile 79:
 Nun sollen Polaritätenprofile für die einzelnen Medien erfragt werden. Allerdings nur für solche Medien, die der Befragte mindestens einmal pro Monat nutzt. Außerdem sollen maximal 2 Polprofile abgefragt werden. Falls der Befragte mehr Medien nutzt, sollen zufällig zwei ausgewählt werden. Nun sollen Polaritätenprofile für die einzelnen Medien erfragt werden. Allerdings nur für solche Medien, die der Befragte mindestens einmal pro Monat nutzt. Außerdem sollen maximal 2 Polprofile abgefragt werden. Falls der Befragte mehr Medien nutzt, sollen zufällig zwei ausgewählt werden.
  
-Grundlage sind 6 gleichartige Fragen (TF06 bis TF11), in denen lediglich der Fragetext variiert. In der ersten Frage steht dort "Tageszeitung", in der nächsten "Radio" u.s.w. Die Frage wird einmal erstellt, anschließend fünf mal kopiert und abschließend Bezeichnung und Fragetext geändert.+Grundlage sind 6 gleichartige Fragen (TF06 bis TF11), in denen lediglich der Fragetext variiert. In der ersten Frage steht dort "Tageszeitung", in der nächsten "Radio" u.s.w. Die Frage wird einmal erstellt, anschließend fünf mal kopiert und abschließend Beschreibung und Fragetext geändert.
  
 {{scr.filter-items.questions.png?nolink|Basis für gleichartige Fragen}} {{scr.filter-items.questions.png?nolink|Basis für gleichartige Fragen}}
Zeile 123: Zeile 126:
 </code> </code>
  
-Jetzt müssen nur noch die entsprechenden Fragen gestellt werden. Auch das funktioniert wieder am schnellsten mit Hilfe eines Arrays. Man hat die Möglichkeit, in einem Array anzugeben, welcher Eintrag welchen Index erhält. Dazu wird ein Array wie folgt erstellt: Es wird jeweils der Index angegeben, dann ein Gleichheitszeichen und ein größer-als-Zeichen (''=>'') und dann erst der eigentliche Eintrag. Das Ergebnis wird dann als assoziatives Array bezeichnet, während die "normalen" Arrays indiziert sind.+Jetzt müssen nur noch die entsprechenden Fragen gestellt werden. Auch das funktioniert wieder am schnellsten mit Hilfe eines Arrays. Man hat die Möglichkeit, in einem Array anzugeben, welcher Eintrag welchen Index erhält. Dazu wird ein Array wie folgt erstellt: Es wird jeweils der Index angegeben, dann ein Gleichheitszeichen und ein größer-als-Zeichen (''%%=>%%'') und dann erst der eigentliche Eintrag. Das Ergebnis wird dann als assoziatives Array bezeichnet, während die "normalen" Arrays indiziert sind.
  
 <code php> <code php>
Zeile 140: Zeile 143:
 In diesem Array beginnen die Indizes nun nicht mit 0, sondern mit 1. Das Array sieht aus wie folgt: In diesem Array beginnen die Indizes nun nicht mit 0, sondern mit 1. Das Array sieht aus wie folgt:
  
 +^Index| 1 | 2 | 3 | 4 | 5 | 6 |
 ^Wert|TF_06|TF_07|TF_08|TF_09|TF_10|TF_11| ^Wert|TF_06|TF_07|TF_08|TF_09|TF_10|TF_11|
-^Index| 1 | 2 | 3 | 4 | 5 | 6 | 
  
 Mit ''$fragen[2]'' erhält man jetzt die Kennung der Frage, die zu Item 2 ("Radio") gehört, nämlich 'TF07'. So kann man nun ganz einfach die Fragen zu den genutzten Medien stellen: Mit ''$fragen[2]'' erhält man jetzt die Kennung der Frage, die zu Item 2 ("Radio") gehört, nämlich 'TF07'. So kann man nun ganz einfach die Fragen zu den genutzten Medien stellen:
Zeile 149: Zeile 152:
 // Fortsetzung // Fortsetzung
 $anzahl = count($itemliste); // So viele Elemente können erfragt werden $anzahl = count($itemliste); // So viele Elemente können erfragt werden
-if ($anzahl > 2)  { 
-  $anzahl = 2; // Maximal zwei Polprofile abfragen 
-} 
 if ($anzahl == 0) { if ($anzahl == 0) {
   goToPage('next'); // Nichts genutzt? Dann gleich weiter!   goToPage('next'); // Nichts genutzt? Dann gleich weiter!
 +}
 +if ($anzahl > 2)  {
 +  $anzahl = 2; // Maximal zwei Polprofile abfragen
 } }
 for ($i=0; $i<$anzahl; $i++) { for ($i=0; $i<$anzahl; $i++) {
Zeile 179: Zeile 182:
 ); );
 $anzahl = count($itemliste); // So viele Elemente können erfragt werden $anzahl = count($itemliste); // So viele Elemente können erfragt werden
-if ($anzahl > 2) { 
-  $anzahl = 2; // Maximal zwei Polprofile abfragen 
-} 
 if ($anzahl == 0) { if ($anzahl == 0) {
   goToPage('next'); // Nichts genutzt? Dann gleich weiter!   goToPage('next'); // Nichts genutzt? Dann gleich weiter!
 +}
 +if ($anzahl > 2) {
 +  $anzahl = 2; // Maximal zwei Polprofile abfragen
 } }
 for ($i=0; $i<$anzahl; $i++) { for ($i=0; $i<$anzahl; $i++) {
Zeile 192: Zeile 195:
 </code> </code>
  
-Im Fragebogen könnte das dann so aussehen (wobei die aktuelle oFb-Version dafür sorgt, dass alles sauber übereinander steht):+Im Fragebogen könnte das dann so aussehen:
  
-{{scr.filter-itemcount.png?nolink|Filterfrage mit mehreren Items}}+{{scr.filter-items.example.png?nolink|Mögliche Antworten in der Filterfrage}}
  
 Seite 2 zeigt zufällig die Fragen für Tageszeitung, Radio oder Videokonferenz. Beachten Sie, dass die Reihenfolge der Fragen eine andere sein kann als die der Items (oben). Seite 2 zeigt zufällig die Fragen für Tageszeitung, Radio oder Videokonferenz. Beachten Sie, dass die Reihenfolge der Fragen eine andere sein kann als die der Items (oben).
Zeile 225: Zeile 228:
   $items[] = 6; // Wikis min. selten => Item 6   $items[] = 6; // Wikis min. selten => Item 6
 } }
-// Zu guter Letzte die Frage stellen+// Zu guter Letzt die Frage stellen
 question('TF13', $items); question('TF13', $items);
 </code> </code>
de/create/filter-items.txt · Zuletzt geändert: 03.05.2023 21:14 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