0 votes
in SoSci Survey (dt.) by s219074 (140 points)

(GERMAN BELOW)

Dear Forum,

header says it all.

For the first 10 sites, I embedded 1 of 10 videos on each of them. Then i multiplied all 4 questions x10 and put the same 4 on all pages, respectively. By using div, i managed to get them turning up directly under each video.

While this works fine, I thought by myself there must be an easier way for the remaining 90 videos.

I read "MultiLevelStructure" several times and the &%!? example with the open question confused me completely. I tried around with the codes in the questionnaire, but didn't get it.
I think i need a PHP pro.

I don't need any check, because all items must be filled out. Only each datas. Randomization/ Rotation of the sites would be needed, but i didn't get this explanation either.

If there's someone out there who would be so kind of telling me the coding i need, with inserted titles i can understand like, e.g. multiLevelResponse('PAGEWITHVIDEO_01'), you would literally save my life!

Tell me, if multiplying the question x400 und inserting them one by one is still the best/only way.

Hope this was comprehensible. Thanks a lot in advance folks!

100 Videosequenzen (jeweils mit HTML-Code eingebettet) mit jeweils denselben 4 Fragen bewerten:

Liebes Forum,

der Titel sagt alles. Zur Probe habe ich 10 Seiten mit jeweils einem von 10 Videos erstellt. Die 4 Fragen habe ich dann x10 verfielfacht und jeweils die 4 selben unter jedes Video gepackt (hätte ich nicht verfielfacht und immer exakt dieselben genommen, dann hätte ich ja keine einzelnen Werte für jedes Video). Mit div habe ich es dann geschafft, die 4 Fragen jeweils unter das jeweilige Video zu packen.

Funktioniert, dachte aber, es muss einfacher gehen, als das jetzt noch mit den übrigen 90 Videos zu machen.

habe "MultievelStructure" mehrfach durchgelesen und im Fragebogen rumprobiert, aber nichts gerafft. Dieses Beispiel mit der "Offenen Nennung" verwirrt mich. Brauche glaub ich nen PHP-Profi!

Brauche keinen Check, die Items müssen eh alle ausgefüllt sein. Randomisieren/Rotieren der Seiten/Items wäre schon gut, hab die "Rotieren"-Beschreibung aber auch nicht verstanden.

Wenn irgendjemand von euch mir sagen könnte, wie ich das codiere, am besten mit Code-Verweisen die ich verstehe, z.B. sowas wie multiLevelResponse('SEITEMITVIDEO_01'), wär ich euch unendlich dankbar.

Hoffe das war verständlich! Wenn ihr sagt, dass 100 Seiten und 400 Fragen drauf packen immer noch der beste weg wäre, dann ist es ebend so.

Danke euch schonmal ganz herzlich im Voraus!
Viele Grüße

1 Answer

+1 vote
by SoSci Survey (306k points)

Möchten Sie einem einzelnen Befragten wirklich 100 Videos á 4 Fragen = 400 Fragen = 1:10 Stunden Ausfüllzeit plus Dauer der Videos aufbürden? Spätestens nach 10 Videos müssen Sie doch von rein zufälligen Antworten ausgehen.

Aber um Ihre Frage zu beantworten: Multi-Level Struktur ist die Anleitung, die Sie suchen.

Das ließe sich übrigens, falls gewünscht, auch mit einer zufälligen Teilauswahl von Videos kombinieren.

by s219074 (140 points)
Ja, es geht um eine Preselection durch nur 10 Leute, die speziell instruiert sind und Pausen haben.

Danke, aber wie bereits erwähnt habe ich mich mit der Multi-Level-Struktur schon ausführlich aueinandergesetzt, finde die Anleitung aber für nicht-PHP Profis unzureichend. Es erschließt sich mir nicht und ich verzweifle daran, sonst hätte ich ja hier keine Frage gestellt.
by SoSci Survey (306k points)
Pardon, ich hatte die Frage offenbar unvollständig gelesen.

Nun, im Prinzip gibt es zwei Fragebögen: Einen mit dem multiLevelDown(), welcher die Stimuli in einer Schleife "durchzählt" und den untergeordneten, der den Stimulus und die 4 Fragen anzeigt.

> z.B. sowas wie multiLevelResponse('SEITEMITVIDEO_01')

Den Befehl multiLevelResponse() brauchen Sie nur, wenn Sie sich Daten um untergeordneten Fragebogen erwarten. Ansonsten sind Sie mit einem loopPage() und einem multiLevelDown() schon gut bedient.

Vielleicht könnten Sie konkretisieren, an welcher Stelle es konkret hakt?
by s219074 (140 points)
Kein Problem, bin ja froh, dass du mir hilfst!

Es hakt quasi überall, das Beispiel mit dem Namensgenerator verwirrt mich komplett. Mit gelingt der Transfer zu den Codes im Fenster nicht.

Es ist ja ziemlich klar was ich habe:
100 Videosequenzen, die auf einzelnen Seiten erscheinen sollen.
Jeweils 4 Bewertungsskalen darunter, die immer gleich lauten. Diese müssen einzeln codiert und den Videos zugeordnet werden sollen, so dass am Ende 400 Werte rauskommen.

Die Sequenzen sind halt bisher nicht als Objekt irgendwo gespeichert in der Rubrik, sondern einfach in ein HTML-Fenster einer Fragebogenseite embedded.
Vielleicht kann man mit HTML auch irgendwie in eine Frage packen, aber welchen Vorteil hätte dies? Dass ich nur 100 erstellen müsste?

Bei loop würden die Fragen aber nicht einzeln codiert werden, oder verstehe ich etwas falsch?

Meine Fragen wären also, falls du Muße und Zeit hast:
- Was soll in den Unterfragebogen? Die Videos oder die immer gleichen Fragen?
- Welche PHP-Codes kommen auf die Seite einer Videosequenz, davor oder danach?
- Welche PHP-Codes kommen auf eine Seite mit den 4 Fragen, davor oder danach?
- Wie wird sichergestellt, dass die sich wiederhlenden Fragen einzeln codiert und dem entspechenden Video zugeordnet werden können?

(In meinem Beispiel meinte ich nicht den Befehl, sondern das "SEITEMITVIDEO_01", sprich, ich muss wissen, was genau nach jedem PHP-Befehl in die Klammer soll, ohne kryptische Akkürzung).

Danke nochmal recht herzlich. Bin echt kurz davor, 400 Fragen zu erstellen
by SoSci Survey (306k points)
> 100 Videosequenzen, die auf einzelnen Seiten erscheinen sollen.

Ich vermute, Sie haben eine Liste der 100 Dateinamen? Die sollten Sie erst einmal in einem Array hinterlegen, also z.B.

$filme = [
  'film001.mp4',
  'film002.mp4',
  ...
  'film100.mp4'
];

Und darunter

$film = loopPage($filme);

Damit bekommen Sie jede Runde einen Dateinamen, und können diesen mittels multiLevelDown('sub', $film) an den untergeordneten Fragebogen (der die Kennung "sub" bekommt) übergeben.

> Bei loop würden die Fragen aber nicht einzeln codiert werden, oder verstehe ich etwas falsch?

Bei einem Multi-Level-Fragebogen erhalten Sie pro Video und Teilnehmer:in eine Datenzeile. Ich wage mal zu behaupten, dass Sie genau das brauchen.

> Welche PHP-Codes kommen auf die Seite einer Videosequenz, davor oder danach?

Sie müssen in dem HTML-Code zum Einbinden eines Videos nur noch den Dateinamen austauschen. Am besten per Platzhalter, s. replace().

> Wie wird sichergestellt, dass die sich wiederhlenden Fragen einzeln codiert und dem entspechenden Video zugeordnet werden können?

Dafür verwenden Sie multiLevelDown().

>  ich muss wissen, was genau nach jedem PHP-Befehl in die Klammer soll, ohne kryptische Akkürzung

Fangen sie mal mit dem PHP-Code für den Hauptfragebogen an, wie ich ihn oben beschrieben habe - und um untergeordneten Fragebogen einfach mal zum anschauen:

$film = multiLevelData();
html('<h1>Film: '.$film.'</h1>');

Und dann starten Sie den übergeordneten Fragebogen mal, und sehen Sie sich die Debug-Information an.
by s219074 (140 points)
So, lieben Dank Ihnen schonmal für die Codes!!

Also bewirkt das MultiLevelDown(), dass das loop quasi immer wieder dieselbe Seite beider Fragebögen öffnet, aber dennoch die Daten jedes Durchgangs einzeln sichert?

Ich habe keine Liste mit den Dateinamen, die Videos sind nur als reiner Embedding-Link in einem Word aufgelistet. Sie sollen ja ohnehin randomisiert angezeigt werden.

Nun bin ich immerhin soweit, dass er mir Beim Start der 2. Haupt-Fragebogenseite das Video und die Fragen im sub-Fragebogen anzeigt. Dazu zeigt er mir folgendes an:

[Information]    Interview gestartet (neue Nummer 416)
[Information]    Der Fragebogen qnr2 im Projekt IAIA wird verwendet
[Verarbeitung]    Erstelle Seite 2 in Fragebogen qnr2
[Information]    loopPage() wiederholt die Seite 2 nun 2 mal, beginnend mit dem Wert film001.mp4
[Information]    Neuer Datensatz erstellt (CASE )
[Information]    Wechsel des Datensatzes: CASE 416 → CASE 417
[Information]    Interview Nummer 417 wird fortgesetzt
[Verarbeitung]    Erstelle Seite 1 in Fragebogen sub
[Inhalt]    Erstelle Frage PS01
[Inhalt]    Erstelle Frage PS11
[Inhalt]    Erstelle Frage PS21

Nach dem von dir vorgeschlagenen Einfügen des Codes in den sub-Fragebogen steht nun über dem Video:

Film: film100.mp4

Was bringt mir denn der fortlaufende Dateiname bzw. "Wert"? Und die Übergabe an den sub-Fragebogen?

Der nächste Schritt müsste ja sein, dass die Videos nun wechseln (am besten zufällig) und die sub-Seite nicht immer wieder dasselbe Video anzeigt.

Wenn ich die ersten 2 Dateinamen in diesem Array spaßeshalber durch meinen kompletten HTML-Code ersetze (mit Video, Übersetzungstext und Formatierung), zeigt er mir tatsächlich das 1. Video an. Mit Klick auf "Weiter" dann auch tatsächlich das 2. Video. Ist aber vermutlich nicht das gedacht Prinzip.

>  Sie müssen in dem HTML-Code zum Einbinden eines Videos nur noch den Dateinamen austauschen. Am besten per Platzhalter, s. replace().

- Bei der Beschreibung haperts bei mir leider auch mit dem Verständnis.
Selbst wenn ich den Dateinamen im HTML-Code austausche, müsste dieser doch von irgendeiner Stelle erkannt und durch einen der 100 Embedding-Links ersetzt werden, und das bei jedem loop durch einen anderen....

Die Dateien sind an keiner Stelle im Fragebogen gespeichert, sie befinden sich auf verschiedenen social media Plattformen und werden live aufgerufen bzw. embedded...

Wie würden Sie denn jetzt weiter vorgehen bzw. codieren?

Danke und Beste Grüße
by SoSci Survey (306k points)
> die Videos sind nur als reiner Embedding-Link in einem Word aufgelistet.

Dann nehmen Sie diese Embedding-Links ... sind genauso gut :)

> Was bringt mir denn der fortlaufende Dateiname bzw. "Wert"? Und die Übergabe an den sub-Fragebogen?

Da übergeben Sie keine fortlaufende Nummer, sondern Ihre Embedding-Links. Und diese verwenden Sie dann im HTML-Code via Platzhalter.

Außerdem sollten Sie den Link und/oder eine Codenummer für das Video als interne Variable speichern, damit es mit der Auswertung klappt.

> durch meinen kompletten HTML-Code ersetze

Ein wenig redundant - ich würde nur den Teil übergeben, der variiert.
by s219074 (140 points)
Danke Ihnen mal wieder.

Un woher weiß der sub-Fragebogen, an welcher Stelle er den Wert/Link einsetzen soll? Mit Hilfe vom Platzhalter?

ich probiers mal mit der replace Beschreibung und antworte hier, wenn ich versage :D

LG
by s219074 (140 points)
Hi,

okay, ich habs mit halbwegs logischem Herumprobieren geschafft, dass die Videos mit replace() angezeigt werden!

Haupt-Fragebogen:

$filme = [
'CPrpn-SAaML',
'Videokennung02',
'Videokennung03'
];

$film = loopPage($filme);

multiLevelDown('sub', $film);

sub-Fragebogen:

$film = multiLevelData();

replace('%film%', $film
);

Jetzt fehlt mir noch die Zufallsauswahl der Codes im Array. Ich habe mir die random()-Funktionen durchgelesen und es scheint mal wieder ist es eine Nummer zu komplex für mich. Habe random_items() versucht und bekomme nichts sinnvolles raus...

Sorry, dass ich Ihnen hier wertvolle Zeit stehle, ich habe nur wie gesagt nicht mal Grundkenntnisse in PHP, habe Zeitdruck und bin deshalb leider auf konkrete Hilfe angewiesen.

Falls Sie vielleicht noch einmal Zeit und Muße hätten, wär ich über die Codes für die Randomisierung und die interne Variable äußerst dankbar, da ich zu wenig davon verstehe und mich ewig in PHP einlesen oder herumprobieren müsste.
Sie sehen die Variablenkennzeichnungen ja in den beiden Code-Fenstern meines Haupt- und sub-Fragebogens.
Dann müsste ich es eigentlich geschafft haben und müsste Ihnen hier nicht länger auf die Nerven gehen :)

Danke erneut vielmals im Voraus!

LG
by SoSci Survey (306k points)
> Jetzt fehlt mir noch die Zufallsauswahl der Codes im Array

Das würde ich empfehlen, dass Sie via Zufallsgenerator erledigen. Legen Sie dort einfach die Namen der Video-Dateien hinein, und verwenden Sie getItems(), um das Array $filme zu definieren. Der Rest bleibt.

$filme = getItems('RG01', 'labels');
by s219074 (140 points)
So, ich habe es nun mit shuffle, registervariable und put hinbekommen! er wiederholt die zufallswerte bis alle durch sind und zeigt mir die entsprechende variable an. Wenn das put() im sub-fragebogen ist, ordnet er mir in der Datenauswertung auch je Antwort den geshuffelten wert zu, den looppage ausgibt!

Damit die mir in den daten in der ansicht aber nicht als langer code angezeigt wird (die übersetzung muss dazu, die variiert nämlich auch), muss ich jetzt vermutlich noch irgendetwas mit replace basteln... bekomme ich aber hin, denke ich.

Danke jedenfalls schonmal herzlich für die Starthilfe! Hat mir wirklich sehr weitergeholfen!
by s219074 (140 points)
Oh, da waren Sie schneller als ich! Danke für die Mühe.

Das ging jetzt scheinbar auch ohne ein neues array zu erstellen. Falls es bei mir doch nicht richtig klappen sollte, versuche ich es mit ihrem getItems()-Vorschlag!

HG
by SoSci Survey (306k points)
array() und shuffle() kann man machen - aber testen sie gründlich, dass es funktioniert. Mit mehr Code kann man schlicht und ergreifend auch mehr falsch machen. Der Zufallsgenerator macht das Leben i.d.R. einfacher.

> Damit die mir in den daten in der ansicht aber nicht als langer code angezeigt wird (die übersetzung muss dazu, die variiert nämlich auch), muss ich jetzt vermutlich noch irgendetwas mit replace basteln...

Sie können die Variable $film einfach per put() in eine interne Variable speichern im untergeordneten Fragebogen:

put('IV01_01', $film);

Einen Code sollten Sie bei Ihrer Lösung generell nicht/nirgends sehen, oder?
by s219074 (140 points)
> array() und shuffle() kann man machen - aber testen sie gründlich, dass es funktioniert. Mit mehr Code kann man schlicht und ergreifend auch mehr falsch machen. Der Zufallsgenerator macht das Leben i.d.R. einfacher.

Danke fpr den Hinweis!

 > put('IV01_01', $film);

Genau, exakt so habe ich es dastehen!

 > Einen Code sollten Sie bei Ihrer Lösung generell nicht/nirgends sehen, oder?

Doch, vielleicht haben wir aneinander vorbei geredet? Der variierende Teil eines jeden HTML-Codes entspricht direkt dem Wert im ersten Array ($filme), welches Sie mir erstellt haben (statt z.B. "film001)". Sie sehen das Array in meiner vorletzten Antwort (erster Wert: 'CPrpn-SAaML'). Dieser wird dann auf dem Sub-Fragebogen mittels Platzhalter %film% an die richtige Stelle des invarianten Teils eingefügt.
In der Datenansicht wird mit aber auch 'CPrpn-SAaML' als Variablenname angezeigt. Wenn dieser jetzt noch die ganze Übersetzung enthält, dann gut Nacht.

Hatten Sie etwas anders gemeint und ich habe es missverstanden?
by SoSci Survey (306k points)
> In der Datenansicht wird mit aber auch 'CPrpn-SAaML' als Variablenname angezeigt. Wenn dieser jetzt noch die ganze Übersetzung enthält, dann gut Nacht.

Ich hatte es so verstanden, dass das in Ihrem Interesse sei. Wenn Sie die Daten mit R auswerten, dann ist es ganz normal, dass nominale Werte durch Strings ausgedrückt werden. Aber ich verstehe Ihre Nachfrage jetzt so, dass Sie lieber einen Zahlencode hätten? Sollen Sie bekommen, aber den müssen Sie im Hauptfragebogen erstmal mit übergeben.

$codes = getItems('RG01');
$filme = getItems('RG01', 'labels');

Im Loop brauchen Sie dann einen Index.

$i = loopPage(count($filme));
$film = $filme[$i];
$code = $codes[$i];

Und das soll dann beides an den untergeordneten Fragebogen. Hier als Array.

multiLevelDown('sub', [$code, $film]);

Und im untergeordneten Fragebogen holen Sie es sich wieder.

$data = multiLevelData();
$code = $data[0];
$film = $data[1];
by s219074 (140 points)
Oh man, danke Ihnen wirklich für die ganze Mühe.

Das Problem ist eher, dass mit der lange String nicht sagt, WELCHES Video der Patient gerade bewertet hat, ausser ich lese jedesmal die Übersetzung und erkenne es wieder. Dann müsste ich pro Person 100 Strings lesen und die Antworten zuordnen.

Da getItems() ja keine Arraywerte nimmt, habe ich angenommen es gehe nicht darum, die Strings vorab irgendwie zu verändern, sondern die Antworten in meinen 4 Fragen abzugreifen und entsprechend zu codieren. Richtig?
Ich habe also 'RG01' durch meine 'PS01' Frage ersetzt.

Ansonsten habe ich angenommen, dass die Codes keine bestehenden ersetzen und alles zusätzlich eingefügt... mit der Sorge, dass $film nun doppelt belegt wird?

Es passiert so ziemlich gar nichts. Alles funktioniert, aber in der Datenansicht steht immer noch der ewige String als Itemname und in der Debug-Information nichts neues. Muss ich die Variablen $data[0]; $data[1]; vielleicht noch irgendwie in die Datenansicht kriegen? Oder was ist das gedachte Outcome Ihrer PHP-Codes?

Ich zeige dir mal beide PHP-Fenster, vielleicht hilft dir das:

HAUPTFRAGEBOGEN:

$filme = [
'film 001 – String aus HTML-Embedding, Formatierung und Übersetzung',
'film002  – String aus HTML-Embedding, Formatierung und Übersetzung',
...
'film100 – String aus HTML-Embedding, Formatierung und Übersetzung'
];


shuffle($filme);
registerVariable($filme);

$film = loopPage($filme);

multiLevelDown('sub', $film);



//NEU: aus Hilfe-Forum für kurzen Code in der Datenansicht

$codes = getItems('PS01');
$filme = getItems('PS01', 'labels');

$i = loopPage(count($filme));
$film = $filme[$i];
$code = $codes[$i];

multiLevelDown('sub', [$code, $film]);


SUB-FRAGEBOGEN:

$film = multiLevelData();

replace('%film%', $film, 'html');

put('IV01_01', $film);


//NEU: aus Hilfe-Forum für kurzen Code in der Datenansicht

$data = multiLevelData();
$code = $data[0];
$film = $data[1];


Natürlich erwarte ich nicht, dass Sie mir den ganzen Code basteln, aber vielleicht hätten Sie noch einmal Hinweise für mich, wo der Fehler liegt oder was noch fehlt?

Danke im Voraus mal wieder und beste Grüße
by SoSci Survey (306k points)
> mit der Sorge, dass $film nun doppelt belegt wird?

Ja, die folgende (alte) Zeile muss natürlich raus:

$film = multiLevelData();

Diese wird durch die neuen drei Zeilen ersetzt. Diese zerlegen das Array mit den zwei Werten einfach nur in zwei Variablen.

> Alles funktioniert, aber in der Datenansicht steht immer noch der ewige String als Itemname

Sie müssen den Code natürlich auch noch speichern. Also zusammen:

$data = multiLevelData();
$code = $data[0];
$film = $data[1];

replace('%film%', $film, 'html');

put('IV01_01', $film);
put('IV01_02', $code);

> dass mit der lange String nicht sagt, WELCHES Video der Patient gerade bewertet hat,

Der Dateiname sollte das eigentlich sehr exakt verraten ... oder was meinen Sie? Also, wenn das steht "film001.mp4", dann war es eben DIESER Film der da bewertet wurde. Ich befürchte, Sie müssen mir das Problem nochmal erklären.
by s219074 (140 points)
edited by s219074
Nein, keinen Zahlencode. einen Dateinamen wie "film001" möchte ich als Ausgabe der Variable IV01.
 
Ich habe ihre obige Antwort...

    "> Was bringt mir denn der fortlaufende Dateiname bzw. "Wert"? Und die Übergabe an den sub-Fragebogen?

    Da übergeben Sie keine fortlaufende Nummer, sondern Ihre Embedding-Links. Und diese verwenden Sie dann im HTML-Code via Platzhalter."

...so verstanden, dass ich statt film001, film002 etc. direkt die langen HTML-Codes  (enthält Embedding-Link+Übersetzung) für jedes Video im Array $filme" aufliste.

Aktuell (ohne Zufallsgenerator) werden die HTML-Codes im Array $filme mit loop geshuffelt und als Variable $film an den sub-Fragebogen übergeben.
Dort wird $film von replace() aufgegriffen und statt eines Platzhalters %film% in ein HTML-Codefenster auf der Fragebogenseite eingefügt. Der HTML-Code selbst, direkt aus dem Array sozusagen.
Das heisst, ich habe überhaupt keinen Dateinamen wie filmXYZ irgendwo stehen.
Dementsprechend wird, wenn ich put() mit $film mache, der ganze jeweilige HTML-Code unter IV01_01 ausgegeben. Er steht dann in der Datenansicht jeweils für eine Zeile mit 4 dazugehörigen Antworten. Hier hätte ich aber gerne 'filmXYZ' ausgegeben.

ich habe überlegt, ob ich doch einen geshuffelten Dateinamen wie "film001" in sub übertragen soll, statt eines HTML-Codes. Und diesen dann im sub-fragebogen irgendwie durch einen HTML-Code austauschen kann. Habe herumprobiert.
Replace will einen text oder eine Variable. Wie sag ich replace, welcher ausgegebene filmXYZ durch welchen HTML Code eretzt werden soll? Dann müsste ich 100 Platzhalter erstellen. Variablen oder arrays können scheinbar nicht als Platzhalter fungieren können... das habe ich ausprobiert.
Mit getItems() kann ich keine Variablenwerte oder Arrays auslesen, nur Fragen.

So wie ich das sehe, müsste ich entweder:
- den HTML-Code übergeben und seine Kennung filmXYZ als Variable abspeichern, oder
- filmXYZ übergeben und im Fragebogenfeld durch den zugehörigen HTML-Code ausauschen.
Ich finde einfach keine Möglichkeit, ein Element als HTML-Code auf der sub-Fragebogenseite anzuzeigen, aber in der Datenansicht wieder als Fimtitel.

Ein weiteres Problem besteht darin, dass mir loop nach wie vor einen randomisiertes Video pro Seite aus dem Array erzeugt, bis zum letzten, aber neuerdings immer eine zusätzlichen Runde mit dem Wert 0. Keine Ahnung wieso. (Dies nur, wenn ich registerVariable($filme) weglasse. Steht es unter shuffle($filme), wiederholt er mir die Seite unendlich oft und die Werte kommen mehrfach vor).


Nun haben Sie mir ja PHP-Codes für eine andere Lösung genannt. Diese enthalten 'RG01'.
Ich habe gestern erst verstanden, dass mit RG eine Frage mit dem Namen Zufallsgenerator gemeint ist. Diese habe ich nun in neuer Rubrik erstellt und in alle Zeilen jeweils einen HTML-Code eingetragen. Sie wurden automatisch nummeriert.
Bei dieser Lösung werden das vorherige Array $filme und shuffle($filme) durch den Zufallsgenerator ersetzt, korrekt? Ich habe beides entfernt.
Außerdem kommt bei Ihnen die interne Variable IV01_02 vor, auch diese habe ich erstellt.

Ich habe vieles ausprobiert, aber mit den von Ihnen vorgeschlagenen Codes....

$codes = getItems('RG01');
$filme = getItems('RG01', 'labels');

$i = loopPage(count($filme));
$film = $filme[$i];
$code = $codes[$i];

multiLevelDown('sub', [$code, $film]);

....wird looppage() jedesmal ignoriert, unabhängig vom PHP-Code im Sub-Fragebogen. Debug sagt dann:

[Verarbeitung]    Erstelle Seite 15 in Fragebogen qnr2
[Warnung]    loopPage(-, -) wird ignoriert

Vielleicht mache ich mit dem Zufallsgenerator noch etwas falsch?? Falls Sie eine Idee haben...

wie kann das denn so kompliziert sein, es ist zum verzeifeln... es kann doch nicht soo ungewöhnlich sein, verschiedene Elemente/Links mit gleichlautenden Fragen zu bewerten..
by SoSci Survey (306k points)
> Der HTML-Code selbst, direkt aus dem Array sozusagen.

Möchten Sie vielleicht einfach mal Ihre richtigen Code und einen Auszug aus dem Inhalt Ihres Zufallsgenerators posten? Ich glaube, es ist einfacher, wenn wir nicht abstrakt um den Code herumreden.

> ....wird looppage() jedesmal ignoriert, unabhängig vom PHP-Code im Sub-Fragebogen. Debug sagt dann:

Hmm, schlecht. Aber ich weiß, woran es liegt. Ich habe schon wieder die Eigenheit von getItems() übersehen, dass es als Schlüssel die Variablennamen verwendet. Neuer Versuch:

$codes = getItems('RG01');
$filme = getItems('RG01', 'labels');

$i = loopPage(count($filme));
$varID = id('RG01', $i + 1);
$film = $filme[$varID];
$code = $codes[$varID];
by s219074 (140 points)
Danke für die Mühe!
Leider wird looppage wird nach wie vor ignoriert.

ZUFALLSGENERATOR:
   –   Rubrik RG, Frage RG01
   –   Fragetyp: Zufallsgenerator
   –   Urne für die Zufallsziehung:
1 = <div style="float:left; width:500px; margin-right:30px"><blockquote class="instagram-media" data-instgrm-permalink="https://www.instagram.com/reel/CPrpn-SAaML/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/reel/CPrpn-SAaML/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/reel/CPrpn-SAaML/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Connor DeWolfe (@connor.dewolfe)</a></p></div></blockquote> <script async src="//www.instagram.com/embed.js"></script></div><div style="float:left; width:500px; margin-right:30px">
2 = film002
3 = film003
4 = film004
5 = film005
   –   Nichts eingetragen im Reiter "Inhalte anzeigen"

FRAGEBOGEN-HAUPTSEITE:
   –   Eine Seite mit einem PHP-Code-Feld, sonst nichts
   –   PHP-Code:
$codes = getItems('RG01');
$filme = getItems('RG01', 'labels');

$i = loopPage(count($filme));
$varID = id('RG01', $i + 1);
$film = $filme[$varID];
$code = $codes[$varID];

multiLevelDown('sub', [$code, $film]);

SUB-FRAGEBOGEN:

   –   Eine Seite mit einem PHP-Code-Fenster, nachfolgend ein HTML-Code-Fenster mit Platzhalter %film%, sowie 3 nachfolgend eingefügte Fragen (PS01, PS11, PS21)
   –   PHP-Code:
$data = multiLevelData();
$code = $data[0];
$film = $data[1];

replace('%film%', $film, 'html');

put('IV01_01', $film);
put('IV01_02', $code);


Thats it...

Beim Start kommen alle möglichen Beschwerden, vermutlich weil loop nicht funktioniert:

   –   Fehler im Fragebogen (Seite 1)
Für die Funktion replace() wurden nicht ausreichend Argumente angegeben, 2 Argumente sind zwingend erforderlich. Weitere Details finden Sie in der Anleitung zur Funktion.
   –   Warnung (Seite 1)
Für den Platzhalter %film% wurde weder ein Eingabefeld mit prepare_input() vorbereitet, noch ein Inhalt mit replace() festgelegt.


DEBUG-INFO:
   –   [Information]    Interview gestartet (neue Nummer 1046)
[Information]    Der Fragebogen qnr2 im Projekt IAIA wird verwendet
[Verarbeitung]    Erstelle Seite 15 in Fragebogen qnr2
[Warnung]    loopPage(0, 0) wird ignoriert
[Information]    Neuer Datensatz erstellt (CASE )
[Information]    Wechsel des Datensatzes: CASE 1046 → CASE 1047
[Information]    Interview Nummer 1047 wird fortgesetzt
[Verarbeitung]    Erstelle Seite 1 in Fragebogen sub
[Information]    Die interne Variable IV01_01 wird mit dem Wert [NULL] belegt.
[Information]    Die interne Variable IV01_02 wird mit dem Wert [NULL] belegt.
[Inhalt]    Erstelle Frage PS01
[Inhalt]    Erstelle Frage PS11
[Inhalt]    Erstelle Frage PS21


Mehr kann ich Ihnen glaube ich nicht sagen.... Screenshots lassen sich hier nicht hochladen, aber ich würde Ihnen mein Passwort geben für das Projekt, falls das helfen würde...

Danke!
by SoSci Survey (306k points)
Danke. Okay, so viel Code soll (darf) nicht in den Zufallsgenerator. Der Code beinhaltet ein komplettes Bild (SVG) im Quellcode.

Sie können entweder versuchen, den variierenden Anteil des Codes zu identifizieren, das könnte z.B. so aussehen:

https://www.instagram.com/reel/CPrpn-SAaML/?utm_source=ig_embed&amp;utm_campaign=loading

Oder sie legen die HTML-Codes in Textbausteinen - entweder im Fragenkatalog oder unter "Textbausteine u. Beschriftungen" ab, und legen dann die Kennungen in den Zufallsgenerator.
by s219074 (140 points)
Ja, die Übersetzung habe ich sogar weggelassen, da das die Forumseite gesprengt hätte.

Das Problem ist, wie gesagt, dass die Übersetzung ebenfalls variabel ist und beides in ein div float eingebettet ist, damit die Übersetzung neben dem Video angezeigt wird. Über das Array und loop funktioniert es ja auch, dass beides korrekt auf der Seite über den 3 Fragen angezeigt wird. Nur über den Zufallsgenerator eben nicht.

Wenn ich den HTML-Code durch "film001" im Zufallsgenerator ersetze, funktioniert loop immer noch nicht, die Ausgabe ist dieselbe wie in meiner vorherigen Antwort. Das Problem kann also nicht an der Code-Länge liegen.

Ich glaube fast, ich muss aufgeben und 400 Fragen erstellen. Oder nutze das Array und filtere die Antworten hinterher. Ich habe nur noch 2 Tage und nicht die Zeit, soviel herumzuprobieren :(

Danke trotzdem für die ganze Mühe!!
by s219074 (140 points)
Ach, ich bin doch doof!
Ich kann doch einfach einen Text vor den Embedding-Link einfügen!

Habe jetzt <!-- FILM001 --> davorgehauen.
So kann ich die Variablen später in Excel gut filtern!

Das mit den zu vielen Wiederholungen war auch mein Fehler, hatte die nachfolgenden Seiten im fragebogen vergessen!

Jetzt klappt es sauber. 5 Videos werden von loop geshuffelt ausgegeben und dargestellt. Als IV01 bekomme ich zwar den ganzen HTML-Code, aber mit <!-- FILM XYZ --> vornedran. Ich denke das reicht mir.

Lieben Dank für die Mühe!
by SoSci Survey (306k points)
Ich befürchte, Sie werden mit diesen langen HTML-Codes das Fassungsvermögen des Zufallsgenerators überschreiten. Die Codes können zusammen maximal 32 kB in Anspruch nehmen. Ich denke, das wird für 100-mal diese große Menge nicht ausreichen.
by s219074 (140 points)
Sie meinen, ich werde auch shuffle() damit überfordern? Ich mache es ja jetzt ohne Zufallsgenerator, nur mit dem Array, weil loop ja sonst nicht geht.
Naja, ich werde es ausprobieren... habe noch nicht alle Codes eingefügt, bin bei 16. Soviel funktionieren schonmal gut..
lg
by SoSci Survey (306k points)
Wenn Sie mit shuffle() arbeiten, haben Sie das Problem an anderer Stelle: registerVariable() unterliegt einem 16 kB Limit.

>  Ich mache es ja jetzt ohne Zufallsgenerator, nur mit dem Array, weil loop ja sonst nicht geht.

Der Loop funktioniert gleichermaßen mit einem shuffle() und einem Zufallsgenerator.

Ich würde daher dringend (!) empfehlen, dass Sie die HTML-Codes entweder in einzelnen Texten ablegen oder nur den variablen Teil variieren.
by s219074 (140 points)
>   Der Loop funktioniert gleichermaßen mit einem shuffle() und einem Zufallsgenerator.

Aber doch scheinbar eben nicht.... wir haben doch jetzt echt viele Varianten probiert und ich hab dir geschickt, was genau drin steht...

Was bleibt mir also anderes übrig?

Wie gesagt, es lag NICHT am langen Code im Zufallsgenerator, den hatte ich versuchsweise durch "film001" ausgetauscht und loop ging dennoch nicht...
by SoSci Survey (306k points)
Wenn man sich mittels valueList() die vom Zufallsgenerator gezogenen Werte ausgeben lässt, dann ist das ein Array, das man genauso wie ein von shuffle() gemischtes Array für ein loopPage() verwenden kann.

> wir haben doch jetzt echt viele Varianten probiert  

Ich bekomme hier immer noch kleine Auszüge daraus, was Sie probieren. Auf dieser Basis kann ich oftmals nicht genau nachvollziehen, wo es hängt. Wir können dieses Details später gerne in einer separaten Frage behandeln. Wenn man zu viele Probleme in eine Frage packt, dann wird es so unübersichtlich, wie hier gerade.

Ich wiederhole aber nochmal den Kern des Problems: Weder der Zufallsgenerator noch registerVariable() wird den kompletten HTML-Code für 100 Video-Einbindungen speichern. Das ist auch technisch nicht sinnvoll.

Was in einer Liste (egal ob in einem Zufallsgenerator oder in einem Array für shuffle()) stehen darf, sind entweder Kennungen für Textbausteine mit dem HTML-Code - oder eleganter - die Dateinamen, die sich in dem HTML-Code tatsächlich ändern.
by s219074 (140 points)
>   Wenn man sich mittels valueList() die vom Zufallsgenerator gezogenen Werte ausgeben lässt, dann ist das ein Array, das man genauso wie ein von shuffle() gemischtes Array für ein loopPage() verwenden kann.
Ich bekomme hier immer noch kleine Auszüge daraus, was Sie probieren. Auf dieser Basis kann ich oftmals nicht genau nachvollziehen, wo es hängt. Wir können dieses Details später gerne in einer separaten Frage behandeln. Wenn man zu viele Probleme in eine Frage packt, dann wird es so unübersichtlich, wie hier gerade.

Danke!
Völlig verständlich. Ich gebe Ihnen auh gerne meine Zugangsdaten.
Dann versuche ich es nochmal mit den Textbausteinen. heute Nacht – wenn ich nichts hinbekomme, werde ich eine separate Frage stellen und muss morgen zumindest parallel mit der 400-Fragen-Lösung beginnen.

   >   Ich wiederhole aber nochmal den Kern des Problems: Weder der Zufallsgenerator noch registerVariable() wird den kompletten HTML-Code für 100 Video-Einbindungen speichern. Das ist auch technisch nicht sinnvoll.

Ich habe den Kern verstanden, allerdings kann ich den Code nicht weiter kürzen, da die Übersetzung eben logischerweise auch variiert. Ich habe schon oben und unten alle div-Befehle in den Fragebogen eingebaut, aber mehr geht nicht, sonst Bräuchte ich 2 Platzhalter (einen für die Kennung und einen für die Übersetzung). Also auch 2 Arrays, shuffels und loops, die dann Werte ausgeben würden, die unabhängig voneinander sind, was ziemlich sinnlos wäre.
by SoSci Survey (306k points)
Ich kümmere mich gleich um die neue Frage.

> sonst Bräuchte ich 2 Platzhalter (einen für die Kennung und einen für die Übersetzung)

Das wäre kein Problem, die könnte man einfach durch Komma getrennt im Zufallsgenerator hinterlegen.

> Ich gebe Ihnen auh gerne meine Zugangsdaten.

Nein, definitiv nicht. Man kann Projekte anderen Nutzer:innen freigeben, das ist kein Problem - aber Passwörter sollten (und dürfen) generell nicht weitergegeben werden.
by s219074 (140 points)
Danke!!

   >   Das wäre kein Problem, die könnte man einfach durch Komma getrennt im Zufallsgenerator hinterlegen.

Aber würden Sie dann nicht unabhängig voneinander geshuffelt werden? Also z.B. Video Nr. 26 mit Übersetzung Nr. 74?

   >   Nein, definitiv nicht. Man kann Projekte anderen Nutzer:innen freigeben, das ist kein Problem - aber Passwörter sollten (und dürfen) generell nicht weitergegeben werden.

Okay, verstanden. Ergibt Sinn. Danke!
by SoSci Survey (306k points)
> Aber würden Sie dann nicht unabhängig voneinander geshuffelt werden?

Wenn Sie Werte wie z.B: die folgenden anlegen...

1 = film001,eng
2 = film002,fre
3 = film003,eng

Dann wird der Zufallsgenerator Zeilen aus dieser Liste ziehen. Und z.B. mit value(..., 'csv') kann man sich dann ein Array wie folgendes zurückgeben lassen: ['film001', 'eng']
by s219074 (140 points)
Danke Ihnen! Das werde ich nutzen, sobald mich looppage() den Zufallsgenerator nutzen lässt.
by s219074 (140 points)
edited by s219074
Setze ich value() unter valueList()...

   $filme = valueList('RG01', NULL, 'label');
   $filme2 = value('RG01', 'csv');

...sagt er, wie Variable gebe es nicht. Genauso, wenn ich stattdessen

   $filme2 = value('$filme', 'csv');

...eingebe

Nur bei Eingabe eines Items wie RG01x01 klappt es, da gibt er mir beide Strings der Zeile dieses Items getrennt im Array aus. Aber so müsste ich ja quasi alle 100 RG01-items auslesen und Variablen erstellen.


Müsste ich die beiden Einheiten des Arrays ['film001', 'eng'] GETRENNT in den Sub übertragen oder IM SUB TRENNEN? Und wie geht das?

Wenn ich das Array übertrage und mit replace() einfüge, fügt er das ganze Array ein und dahinter schreibt er noch [Array]....

Wie erstelle ich Platzhalter aus einem Array an verschiedenen Stellen?
by s219074 (140 points)
Ergänzung: Wenn ich den Zufallsgenerator auf die vorherige Seite packe und dort starte, erkenntn value() auch 'RG01', nicht nur 'RG01x01'. Er gibt dann denselben Wert aus wie ValueList(). So könnte ich mir die 100 value() für jedes Item sparen.

Allerdings ist die Ausgabe dann ein String und kein Array mehr... das 'csv' klappt dann nicht.
by SoSci Survey (306k points)
Stimmt, wenn Sie mehrere Werte abrufen, müssen Sie die Trennung nach Komma manuell vornehmen.

$filme = valueList('RG01', NULL, 'label');
$i = loopPage(count($filme));
$filmInfo = $filme[$i];
// Trennen
$p = strpos($filmInfo, ',');
if ($p) {
  $filmID = substr($filmInfo, 0, $p);
  $lang = substr($filmInfo, $p+1);
} else {
  html('<p>Fehler: '.$filmInfo.'</p>');
}

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

...