0 votes
in SoSci Survey (dt.) by s248936 (120 points)

Liebes Support-Team,

ich möchte ungefähr 110 Items zu einer Frage auf mehrere Seiten verteilen (20 Items pro Seite).

Dafür habe ich folgenden Code benutzt:

if (!isset($itemsAN03)) {
$itemsAN03 = getItems('AN03', 'all');

shuffle($itemsAN03);  
$itemsAN03 = array_chunk($itemsAN03, 20);
registerVariable($itemsAN03);
} 
$i = loopPage(count($itemsAN03));
question('AN03', $itemsAN03[$i]);

Jetzt kommt bei mir folgende Fehlermeldung, wenn ich den Fragebogen teste:

![][1]

Außerdem kommt im Bereich "Fragebogen zusammenstellen" folgende Warnung:

![][2]
Was diese put()-Funktion bewirken soll, habe ich nicht wirklich verstanden.

Mein Ziel ist es einfach nur diese 110 Items auf mehrere Seiten zu verteilen, wobei diese Items bei jedem Aufruf in zufälliger Reihenfolge erscheinen. Die Antworten für jedes einzelne Item sollen dann trotzdem richtig zu jedem Item zugeordnet werden.

Ich wäre Ihnen sehr dankbar, wenn Sie mir da weiterhelfen würden.

Vielen Dank im Voraus und liebe Grüße.
[1]: https://support.soscisurvey.de/?qa=blob&qa_blobid=10679598371402484012
[2]: https://support.soscisurvey.de/?qa=blob&qa_blobid=16997174043845443926

by SoSci Survey (328k points)
Eine Frage erlaubt in aller Regel nur 99 Items. Insofern wird es mit den 110 Items ein wenig komplizierter. Haben Sie sich dieser Problematik schon angenommen?

Haben Sie die Frage AB03 eventuell noch auf die Seite gezogen? Wenn Sie sie mittels question() einbinden, dann darf die Frage nicht noch zusätzlich auf die Seite gezogen werden.
by s248936 (120 points)
Liebes Support-Team, vielen Dank für die Rückmeldung.
Inwiefern wird es denn komplizierter? Es ist tatsächlich wichtig für meine Umfrage, dass alle Items in einer Frage platziert sind und bei jedem Aufruf rotieren.

Ich freue mich über eine Rückmeldung und bedanke mich im Voraus.
by s248936 (120 points)
edited by s248936
Alternativ wollte ich noch fragen, ob und wie man folgende Situationen technisch umsetzen kann: Kann ich die Items in 8 verschiedene Blöcke aufteilen, die bei jedem Aufruf aus diesen Blöcken komplett randomisiert rausgezogen und angezeigt werden?

Ich habe es mit folgendem Code probiert aber da kommt dann die Fehlermeldung "Warnung (Seite 3) Für die Frage AN20 wurde kein Item mit der Kennung 0 gefunden":


$fragen = ['AN20', 'AN21'];
$itemliste = [];
foreach ($fragen as $frage) {
  foreach (getItems($frage, 'all') as $item) {
    $itemsliste[] = [$frage, $item];
  }
}
 

if (!isset($itemMix)) {
  $itemMix = $itemliste;
  registerVariable($itemMix);
}
 

question('AN20', 'show-items=none', 'spacing=0');
 

foreach ($itemMix as $info) {
  $frage = $info[0];
  $item = $info[1];
  question($frage, $item, 'show-title=no', 'show-explanation=no', 'spacing=0');
}

2 Answers

0 votes
by SoSci Survey (328k points)

Es ist tatsächlich wichtig für meine Umfrage, dass alle Items in einer Frage platziert sind und bei jedem Aufruf rotieren.

Technisch werden Sie die Items auf mehrere Fragen verteilen und dann zusammengefügt anzeigen müssen: Items aus unterschiedlichen Fragen rotieren - den Code dafür haben Sie ja bereits gepostet. Ich denke nur, dass ein shuffle() fehlt, damit auch etwas rotiert wird:

if (!isset($itemMix)) {
  $itemMix = $itemliste;
  shuffle($itemMix);     // ergänzt
  registerVariable($itemMix);
}

"Warnung (Seite 3) Für die Frage AN20 wurde kein Item mit der Kennung 0 gefunden":

Lassen Sie sich Ihr Array doch mal als Debug-Info anzeigen:

debug($itemMix);

Da dürfte eigentlich in der rechten Spalte keine 0 stehen?

by s248936 (120 points)
Ich habe nun das Problem mit folgendem Code gelöst, was ja auch den selben Zweck erfüllt oder?

if (!isset($items)) {
  $questions = ['AN03','AN04'];
  // Liste mit allen Items erstellen
  $items = [];
  foreach ($questions as $qstID) {
    $qstItems = getItems($qstID, 'all');
    foreach ($qstItems as $itemID) {
      $items[] = [$qstID, $itemID];
    }
  }
  // Liste mischen
  shuffle($items);
  registerVariable($items);
}
// Fragetext anzeigen
question('AN03', 'spacing=0', 'show-items=no');
 
$chunks = array_chunk($items, 3);
$i = loopPage(count($chunks));
// Items anzeigen
foreach ($chunks[$i] as $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
}

Eine Sache noch: Die Beschriftung der Likert Skala wird hier über jedem einzelnen Item angezeigt, dabei sollte das nur einmal ganz oben angezeigt werden. Wie kriege ich das über den Code eingestellt?

Und warum kommt es vor, dass ich ständig automatisch ausgeloggt werde, insbesonders, wenn ich auf Fragebogen zusammenstellen gehe oder im Code arbeite?

Vielen Dank im voraus.
by SoSci Survey (328k points)
> warum kommt es vor, dass ich ständig automatisch ausgeloggt werde

Leeren Sie bitte mal die Cookie für www.soscisurvey.de in Ihrem Browser. Womöglich hat sich da etwas verhakt. Falls es daran nicht liegt, aktiveren Sie im Benutzerkonto die Verwaltung mit variierender IP-Adresse.

> Wie kriege ich das über den Code eingestellt?

Ergänzen Sie ab der zweiten Zeile ein 'anchor=none'

// Items anzeigen
foreach ($chunks[$i] as $i => $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', (($i > 0) ? 'anchor=none' : ''));
}
by s248936 (120 points)
Liebes Support-Team,

vielen Dank. Ich bin begeistert von Ihrer Unterstützung.

Es kommt zwar diese Fehlermeldung

"Warnung: Unerwartetes Element: '' - fehlt hier vielleicht ein Semikolon (;) oder Anführungszeichen?
question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', (($i > 0) ? 'anchor=none' : ''

aber es funktioniert.

Eine weitere Frage hätte ich noch: Wie kann ich denn einstellen, dass die Kopfzeile, also die Beschriftung der Likert-Skala, mit dem Fenster scrollt?

Vielen Dank im Voraus
by SoSci Survey (328k points)
Danke :)

Ja, ich hatte hier ein wenig Code-Golf gespielt ... und einen IF-Filter in der Form (... ? ... : ...) untergebracht. Das kennt der Code-Check im "Fragebogen zusammenstellen" nicht.

Sie können die Meldung ignorieren oder ein "normales" IF daraus machen.

> Wie kann ich denn einstellen, dass die Kopfzeile, also die Beschriftung der Likert-Skala, mit dem Fenster scrollt?

Eine entsprechende Funktion finden Sie bei "Weitere Einstellungen" -> "Kopfzeile" -> "Kopfzeile wiederholen".
by s248936 (120 points)
Hallo,

> Ja, ich hatte hier ein wenig Code-Golf gespielt ... und einen IF-Filter in der Form (... ? ... : ...) untergebracht. Das kennt der Code-Check im "Fragebogen zusammenstellen" nicht.

Sie können die Meldung ignorieren oder ein "normales" IF daraus machen.

Wie meinen Sie das? Einen normalen IF daraus machen, ich habe es versucht, aber dann klappt das nicht, oder wie müsste dann diese Zeile des Codes aussehen?

> Eine entsprechende Funktion finden Sie bei "Weitere Einstellungen" -> "Kopfzeile" -> "Kopfzeile wiederholen".

Ja das hatte ich ursprünglich probiert, aber das funktioniert dann trotzdem nicht. Hat es was damit zu tun, dass zwei Fragen durch den Code vereint werden und der anchor Code angewandt wurde?

Oder kann man die Kopfzeile mittels HTML beeinflussen?

Vielen Dank im Voraus.
by SoSci Survey (328k points)
Eine mögliche Lösung mit "normalem" IF könnte so aussehen:

foreach ($chunks[$i] as $i => $item) {
  if ($i > 0) {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
  } else {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
  }
}

Oder eine andere Lösung

foreach ($chunks[$i] as $i => $item) {
  if ($i > 0) {
    $anchor = 'anchor=none';
  } else {
    $anchor = '';
  }
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', $anchor);
}
by s248936 (120 points)
Liebes Support-Team,

ich habe folgende Lösung für mein Problem benutzt, was auch super funktioniert:

if (!isset($items)) {
  $questions = ['AN03','AN04'];
 
 // Liste mit allen Items erstellen
  $items = [];
  foreach ($questions as $qstID) {
    $qstItems = getItems($qstID, 'all');
    foreach ($qstItems as $itemID) {
      $items[] = [$qstID, $itemID];
    }
  }
  
// Liste mischen
  shuffle($items);
  registerVariable($items);
}
// Fragetext anzeigen
question('AN03', 'spacing=0', 'show-items=no');
 
$chunks = array_chunk($items, 20);
$i = loopPage(count($chunks));

// Items anzeigen
foreach ($chunks[$i] as $i => $item) {
  if ($i > 0) {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
  } else {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
  }
}

Jedoch eine kleine Sache, die ich gerne noch anpassen würde: Die Kopfzeile sollte beim Scrollen angezeigt werden, tut es leider nicht. Ich habe die Einstellung in der Frage bereits angepasst, trotzdem verschwindet die Kopfzeile. Hat das was mit dem Code zu tun, oder wie könnte ich da den Code anpassen?

Vielen Dank im Voraus für Ihre tolle Unterstützung.
by SoSci Survey (328k points)
> Die Kopfzeile sollte beim Scrollen angezeigt werden, tut es leider nicht.

Das wird (ohne aufwändiges JavaScript) nicht funktionieren. Technisch gesehen zeigen Sie jedes Items in einer eigenen Frage an. Und die Funktion zum Scrollen der grafischen Verankerung scrollt nur innerhalb der Frage.
by s248936 (120 points)
Liebes Support-Team,

nach Absprache mit meinem Projektteam, wollte ich Sie fragen, ob das ein zu hoher Aufwand wäre oder ob Sie mir dies bzgl. helfen könnten, diesen JavaScript zu erstellen, damit die Funktion zum Scrollen der grafischen Verankerung trotzdem funktioniert.

Vielen Dank im Voraus für eine Rückmeldung.
by SoSci Survey (328k points)
> ob das ein zu hoher Aufwand wäre

Posten Sie bitte mal einen Pretest-Link direkt zur ersten Seite des Loops. Dann schaue ich mal in die Codes, welche sich um das Scrollen der Verankerung kümmern und prüfe, ob man das mit realistischem Aufwand anpassen kann. Womöglich reicht es, wenn ich noch die ein oder andere Funktion im Script ergänze, damit man den Scrollbereich etwas flexibler definieren kann.
by s248936 (120 points)
by SoSci Survey (328k points)
Ja, danke. Ich sehe zu, dass ich Ihnen bis Mittwoch Genaueres sagen kann.
0 votes
by SoSci Survey (328k points)
edited by SoSci Survey

Für die mit-scrollende Verankerung haben wir inzwischen auch eine Lösung gebaut. Bitte gehen Sie wie folgt vor.

(1) Deaktivieren Sie in Ihren beiden Fragen die Option, dass die Kopfzeile mitscrollen soll. Wählen Sie aus, dass sie einfach oben angezeigt wird.

(2) Ergänzen Sie in Ihrem PHP-Code zwei replace() - einmal für die erste Frage und einmal für das letzte Item auf der Seite.

// Items anzeigen
foreach ($chunks[$i] as $i => $item) {
  if ($i > 0) {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
  } else {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
  }
}

// Neuer Code
$chunk = $chunks[$i];
replace('%questionID%', $chunk[0][0]);
$lastElement = $chunk[count($chunk) - 1];
replace('%lastItem%', id($lastElement[0], $lastElement[1]));

(3) Ergänzen Sie einen PHP-Befehl, damit die passende JavaScript-BIbliothek geladen wird.

library('TitleScroller');

(4) Und jetzt ergänzen Sie unter dem PHP-Code noch ein wenig JavaScript-Code als HTML-Code.

<script>
var scroller = new S2TitleScroller("%questionID%");
scroller.addItem("%lastItem%");
</script>

Wenn das nicht funktioniert, posten Sie bitte die Debug-Information ... womöglich stimmen die Platzhalter noch nicht ganz. Ach ja ... Sie müssen auch den Browser-Cache noch leeren, damit die aktuelle Version der Bibliothek geladen wird.

by s248936 (120 points)
Genau, das steht alles im PHP-Code, außer eben der folgende Teil steht im HTML-Code:

<script>
var scroller = new S2TitleScroller("%questionID%");
scroller.addItem("%lastItem%");
</script>

Es kommt nun folgende Fehlermeldung:

debug()    Inhalt:
[0]    [0]Array [AN04, 24]    [1]Array [AN03, 48]    [2]Array [AN04, 20]    [3]Array [AN03, 8]    [4]Array [AN04, 48]    [5]Array [AN04, 3]    [6]Array [AN03, 17]    [7]Array [AN03, 42]    [8]Array [AN04, 41]    [9]Array [AN04, 39]    [10]Array [AN03, 37]    [11]Array [AN03, 58]    [12]Array [AN04, 36]    [13]Array [AN04, 43]    [14]Array [AN03, 36]
[1]    [0]Array [AN04, 8]    [1]Array [AN04, 12]    [2]Array [AN03, 52]    [3]Array [AN04, 38]    [4]Array [AN03, 59]    [5]Array [AN03, 34]    [6]Array [AN04, 4]    [7]Array [AN03, 32]    [8]Array [AN04, 23]    [9]Array [AN04, 46]    [10]Array [AN03, 56]    [11]Array [AN04, 13]    [12]Array [AN03, 63]    [13]Array [AN03, 43]    [14]Array [AN03, 62]
[2]    [0]Array [AN04, 15]    [1]Array [AN04, 34]    [2]Array [AN03, 28]    [3]Array [AN04, 17]    [4]Array [AN03, 49]    [5]Array [AN03, 27]    [6]Array [AN04, 33]    [7]Array [AN03, 51]    [8]Array [AN03, 18]    [9]Array [AN03, 53]    [10]Array [AN03, 25]    [11]Array [AN04, 51]    [12]Array [AN04, 6]    [13]Array [AN04, 44]    [14]Array [AN03, 55]
[3]    [0]Array [AN04, 10]    [1]Array [AN03, 54]    [2]Array [AN03, 12]    [3]Array [AN03, 4]    [4]Array [AN03, 26]    [5]Array [AN03, 3]    [6]Array [AN03, 10]    [7]Array [AN03, 64]    [8]Array [AN04, 22]    [9]Array [AN03, 6]    [10]Array [AN03, 9]    [11]Array [AN04, 1]    [12]Array [AN03, 22]    [13]Array [AN03, 5]    [14]Array [AN04, 21]
[4]    [0]Array [AN04, 40]    [1]Array [AN04, 37]    [2]Array [AN03, 60]    [3]Array [AN03, 1]    [4]Array [AN03, 40]    [5]Array [AN03, 21]    [6]Array [AN04, 9]    [7]Array [AN04, 28]    [8]Array [AN03, 50]    [9]Array [AN03, 31]    [10]Array [AN03, 45]    [11]Array [AN04, 50]    [12]Array [AN04, 14]    [13]Array [AN04, 26]    [14]Array [AN03, 14]
[5]    [0]Array [AN03, 29]    [1]Array [AN03, 2]    [2]Array [AN04, 18]    [3]Array [AN03, 24]    [4]Array [AN04, 29]    [5]Array [AN03, 13]    [6]Array [AN03, 39]    [7]Array [AN04, 25]    [8]Array [AN04, 7]    [9]Array [AN03, 7]    [10]Array [AN03, 65]    [11]Array [AN04, 47]    [12]Array [AN03, 61]    [13]Array [AN04, 49]    [14]Array [AN03, 47]
[6]    [0]Array [AN03, 20]    [1]Array [AN04, 2]    [2]Array [AN04, 42]    [3]Array [AN03, 38]    [4]Array [AN03, 35]    [5]Array [AN04, 30]    [6]Array [AN03, 33]    [7]Array [AN03, 46]    [8]Array [AN03, 11]    [9]Array [AN03, 44]    [10]Array [AN03, 41]    [11]Array [AN03, 19]    [12]Array [AN03, 16]    [13]Array [AN04, 35]    [14]Array [AN04, 19]
[7]    [0]Array [AN03, 15]    [1]Array [AN03, 23]    [2]Array [AN04, 45]    [3]Array [AN04, 11]    [4]Array [AN04, 31]    [5]Array [AN04, 27]    [6]Array [AN04, 32]    [7]Array [AN03, 57]    [8]Array [AN03, 30]    [9]Array [AN04, 16]    [10]Array [AN04, 5]

debug()    Inhalt: $i = 0 (integer)

Eine Frage an Sie: Wie sehr halten Sie es für sinnvoll oder umsetzbar, ein Live-Meeting via Zoom zu machen, in dem ich Ihnen mein Bildschirm teile?
by SoSci Survey (328k points)
Danke, jetzt fehlt noch die Debug-Information von dem $chunk-Teil (das dritte debug()) - wird da noch etwas angezeigt?

> Wie sehr halten Sie es für sinnvoll oder umsetzbar, ein Live-Meeting via Zoom zu machen, in dem ich Ihnen mein Bildschirm teile?

Heute Nacht zwischen 3:00 und 3:15 Uhr hätte ich vielleicht noch ein paar freie Minuten für solchen Luxus. Also ... nein, eher nicht ;)

Aber Sie können mir mitteilen, wie der Link zum Fragebogen ist und mir (hier, formlos) gestatten, dass ich mich einmal direkt in das Projekt einloggen darf. Wenn Sie mir dann noch sagen, in welchem Fragebogen und auf welcher Seite ich nachsehen soll, kann ich es mir einmal live ansehen.
by s248936 (120 points)
Ok, ich gestatte Ihnen hiermit, dass Sie sich einmalig in das Projekt einloggen können.
Fragebogen: base
Seite: 3

https://www.soscisurvey.de/antinomien/

Eine Frage noch zu dieser Warnung, auch auf Seite 3:
Warnung
Bitte beachten Sie, dass die von random() oder shuffle() erzeugten Zufallswerte nicht automatisch im Datensatz gespeichert werden. Zum Speichern können Sie ggf. die Funktion put() verwenden.

Also die Antworten werden beim Ausfüllen schon richtig abgespeichert im Datensatz, deshalb verstehe ich den Sinn dieser Warnung nicht. Welche Zufallswerte sind denn damit gemeint?
by SoSci Survey (328k points)
Okay ... ich musste ein wenig suchen ... das Problem war die Kombination dieser beiden Zeilen:

$i = loopPage(count($chunks));
...
foreach ($chunks[$i] as $i => $item) {

Da wird die Variable $i für zwei unterschiedliche Dinge verwendet - und die zweite Zeile überschreibt das $i aus der ersten Zeile. Ich habe das zweite $i mal durch $k ersetzt.

Außerdem musste ich die separate Anzeige des Titels noch ändern, sodass der Titel nun gemeinsam mit dem ersten Item angezeigt wird. Sonst arbeitet die Lösung zum Scrollen nicht.

Stellen Sie sicher, dass AN03 und AN04 dieselben Fragetexte eingetragen haben.

> Also die Antworten werden beim Ausfüllen schon richtig abgespeichert im Datensatz, deshalb verstehe ich den Sinn dieser Warnung nicht. Welche Zufallswerte sind denn damit gemeint?

Wenn Sie nachher wissen wollten, in welcher Reihenfolge die Items angezeigt werden, und welche zusammen auf einer Seite, dann wäre diese Information im Datensatz nicht verfügbar.

In Ihrem Fall werden Sie das wohl auch nicht brauchen. Aber es gab schon Fälle, wo Nutzer:innen ihre experimentelle Variation per shuffle() erledigt hatten. Und als die Gruppenzuordnung dann nicht im Datensatz auftauchte ... das wünscht man eigentlich niemandem.
by s248936 (120 points)
Liebes Support-Team,

das klappt nun und die Umfrage ist Online. Ich bedanke mich ganz herzlich für Ihre tolle Unterstützung. Ich bin wirklich sehr begeistert von Ihrer Hilfe. Das werde ich auch so in meinem Umfeld weitergeben. Nochmals vielen Dank an das Team.

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

...