0 votes
in SoSci Survey (dt.) by s089051 (245 points)
edited by SoSci Survey

Wie besprochen hier der Code:

1) Code für die Randomisierung der Probanden (die Seiten NF00, AG00 etc. beinhalten den Code zur Randomisierung der nachfolgenden Bilder mittels Seitenkennung):

$zahl = value('RA01');  // Auslesen der gezogenen Zufallszahl
 
// Bilder in Abhängigkeit von der Zahl anzeigen
// (dafür wird HTML-Code verwendet)
if (value('RA01') == 1) {        // Naturfotos
  goToPage('NF00'); 
} elseif(value('RA01') ==2) { // Naturgemälde
  goToPage('NG00');
} elseif(value('RA01') ==3) { // Stadtfotos
  goToPage('SF00');
} elseif(value('RA01') ==4) { // Stadtgemälde
 goToPage('SG00');
} elseif(value('RA01') ==5) { // Abstrakte Gemälde
  goToPage('AG00');
}

2) Beispielcode zur Randomisierung von einer der Gemäldebedingungen auf der Seite AG00 + Verhinderung der Wiederholung v. Künstlern (bei Bedingungen, die Fotos verwenden wird mit nur mit shuffle() randomisiert:

$kuenstler = [
  'AG01' => 1, // Alexej von Jawlensky
  'AG02' => 2, // Arthur Dove
  'AG03' => 3, // Hilma af Klimt
  'AG04' => 4, // Marsden Hartley
  'AG05' => 5, // Paul Klee
  'AG06' => 6, // Theo Van Doesburg
  'AG07' => 7, // Dixon
  'AG08' => 8, // Schwitters
  'AG09' => 9, // Archile Gorky
  'AG10' => 10, // Maletwitsch
  'AG11' => 10, // Malewitsch
  'AG12' => 11, // Michail Matjuschin
  'AG13' => 12, // Ola Rosanova
  'AG14' => 5, // Paul Klee
  'AG15' => 5, // Paul Klee
  'AG16' => 5, // Paul Klee
  'AG17' => 5, // Paul Klee
  'AG18' => 5, // Paul Klee
  'AG19' => 13, // Moholy
  'AG20' => 13, // Moholy
  'AG21' => 13, // Moholy
  'AG22' => 13, // Moholy
  'AG23' => 13, // Mondrian
  'AG24' => 14, // Mondrian
  'AG25' => 14, // Mondrian
  'AG26' => 14, // Mondrian
  'AG27' => 14, // Mondrian
  'AG28' => 12, // Olga Rosanova
  'AG29' => 15, // Chashnik
  'AG30' => 15, // Chashnik
  'AG31' => 15, // Chashnik
  'AG32' => 16, // Kliun
  'AG33' => 16, // Kliun
  'AG34' => 17, // Otto Freundlich
  'AG35' => 18, // Amadeo de Souza Cardoso
];
$seiten = array_keys($kuenstler);

do {
  shuffle($seiten);
  $lastOne = -1;
  $double = false;
  foreach ($seiten as $seite) {
    if ($kuenstler[$seite] == $lastOne) {
      $double = true;
    }
    $lastOne = $kuenstler[$seite];
  } 
} while ($double);

$seiten[] = 'AG FAKE';
setPageOrder($seiten);

3) **Auf jeder Seite: Einblenden des Schiebereglers nach 5 Sek. (in diesem Fall PR02)

   Bei "Click" weiter zum nächsten Bild:**

<!--
SoSciTools.submitButtonsHide(); 
// Funktion zum Einblenden der Knöpfe
function showContent() {
  var content = document.getElementById("PR02_qst");
  // Den normalen Anzeigemodus wiederherstellen
  content.style.display = "";
}
 
// Nach dem Laden der Fragebogen-Seite das Script starten
SoSciTools.attachEvent(window, "load",
  function() {
    // Objekt heraussuchen
    var content = document.getElementById("PR02_qst");
    // Ausblenden
    content.style.display = "none";
    // Den Timer starten
    window.setTimeout(showContent, 5000); // Nach 5 Sek = 5.000 ms
  }
);

SoSciTools.attachEvent(window, "load", function() {
  var slider = SoSciSliders.getSlider("PR02_01");
  // Das "click" Event wird aufgerufen, wenn der Teilnehmer den Schieberegler setzt/bewegt
  slider.addEventListener("click", function() {
    if (slider.getValue() > -2) {
      SoSciTools.submitPage();
    }
  });
}); 
// -->
</script>

4) Nun die Frage: Kann ich den bereits verwendeten Code dazu nutzen, um die Anzeige der 35 Bilder mittels loopPage()-Funktion zu vereinfachen, anstelle der Verwendung von mind. 175 Fragebogenseiten und mehreren goToPage-Verstrickungen?
Tausend Dank! :)

by SoSci Survey (328k points)
Tipp: Code kann mit mit dem Knopf {} als solchen formatieren. Ich habe das oben einmal erledigt :)

1 Answer

+1 vote
by SoSci Survey (328k points)
edited by SoSci Survey

Im ersten Schritt würden wir uns darum kümmern, dass die korrekten Stimuli verwendet werden. Dafür können SIe den Filter und die Definiton der Liste(n) wie folgt kombinieren.

Ich gehe einmal davon aus, dass Sie 5 x 35 Bilder hochgeladen haben. Haben Sie dafür zufällig ein einheitliches Namensschema verwendet? Also z.B. AG01.jpg, AG02.jpg, u.s.w.?

if (!isset($bilder)) {
  if (value('RA01') == 1) {        // Naturfotos
    $kuenstler = [
      'AG01' => 1, // Alexej von Jawlensky
      'AG02' => 2, // Arthur Dove
      'AG03' => 3, // Hilma af Klimt
      'AG04' => 4, // Marsden Hartley
      // u.s.w.
    ];
  } elseif(value('RA01') ==2) { // Naturgemälde
    $kuenstler = [
      'BG01' => 1,
      'BG02' => 2,
      'BG03' => 3,
      'BG04' => 4,
      // u.s.w.
    ];
  } // u.s.w.

  // Rotation
  $bilder = array_keys($kuenstler);

  do {
    shuffle($bilder);
    $lastOne = -1;
    $double = false;
    foreach ($bilder as $bild) {
      if ($kuenstler[$bild] == $lastOne) {
        $double = true;
      }
      $lastOne = $kuenstler[$bild];
    } 
  } while ($double);

  registerVariable($kuenstler);
  registerVariable($bilder);
}

Soweit so gut. Jetzt noch die Anzeige mit einem Bild pro Seite.

$i = loopPage(count($bilder));
html('<div style="text-align: center"><img src="'.$bilder[$i].'.jpg"></div>');
// Frage
$bildNr = (int)ltrim(substr($bild, 3), '0');
question('SL01', $bildNr);

Der Code funktioniert jetzt erst einmal nur dann, wenn Ihre Bilder tatsächlich XX01.jpg, XX02.jpg u.s.w. bis XX35 benannt sind. Wenn das nicht der Fall ist, brauchen wir evtl. noch eine weitere Tabelle.

Außerdem geht der Code davon aus (letzte Zeile), dass Sie eine Schieberegler-Frage mit 35 Items haben. Davon sollte dann immer das zum Bild passende Item angeboten werden. Nett, oder?

by s089051 (245 points)
edited by s089051
Super! :)

Vielen Dank erstmal!

Die Randomisierung der Probanden funktioniert. Bei der Darstellung der Bilder gibt es allerdings noch häufige Wiederholungen. Das Einblenden des Schiebereglers klappt auch manchmal nicht. Es erscheint dann folgende Fehlermeldung:

For the question SL01 no item with the ID 0 has been found.

--> das tritt immer für Page 5 auf

Auch habe ich noch nicht herausbekommen wie ich den HTML Code für das "Click"-Event beim Schieberegler zum Laufen bekomme. Da muss ja auch in Abhängigkeit des Bildes der passende Regler geladen werden:

<script type="text/javascript">
<!--
SoSciTools.submitButtonsHide();
// Funktion zum Einblenden der Knöpfe
function showContent() {
  var content = document.getElementById("SL01_qst");
  // Den normalen Anzeigemodus wiederherstellen
  content.style.display = "";
}
 
// Nach dem Laden der Fragebogen-Seite das Script starten
SoSciTools.attachEvent(window, "load",
  function() {
    // Objekt heraussuchen
    var content = document.getElementById("SL01_qst");
    // Ausblenden
    content.style.display = "none";
    // Den Timer starten
    window.setTimeout(showContent, 5000); // Nach 5 Sek = 5.000 ms
  }
);

SoSciTools.attachEvent(window, "load", function() {
  var slider = SoSciSliders.getSlider("SL01");
  // Das "click" Event wird aufgerufen, wenn der Teilnehmer den Schieberegler setzt/bewegt
  slider.addEventListener("click", function() {
    if (slider.getValue() > -2) {
      SoSciTools.submitPage();
    }
  });
});
// -->
</script>
by SoSci Survey (328k points)
> Bei der Darstellung der Bilder gibt es allerdings noch häufige Wiederholungen

Das liegt daran, dass ich im isset() die falsche Variable aufgeschrieben hatte. Deshalb wird immer wieder neu rotiert. Korrigiere ich oben gleich.
by s089051 (245 points)
klappt, danke :)
by s089051 (245 points)
Eine Frage hätte ich noch:

Manchmal wird mir angezeigt, dass die Frage SL01 kein Item mit der ID = 0 hat. Ich denke es liegt also eher am Code, da in der Variablenübersicht eindeutig zu sehen ist, dass die Items von 1-35 durchnummeriert sind....Was müsste ich am Code ändern?:)
by SoSci Survey (328k points)
Kann es sein, dass Sie auf einem anderen Server als www.soscisurvey.de oder s2survey.net arbeiten? Wenn ja, dann ist dort evtl. noch eine (recht) alte Version von SoSci Survey installiert. Wenn nicht: Um welchen Fragetyp handelt es sich genau, den Sie verwenden?

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...