0 votes
in SoSci Survey (dt.) by s128054 (165 points)

Hallo,

ich suche mich gerade dusselig und dämlich, weil meine Frage bestimmt schon mal jemanden beschäftigt haben muss, aber finde leider keine zufriedenstellende Antwort...

Bei der systematischen Rotation von Blöcken möchte ich gerne die entsprechenden Blöcke entsprechend ihrer individuellen Reihenfolge innerhalb der unterschiedlichen Varianten fortlaufend nummerieren.

Die Verwendung eines Platzhalters habe ich ebenfalls schon ausprobiert, aber schaffe höchstens die fortlaufende Durchnummerierung einzelner Seiten, aber keiner ganzen Blöcke.

Vielen Dank für eine Antwort auf meine wahrscheinlich nicht ganz so qualifizierte Frage!

by SoSci Survey (328k points)
Die Frage ist durchaus qualifiziert. Wenn Sie noch Ihren PHP-Code ergänzen würden, dann würde ich mich im Gegenzug an einer qualifizierten Antwort versuchen.
by s128054 (165 points)
Sehr gerne!

Hier ist der PHP-Code den ich verwende, der aber scheinbar nur für die dynamische fortlaufende Nummerierung von Seiten funktioniert und nicht von Blöcken:

replace('%Aufgabennummer%', 'qn+', 'special');
html('<div class="title">%Aufgabennummer%. Dies ist der Titel des Aufgabenblocks, der über mehrere Seiten verläuft </div>');

Vielen Dank im Voraus für Ihre Hilfe!
by SoSci Survey (328k points)
Das "qn+" sollte eine (zusätzliche) Nummer in die laufenden Nummern der Fragen einfügen und ggf. anzeigen: https://www.soscisurvey.de/help/doku.php/de:create:functions:replace

Wie sieht denn der PHP-Code aus, den Sie für die Rotation der Blöcke verwenden? Ich gehe davon aus, dass Sie dort eine Zählvariable haben, die sich für Ihren Zweck nutzen lässt.
by s128054 (165 points)
Die Rotation der Blöcke habe ich mittels des Zufallsgenerators eingerichtet.
Hier der zugehörige PHP-Code:
$order = value('RM02', 'label');
setPageOrder($order, 'AV00');


Vielen Dank für Ihre Hilfe!

1 Answer

0 votes
by SoSci Survey (328k points)

Die Rotation der Blöcke habe ich mittels des Zufallsgenerators eingerichtet.

In Ordnung, dann ist das mit der Nummerierung tatsächlich nicht so trivial. Aber auch das ist lösbar :)

Ich nehme der Einfachheit halber an, dass Sie keinen Zurück-Knopf im Fragebogen erlauben. Dann könnten Sie die Nummerierung wie folgt vorbereiten:

$blockNum = 0;
registerVariable($blockNum);

Wo immer nun eine Nummer auftauchen soll, schreiben Sie:

if (getRoute() == 'next') {
  $blockNum++;
}
replace('%nummer%', $blockNum);
by s128054 (165 points)
Vielen Dank für die rasche Rückmeldung!

Ich erhalte nun eine Fehlermeldung, dass ich für replace() min. 2 Argumente angeben muss... :(

Falls es einfacher und "richtiger" ist, würde ich die systematische Rotation auch per PHP-Code vornehmen und dabei die erwähnte Zählvariable nutzen. Könnten Sie mir dabei mit einem Code für insgesamt sechs Rotationsvarianten (bei 3 Blöcken) weiterhelfen?

Herzlichen Dank für Ihre Hilfe!
by s128054 (165 points)
Update: aus irgendeinem Grund funktioniert der o.a. Code nun, wenn ich alles in einen PHP Code schreibe und zu Beginn auf jede Seite setze. Alle funktioniert die Nummerierung der Blöcke nicht korrekt.
Die erste Seite des ersten Blocks wird mit "0" nummeriert, die zweite Seite des ersten Blocks mit "1", die dritte Seite des ersten Blocks mit "1", die vierte Seite des ersten Blocks mit "1", die erste Seite des zweiten Blocks mit "1", die zweite Seite des zweiten Blocks mit "2" usw....

Vielleicht haben Sie noch eine Idee?

Danke im Voraus für Ihre Hilfe (und das Sie mich nicht aufgeben :) )!
by SoSci Survey (328k points)
Wichtig ist, dass Sie den Test ab der Seite starten, wo das registerVariable() steht. Dann sollten die beschriebenen Probleme aber nicht auftreten?!
by s128054 (165 points)
Wooohooo, Sie sind super!
Es scheint zu klappen! :)

Könnten Sie nochmals kurz über die aktuelle Logik schauen:
* FB Seite 1: "Text" - kein PHP
* FB Seite 2: "Text" - kein PHP
* FB Seite 3: Seite 1, Block 1
   hier: PHP mit registerVariable
   und PHP mit replace()
* FB Seite 4: Seite 2, Block 1
   hier: PHP  mit replace()
* FB Seite 5: Seite 3, Block 1
   hier: PHP  mit replace()
* FB Seite 6: Seite 1, Block 2
   hier: PHP mit registerVariable
   und PHP mit replace()

usw....

Ist dies korrekt?
by SoSci Survey (328k points)
Also wenn Sie die Seiten nummerieren wollen, dann ja. Wenn Sie die Blöcke nummerieren möchten, dann packen Sie bitte den PHP-Code (und auch nur den zweiten, das registerVariable() brauchen Sie auf den hinteren Seiten überhaupt nicht mehr) nur auf die Seiten, wo eine neue Nummer kommen soll.

Wenn man eine Seitenzahl per replace() im Platzhalter abgelegt hat, merkt SoSci Survey sich das für alle folgenden Seiten.
by s128054 (165 points)
Es tut mir furchtbar Leid, aber es scheint einfach nicht zu klappen. Obwohl, wie von Ihnen zuletzt beschrieben, durchgehend auf allen Startseiten der jeweiligen Seitenblöcke der relevante PHP Code mit replace() eingefügt wurde und die Vorbereitung einmalig und vor dem allerersten Seitenblock mit registerVariable vorgenommen wurde.

Vielleicht können Sie mir für das Vorhaben der systematischen Rotation noch eine andere Variante empfehlen?

Hier nochmals mein Vorhaben:
25 Fragebogenseiten die thematisch in 6 Blöcke aufgeteilt sind (Blöcke A, B, C, D, E, F).
Jede Seite enthält eine Nummerierung analog des jeweiligen "Seitenblocks".
Die Blöcke C, D, E sollen dabei systematisch rotiert werden:
1 = C   D   E
2 = D   E   C
3 = E   C   D
4 = E   D   C
5 = C   E   D
6 = D   C   E

Entsprechend sollen alle Seiten der Blöcke C, D, E analog der o.g. Rotationsversionen eine dynamische Nummerierung analog der Reihenfolge der Darstellung erhalten (Aufgabenblöcke 3, 4, 5).

Nach Möglichkeit sollte nachvollziebar sein, welche Blockreihenfolge zu welchem Ergebnis führt. Dies wäre aber nur "nice to have" - wichtig wäre mir, dass ich die dynamische, fortlaufende Nummerierung der einzelnen Seiten mit der jeweiligen Fragenblock-Nummer hinbekomme.

Vielen Dank für Ihre Hilfe im Voraus!
by SoSci Survey (328k points)
>  aber es scheint einfach nicht zu klappen

Sie haben den Text ab der Seite mit dem registerVariable() oder früher begonnen, ja? Bitte beschreiben Sie kurz, was funktioniert und was noch nicht (ggf. bitte auch vollständige Fehlermeldungen) und ergänzen Sie auch die Information, was die Debug-Information von SoSci Survey anzeigt.

Am liebsten in einer neuen Frage (zusammen mit dem bisher verwendeten PHP-Code), weil es hier unten sonst unübersichtlich wird :)
by s128054 (165 points)
Ich bekomme leider keine Fehlermeldung mehr - es wird einfach keine fortlaufende Nummerierung vorgenommen...

Ja, ich beginne den Test mit der Seite auf der registerVariable() hinterlegt ist. Jede Seite, egal zu welchem Block, wird mit Aufgabennummer "0" ausgegeben.
Auf der ersten Seite vor Beginn der zu rotierenden Blöcke C, D, E, also auf der Seite wo sich auch der Zufallsgenerator befindet, habe ich folgenden PHP-Code angelegt:

$blockNum = 0;
registerVariable($blockNum);

if (getRoute() == 'next') {
  $blockNum++;
}


Auf jeder Startseite eines Seitenblocks ausschließlich folgenden PHP-Code hinterlegt:
replace('%nummer%', $blockNum);

Vielen Dank!
by s128054 (165 points)
Bei der systematischen Rotation bin ich nach dem entsprechenden Tutorial gegangen:
https://www.soscisurvey.de/help/doku.php/de:create:rotation
by SoSci Survey (328k points)
Und Sie haben den Platzhalter %nummer% auch irgendwo in Ihrem Fragebogen verwendet, also z.B: einen HTML-Code

<h1>Abschnitt %nummer%</h1>

(platziert irgendwo unter dem replace() auf der Fragebogen-Seite)
by s128054 (165 points)
Ja, genau!
Zusätzlich noch der HTML-Code auf jeder einzelnen Seite (bei den jeweiligen Startseiten der Blöcke immer unter dem replace().
:

<h2> %nummer%. Titel des jeweiligen Fragenblocks</h2><p>
by s128054 (165 points)
Guten Morgen,

ich habe nochmals den PHP-Code angepasst und es scheint nun zu funktionieren.

Könnten Sie bitte nochmals draufschauen und ggf. die Richtigkeit bestätigen:
1. Auf der Seite des Zufallsgenerators, vor Beginn der zu rotierenden Seitenblöcke C, D, E:

$blockNum = 0;
registerVariable($blockNum);

if (getRoute() == 'next') {
  $blockNum = $blocknum++;
}


2. Auf der jeweiligen Startseite eines Seitenblocks:

replace('%nummer%', $blockNum++);
html('<div class="title">%nummer%. Titel des Seitenblocks </div>');

3. Auf den restlichen Seiten des jeweiligen Blocks nur noch den HTML-Code:

<div class="title">%nummer%. Titel des Seitenblocks </div>
by SoSci Survey (328k points)
edited by SoSci Survey
Fast.

1. Auf der Seite des Zufallsgenerators, vor Beginn der zu rotierenden Seitenblöcke C, D, E:

$blockNum = 0;
registerVariable($blockNum);

2. Auf der jeweiligen Startseite eines Seitenblocks:

// Hochzählen
if (getRoute() == 'next') {
  $blockNum++;
}
// Platzhalter setzen/aktualisieren
replace('%nummer%', $blockNum);
html('<div class="title">%nummer%. Titel des Seitenblocks </div>');

3. Auf den restlichen Seiten des jeweiligen Blocks nur noch den HTML-Code:

<div class="title">%nummer%. Titel des Seitenblocks </div>
by s128054 (165 points)
Ok, danke!
Ich habe es nun genauso gemacht wie zuletzt von Ihnen beschrieben und nun bekomme ich wieder die beiden Fehlermeldungen wie ganz zu Beginn:

Fehler im Fragebogen (Seite 12)
Für die Funktion replace() wurden nicht ausreichend Argumente angegeben, 2 Argumente sind zwingend erforderlich. Weitere Details finden Sie in der Anleitung zur Funktion.

Fehler im Fragebogen (Seite 12)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Die PHP-Variable $blocknum wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

PHP-Code

002
003
004 if (getRoute() == 'next') {
005   $blockNum = $blocknum++;
006 }
007
008 replace('%nummer%', $blockNum++);
by SoSci Survey (328k points)
Die Fehlermeldung kommt, obwohl (!) Sie die Seite mit registerVariable() vorher aufgerufen haben und dann erst auf "Weiter" geklickt haben?

Ich habe oben im Code (voriger Kommentar) noch zwei Korrekturen vorgenommen, weil das ein paar Kleinigkeiten nicht stimmten, z.B. das  $blockNum = $blocknum++;
by s128054 (165 points)
edited by s128054
Perfekt, vielen Dank für Ihre geduldige Unterstützung!
Mit Ihren Änderungen klappt es nun perfekt, auch wenn ich den kompletten Fragebogen durchteste! :)
Vielen, vielen Dank!

Gäbe es noch die Möglichkeit zu speichern, wie die Ergebnisse bei welcher Blockreihenfolge aussehen?
Oder ist das zu kompliziert?

Vielen Dank nochmals!
by SoSci Survey (328k points)
Sie meinen, dass die Abfolge im Datensatz abgespeichert wird? Diese haben Sie doch ohnehin in der Variable Ihres Zufallsgenerators...
by s128054 (165 points)
Prima, ich schaue mir das nochmal an!

Vielen Dank nochmals für die Unterstützung!

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

...