0 votes
in SoSci Survey (dt.) by s047711 (250 points)

Ist es möglich "Meta-Blöcke" zu bilden und zu mischen, jedoch deren "Sub-Blöcke" fix zu halten? Ich mache ein Beispiel. Ich habe "Metablock 1", der besteht aus zwei "Sub"-Blöcken (1P und 1N), diese jeweils à 2 Fragen (Metablock 1 also insgesamt aus 4 Fragen). Entsprechend bestehen Metablock 2 und 3 auch jeweils aus zwei Sub-Blöcken und diese ebenso jeweils aus 2 Fragen.
In den Sub-Blöcken soll die Reihenfolge der je 2 Fragen fix sein! Die Reihenfolge der beiden Sub-Blöcke innerhalb der Metablöcke jedoch randomisiert und auch die Reihenfolge der Metablöcke soll zufällig zugewiesen werden. Ich kann also nicht einfach die normale Anleitung zu Rotation + Mischen anwenden.

by SoSci Survey (327k points)
Könnten Sie vielleicht einmal ein konkretes Beispiel für Ihre Blöcke ergänzen - gerne mit einfachen Symbolen - und dann erklären, was gemischt werden soll und was nicht? Also z.B. Block 1: "ABCXDYE und X und Y sollen fix bleiben während alle anderen Seiten gemischt werden sollen" - ich glaube, dann verstehe ich Sie besser. Danke.
by s047711 (250 points)
Es gibt 3 Blöcke (A, B, C) und jeder besteht wiederum aus 2 "Unter-Blöcken" (X, Y). Diese bestehen wiederum aus jeweils 2 Fragen (1 und 2).

Die Reihenfolge der 3 Blöcke A, B und C soll variieren.
Innerhalb von A, B und C soll zusätzlich die Reihenfolge von X und Y variiert werden.
X und Y bestehen jeweils aus 2 Fragen, die immer in derselben Reihenfolge bleiben sollen.

Mögliche Reihenfolgen wären also z.B.:
A (X(1,2)) - A (Y(1,2)) - C (Y)(1,2)) - C (X(1,2)) - B (Y(1,2)) - B (X (1,2))
B (Y (1,2)) - B (X(1,2)) - A (Y(1,2)) - A (X(1,2)) - C (Y(1,2)) - C (X(1,2))
usw..

Ist es jetzt klarer?
Es ist also gewissermaßen eine Verschachtelung von Blöcken. Mit gotopage wären das sehr viele Pfade, aber im Notfall würde ich dann diesen Weg gehen.

1 Answer

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

Danke für die ergänzende Erklärung.

Ich gehe einmal davon aus, dass Sie die Rotation über setPageOrder() erledigen möchten. Prinzipiell könnten Sie bei dieser Variante aber auch loopPage() verwenden. Dann müssten Sie nur statt der Seiten-Kennungen die Frage-Kennungen eintragen und den befehl question() verwenden, um die Inhalte anzuzeigen.

Zunächst einmal werden Sie ein Array benötigen, das Ihre Struktur abbildet. Wenn Sie mit Seiten-Kennungen arbeiten, können Sie die Fragen innerhalb der "inneren" Blöcke gleich als Bereiche mit Bindestrich definieren:

$seiten = array(
  array('AX1-AX2', 'AY1-AY2'),
  array('BX1-BX2', 'BY1-BY2'),
  array('CX1-CX2', 'CY1-CY2')
);

Es sind ja nur 6 Elemente (bestehend aus jeweils 2 Fragen), die rotiert werden - also bleibt das recht überschaubar. Und dann folgen Sie hier einfach der Anleitung zur Rotation von Blöcken ... also jedes der enthaltenen Arrays mischen ...

shuffle($seiten[0]);
shuffle($seiten[1]);
shuffle($seiten[2]);

Und dann noch die oberste Ebene - also die Blöcke A, B und C.

shuffle($seiten);

Vielleicht noch ein isset() außenherum und dann die Seitenabfolge definieren. Die sollte (so hoffe ich) mit dem verschachtelten Array direkt umgehen können.

if (!isset($seiten)) {
  $seiten = array(
    array('AX1-AX2', 'AY1-AY2'),
    array('BX1-BX2', 'BY1-BY2'),
    array('CX1-CX2', 'CY1-CY2')
  );
  shuffle($seiten[0]);
  shuffle($seiten[1]);
  shuffle($seiten[2]);
  shuffle($seiten);
  registerVariable($seiten);
}
setPageOrder($seiten);
by s047711 (250 points)
Es sind jetzt doch 3 statt 2 Fragen innerhalb der inneren Blöcke (davon aber 2 jeweils auf der ersten Seite und eine weitere auf einer zweiten Seite, der Bereich sollte also gleich definiert werden können).
Wenn ich den Code so anwende wie beschrieben, dann bleiben die "inneren" Blöcke nicht erhalten,bzw. wird deren zweite Seite (die mit "RU"-Kennungen) nicht angezeigt, sondern es springt von einer SZ-Kennung zur nächsten (auch die äußeren Blöcke bleiben nicht erhalten).

$seiten = array(
  array('SZ01-RU02', 'SZ11-RU03'),
  array('SZ13-RU06', 'SZ03-RU04'),
  array('SZ15-RU07', 'SZ05-RU05')
);
shuffle($seiten[0]);
shuffle($seiten[1]);
shuffle($seiten[2]);
shuffle($seiten);

if (!isset($seiten)) {
$seiten = array(
  array('SZ01-RU02', 'SZ11-RU03'),
  array('SZ13-RU06', 'SZ03-RU04'),
  array('SZ15-RU07', 'SZ05-RU05')
);
  registerVariable($seiten);
}
setPageOrder($seiten);

Liegt das "RU"-Problem vielleicht daran, dass auf der zweiten Seite ein PHP-Code steht, die Frage selbst aber nicht reingezogen wurde (hier wird jeweils innerhalb der Fragen die Reihenfolge der Items rotiert, daher der PHP-Code)?

$blocks = array(
  array(1,2,3),
  array(7,8,9),
  array(13,15,16),
  array(19,20,21)
);
for ($i=0; $i<count($blocks); $i++) {
  shuffle($blocks[$i]);
}
shuffle($blocks);
$items = array();
for ($i=0; $i<count($blocks); $i++) {
  $items = array_merge($items, $blocks[$i]);
}
question('RU02', $items);
by SoSci Survey (327k points)
Bitte beachten Sie, dass der unterste Code-Block in der o.g. Anleitung die oberen drei zusammenfasst (das war noch etwas unklar, ich habe das nochmal genauer eingetragen). Also bitte nicht doppeln - und das isset() außen lassen.

Wenn es dann immer noch nicht funktioniert, posten Sie bitte die Debug-Information der Seite. Danke.
by s047711 (250 points)
Scheint zu funktionieren, danke!

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

...