0 votes
in SoSci Survey (dt.) by s091065 (210 points)
closed by SoSci Survey

Hallo,

ich habe ein kleines Problem, was ich leider bisher nicht geschafft habe zu lösen.
Ich möchte, dass der Fragebogen nach einer loopPage nicht mit der regulären Anordnung weitermacht, sondern auf eine bestimmtSeite springt.
Das klappt hier z.B. auch gut (s. Ende des Codes):

if (!isset($itemsP)) {
  $itemA = getItems('AO09','all');  
  $itemB = getItems('AO10','all');

  $itemE = array('N111','P112');                 
  $itemF = array('N311','P312');


  $paare = array();               
  for ($i=0; $i<count($itemA); $i++) {
    $paare[] = array(array($itemE[$i], null), array('AO09', $itemA[$i]));
    $paare[] = array(array($itemF[$i], null), array('AO10', $itemB[$i]));
  }
              
  $itemsP = array();
  foreach ($paare as $paar) {    
    $itemsP[] = $paar[0];
    $itemsP[] = $paar[1];
  }
  registerVariable($itemsP);

}


$i = loopPage(8);      
question($itemsP[$i][0], $itemsP[$i][1]);

if ($i == 7) {
setNextPage('Start');
}

Nun hab ich fest den gleichen Code später noch mal und irgendwie klappt hier nichts, was ich probiert habe

if (!isset($itemsTr)) {
  $itemA = getItems('AO01','all'); 
  $itemB = getItems('AO02','all');
  $itemC = getItems('AO05','all');
  $itemD = getItems('AO06','all');
  $itemE = array(                   
    'N701','N702','N703','N704','N705','N706','N707','N708','N709', 'N710');
  $itemF = array(
    'P701','P702','P703','P704','P705','P706','P707','P708','P709', 'P710');
  $itemG = array(
    'N501','N502','N503','N504','N505','N506','N507','N508','N509', 'N510');
  $itemH = array(
    'P501','P502','P503','P504','P505','P506','P507','P508','P509', 'P510');

  shuffle($itemA);
  shuffle($itemB);
  shuffle($itemC);
  shuffle($itemD);
  shuffle($itemE);
  shuffle($itemF);
  shuffle($itemG);
  shuffle($itemH);


  $paare = array();              
  for ($i=0; $i<count($itemA); $i++) {
    $paare[] = array(array($itemE[$i], null), array('AO01', $itemA[$i]));
    $paare[] = array(array($itemF[$i], null), array('AO02', $itemB[$i]));
    $paare[] = array(array($itemG[$i], null), array('AO05', $itemC[$i]));
    $paare[] = array(array($itemH[$i], null), array('AO06', $itemD[$i]));
  }
  shuffle($paare);             


  $itemsTr = array();
  foreach ($paare as $paar) {    
    $itemsTr[] = $paar[0];
    $itemsTr[] = $paar[1];
  }
  registerVariable($itemsTr);

}


$i = loopPage(count($itemsTr));    
question($itemsTr[$i][0], $itemsTr[$i][1]);

foreach ($itemsTr as $i => $item) {
  $id = id('IV04', $i + 1);
  put($id, $item[0]);
}


if ($i == 79) {       // nach 80 loops soll der Frabebogen zur Seite 'break' gehen
setNextPage('break');
}

Hier klappt das nicht, wenn ich $i==79 probiere (es sollten 80 loops sein), geht der Fragebogen schon nach einem loop zur Seite 'break'.Ich habe es auch mit $itemsTr probiert, aber das hat nicht geklappt. Ich habe noch den Befehlt loopIndex() gefunden und damit was versucht, das war aber auch nicht sehr erfolgreich, ich glaube damit habe ich es irgendwie hinbekommen, dass nach 4 loops zur Seite 'break' gesprungen wird, aber es das war auch nicht richtig.
Ist vermutlich ein simples Problem,aber grad weiß ich leider nicht, was ich noch probieren kann....

closed with the note: Problem gelöst
by SoSci Survey (304k points)
Was passiert denn, wenn Sie ($i == 3) ausprobieren und das Ganze mal drei Seiten lang in der Debug-Information verfolgen?

Was zeigt denn debug(count($itemsTr)); - sprich, wie viele Items haben Sie denn?
by s091065 (210 points)
Also wenn ich $i==3 oder irgendeinen anderen Wert als 79 angebe, dann klappt das gar nicht, dann läuft die loop 80 mal und geht dann zur nächsten Seite im Fragebogen.
debug(count($itemsTr)) sagt mir : count($itemsTr) = 80 (integer)

Dachte auch eigentlich dass $itemsTr eigentlich gut sein müsste, aber das wird auch "ignoriert", der Fragebogen läuft damit einfach nach 80 loops weiter wo es die Anordnung "normal" vorgibt.
by SoSci Survey (304k points)
Okay ... wenn Sie ohnehin alle 80 Items anzeigen möchten, warum dann das setNextPage()? Wenn es nur darum geht, dass es nach den 80 Items an anderer Stelle weitergehen soll, dann fügen Sie z.B. eine leere Seite ein, die (nur) folgenden PHP-Code enthält:

goToPage('break');

loopPage() und setNextPage() vertragen sich nicht besonders gut, weil sie um denselben Mechanismus konkurrieren. Aber ich müsste etwas tiefer graben, um zu sagen, warum es im vorliegenden Fall nicht funktioniert.
by s091065 (210 points)
ah ok! Ja, das wäre natürlich ne einfache Lösung, die wohl funktionieren sollte und auf die ich nicht gekommen bin; war zu fokussiert darauf das so ans Laufen zu kriegen =)
Danke sehr!

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

...