0 votes
in SoSci Survey (dt.) by s106726 (110 points)

Liebes SoSci Survey Support Team,
ich habe ein Problem bei der abwechselnden Schattierung von Items. Ich habe aus mehreren Fragen die Items rotiert und in Blöcken über mehrere Seiten verteilt. Die Schattierung soll, nachdem das erste Item unschattiert ist, immer abwechselnd weiter laufen.

In zwei Fällen hat das mit dem folgenden php-code geklappt, beim dritten ist die Schattierung jetzt völlig zufällig. Ich habe den Code nur kopiert und die Fragennamen angepasst, sowie die Länge der Blöcke. Ich weiß nicht wo der Fehler liegt und wäre sehr dankbar, wenn ihr mir weiterhelfen könntet!

Hier funktioniert die Schattierung nicht:

 if (!isset($blocks)) {
  $fragen = array('BM01', 'BM02', 'BM03', 'BM04', 'BM05');
  $items = array();
  foreach ($fragen as $frage) {
    // Items für jede einzelne Frage
    $itemsF = getItems($frage, 'all');
    foreach ($itemsF as $itemID) {
      $items[] = array($frage, $itemID);
    }
  }

  shuffle($items);
  $blocks = array_chunk($items, 11);
  registerVariable($blocks);
}

$shading = 'start-shaded';
$i = loopPage(count($blocks));
foreach ($blocks[$i] as $pos => $item)
{
  $frage = $item[0];
  $itemID = $item[1];
  // Shading immer umschalten (das ginge auch eleganter, ist dann aber nicht mehr so anschaulich)
  if ($shading == 'start-shaded') {
    $shading = 'start-unshaded';
  } else {
    $shading = 'start-shaded';
  }
 if ($pos == 0) {
    // Verankerung nicht deaktiviert beim ersten Item (=Index 0)
    question($frage, $itemID, 'spacing=5');
  } elseif ($pos == 10) {
    // Kein reduzierter Abstand beim 11-ten Item (=Index 10)
    question($frage, $itemID, 'anchor=none', 'show-title=no', 'show-explanation=no', 'shading='.$shading);
  } else {
    // Alles dazwischen ohne Verankerung und mit weniger Abstand nach unten (5 Pixel)
    question($frage, $itemID, 'spacing=5', 'anchor=none', 'show-title=no', 'show-explanation=no', 'shading='.$shading);
  }
}

Während sie hier funktioniert:

if (!isset($blocks)) {
  $fragen = array('SE08', 'SE02', 'SE03', 'SE04', 'SE05');
  $items = array();
  foreach ($fragen as $frage) {
    // Items für jede einzelne Frage
    $itemsF = getItems($frage, 'all');
    foreach ($itemsF as $itemID) {
      $items[] = array($frage, $itemID);
    }
  }

  shuffle($items);
  $blocks = array_chunk($items, 10);
  registerVariable($blocks);
}

$shading = 'start-shaded';
$i = loopPage(count($blocks));
foreach ($blocks[$i] as $pos => $item)
{
  $frage = $item[0];
  $itemID = $item[1];
  // Shading immer umschalten (das ginge auch eleganter, ist dann aber nicht mehr so anschaulich)
  if ($shading == 'start-shaded') {
    $shading = 'start-unshaded';
  } else {
    $shading = 'start-shaded';
  }
 if ($pos == 0) {
    // Verankerung nicht deaktiviert beim ersten Item (=Index 0)
    question($frage, $itemID, 'spacing=5');
  } elseif ($pos == 9) {
    // Kein reduzierter Abstand beim 10-ten Item (=Index 9)
    question($frage, $itemID, 'anchor=none', 'show-title=no', 'show-explanation=no', 'shading='.$shading);
  } else {
    // Alles dazwischen ohne Verankerung und mit weniger Abstand nach unten (5 Pixel)
    question($frage, $itemID, 'spacing=5', 'anchor=none', 'show-title=no', 'show-explanation=no', 'shading='.$shading);
  }
}
related to an answer for: Kombination von Fragen mit gleicher Skala?
by SoSci Survey (302k points)
Handelt es sich vielleicht um unterschiedliche Fragetypen? Oder haben Sie in den Fragen vielleicht eine andere "Darstellung" festgelegt? Die Schattierung funktioniert nicht überall 100% gleich...

Sie können gerne einmal einen Pretest-Link direkt (!) zur betroffenen Seite posten, dann kann ich mir das genauer ansehen: https://www.soscisurvey.de/help/doku.php/de:survey:pretest
by s106726 (110 points)
Hallo, Danke für Ihre schnelle Antwort.

Tatsächlich war in einem Fall beim Fragetyp Skala (Extrema beschriftet) die Darstellung statt auf "dynamisch" auf "neben dem Text gestellt". Im anderen Fall, beim Fragetyp Skala (Zwischenwerte beschriftet) funktioniert es nicht, wenn die Anordnung auf dynamisch gestellt ist, auch wenn es bei allen Fragen einheitlich ist. Hier habe ich auf Standard zurück gestellt. So funktioniert es!

Allerdings ist direkt ein zweites Problem aufgetaucht, bei dem Sie mir vielleicht helfen können. Ich habe drei Themenblöcke die ich rotieren möchte.
Allerdings tritt das Problem auf, dass nach dem Block "Mythen1" die Rotation abgebrochen wird, unabhängig davon ob die anderen beiden Blöcke schon gezeigt wurden oder nicht. Können Sie mir sagen wo hier der Fehler liegt?

if (!isset($blocks1)) {
  // Liste der Seiten definieren
  $blocks1 = array('Einst-Einst','Verhal-Zufried', 'Myth-Myth');
  // Liste mischen
  shuffle($blocks1);
  // Die Seite ergänzen, wo es nachher weiter geht
  $blocks1[] = 'Szen';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks1);
}
setPageOrder($blocks1);
by SoSci Survey (302k points)
Der Code sieht korrekt aus. Was steht denn in der Debug-Information?
https://www.soscisurvey.de/help/doku.php/de:create:functions:debug

Meine Vermutung wäre, dass im Block "Mythen" ein setNextPage() o.ä. verwendet wird, was die gespeicherte Seitenabfolge (unbeabsichtigt) beendet.
by s106726 (110 points)
php Code vom Block "Mythen":

if (!isset($blocks4)) {
  $fragen = array('BM01', 'BM02', 'BM03', 'BM04', 'BM05');
  $items = array();
  foreach ($fragen as $frage) {
    // Items für jede einzelne Frage
    $itemsF = getItems($frage, 'all');
    foreach ($itemsF as $itemID) {
      $items[] = array($frage, $itemID);
    }
  }

  shuffle($items);
  $blocks4 = array_chunk($items, 11);
  registerVariable($blocks4);
}

$shading = 'start-unshaded';
$i = loopPage(count($blocks4));
foreach ($blocks4[$i] as $pos => $item)
{
  $frage = $item[0];
  $itemID = $item[1];
  // Shading immer umschalten (das ginge auch eleganter, ist dann aber nicht mehr so anschaulich)
  if ($shading == 'start-unshaded') {
    $shading = 'start-shaded';
  } else {
    $shading = 'start-unshaded';
  }
 if ($pos == 0) {
    // Verankerung nicht deaktiviert beim ersten Item (=Index 0)
    question($frage, $itemID, 'spacing=5');
  } elseif ($pos == 10) {
    // Kein reduzierter Abstand beim 11-ten Item (=Index 10)
    question($frage, $itemID, 'anchor=none', 'show-title=no', 'show-explanation=no', 'shading='.$shading);
  } else {
    // Alles dazwischen ohne Verankerung und mit weniger Abstand nach unten (5 Pixel)
    question($frage, $itemID, 'spacing=5', 'anchor=none', 'show-title=no', 'show-explanation=no', 'shading='.$shading);
  }
}


Debug-Info Seite 1 Mythen:

[Information]    Interview Nummer 672 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt test157867 wird verwendet
[Information]    Die Verweildauer auf Seite 7 war 7 Sekunden
[Verarbeitung]    Lese Antworten von Seite 7
[Information]    Antwort auf DE08 = 2
[Information]    Keine Antwort für DE08_06
[Information]    Antwort auf DE09 = 1
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Information]    Entsprechend der vorher festgelegten Seitenabfolge wird Seite 16 [Myth] angezeigt
[Verarbeitung]    Erstelle Fragebogen-Seite Nr. 16
[Information]    loopPage() wiederholt die Seite 16 nun 2 mal, beginnend mit dem Wert 0
[Inhalt]    Erstelle Frage BM02
[Inhalt]    Erstelle Frage BM03
[Inhalt]    Erstelle Frage BM03
[Inhalt]    Erstelle Frage BM05
[Inhalt]    Erstelle Frage BM01
[Inhalt]    Erstelle Frage BM01
[Inhalt]    Erstelle Frage BM01
[Inhalt]    Erstelle Frage BM01
[Inhalt]    Erstelle Frage BM05
[Inhalt]    Erstelle Frage BM03
[Inhalt]    Erstelle Frage BM01


Debug-Info Seite 2 Mythen:

[Information]    Interview Nummer 672 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt test157867 wird verwendet
[Information]    Die Verweildauer auf Seite 16 war 52 Sekunden
[Verarbeitung]    Lese Antworten von Seite 16
[Information]    Antwort auf BM02_05 = 1
[Information]    Antwort auf BM03_02 = 1
[Information]    Antwort auf BM03_03 = 1
[Information]    Antwort auf BM03_04 = 1
[Information]    Antwort auf BM05_01 = 1
[Information]    Antwort auf BM05_02 = 1
[Information]    Antwort auf BM01_01 = 1
[Information]    Antwort auf BM01_03 = 1
[Information]    Antwort auf BM01_04 = 1
[Information]    Antwort auf BM01_05 = 1
[Information]    Antwort auf BM01_06 = 1
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Information]    Entsprechend der vorher festgelegten Seitenabfolge wird Seite 16 [Myth] angezeigt
[Verarbeitung]    Erstelle Fragebogen-Seite Nr. 16
[Inhalt]    Erstelle Frage BM01
[Inhalt]    Erstelle Frage BM04
[Inhalt]    Erstelle Frage BM01
[Inhalt]    Erstelle Frage BM02
[Inhalt]    Erstelle Frage BM02
[Inhalt]    Erstelle Frage BM04
[Inhalt]    Erstelle Frage BM03
[Inhalt]    Erstelle Frage BM02
[Inhalt]    Erstelle Frage BM02
[Inhalt]    Erstelle Frage BM04
[Inhalt]    Erstelle Frage BM05



Debug-Info Seite "Szen" die fälschlicherweise gezeigt wird:

[Information]    Interview Nummer 672 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt test157867 wird verwendet
[Information]    Die Verweildauer auf Seite 16 betrug zusätzliche 110 Sekunden
[Verarbeitung]    Lese Antworten von Seite 16
[Information]    Antwort auf BM01_02 = 1
[Information]    Antwort auf BM01_07 = 1
[Information]    Antwort auf BM04_01 = 1
[Information]    Antwort auf BM04_02 = 1
[Information]    Antwort auf BM04_03 = 1
[Information]    Antwort auf BM02_01 = 1
[Information]    Antwort auf BM02_02 = 1
[Information]    Antwort auf BM02_03 = 1
[Information]    Antwort auf BM02_04 = 1
[Information]    Antwort auf BM03_01 = 1
[Information]    Antwort auf BM05_03 = 1
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Fragebogen-Seite Nr. 17
[Inhalt]    Erstelle Frage NA01

1 Answer

0 votes
by SoSci Survey (302k points)
edited by SoSci Survey

Danke für die Debug-Information.

[Information] loopPage() wiederholt die Seite 16 nun 2 mal, beginnend mit dem Wert 0

Die Funktionen setPageOrder() und loopPage() können nicht kombiniert werden: Der eine Befehl bricht den jeweils anderen ab. Wenn innerhalb einer Seitenabfolge Seiten wiederholt werden sollenn, müssen diese bereits in setPageOrder() wiederholt angegeben werden.

Die Funktion loopIndex() liefert seit einer Weile übrigens auch für setPageOrder() einen Fortschrittswert. Sie müssten also nur den den Wert bei der ersten Wiederholung mittels registerVaribale() speichern, dann können Sie den Index der Wiederholung problemlos ermitteln.

PS: Wir sollten eventuelle weitere Fragen zu diesem Thema in einer neuen Frage klären. Das hier hat mit der Original-Frage ja nichts mehr zu tun :)

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

...