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

Auf Wunsch als separate Frage:

Bei mir scheint getItems() Zufallsgenerator-Fragen oder Textbausteine nicht als ein für looppage() brauchbares Array auszugeben.

Könnte es daran liegen, dass getItems() diese irgendwie nicht als mehrere Werte erkennt?

Rubrik Zufallsgeneratorvariable RG enthält bei mir 1 Frage mit der Kennung RG01. In dieser befinden sich im Feld "Zettel (Inhalte)" bisher nur 5 Zeilen:
1 = film001
2 = film002
3 = film003
4 = film004
5 = film005
Bei Ziehung steht "1 Zettel" und "Gleichverteilte Ziehung".
Bei "Inhalte" ist kein HTML-Code eingetragen.

Bei...

$filme = getItems('RG01');
$film = loopPage($filme);

...ist die Debug-Ausgabe immer folgende:

[Warnung] loopPage(-, -) wird ignoriert

An einen Unter-Fragebogen wird jedesmal der Wert 0 ausgegeben.

Ausprobiert habe ich:
- Zahl der Ziehungen erhöht
- $filme = getItems('RG01', 'label');
- $filme = getItems('RG01', 'all');
- $filme = getItems('RG01', 'html');

Da für mein Projekt Datenmengen anfallen, die Textbausteine nötig machen, habe ich auch folgendes versucht:

Textbaustein: Fragekennung 'TB01', gleicher Inhalt wie in RG01

  • $filme = getTextElement('TB01');
  • $filme = getTextElement('TB01', 'html');

...wieder wird looppage() ignoriert.

Was wiederum funktioniert, sind getQuestions('RG' oder 'TB') und getVariables ('RG01', 'RG02')
Hier gibt looppage() mir aber nur die Kennungen aus, was mir wenig hilft.
Auch mit getItems() oder getTextElement() darunter wirds nichts.

Hat jemand eine Idee, wo mein Fehler liegten könnte?

1 Answer

+1 vote
by SoSci Survey (305k points)
edited by SoSci Survey

Bei Ziehung steht "1 Zettel" und "Gleichverteilte Ziehung".

Sie möchten, wenn ich es korrekt verstanden habe, nicht 1 Zettel ziehen, sondern sehr viele. Tragen Sie hier z.B. einmal 5 ein, damit alle 5 Zettel in zufälliger Reihenfolge gezogen werden. Oder 3, wenn Sie exemplarisch 3 Filme ziehen möchten.

$filme = getItems('RG01');

Ersetzen Sie das bitte durch

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

Ergänzen Sie unter dieser Zeile ein debug(), um zu sehen, was Sie haben.

debug($filme);

$film = loopPage($filme);

Für den Fall, dass loopPage() dann immer noch nicht richtig mag, ergänzen Sie noch ein array_values(), welches die Array-Schlüssel entfernt.

$film = loopPage(array_values($filme));

Und passend zum gezogenen Film könnte man dann z.B. einen Textbaustein anzeigen.

text($film);
by s219074 (140 points)
Hi und danke für die Antwort.

Geht leider alles nicht. Die 5 Ziehungen sind eingestellt, das loopPage(array_values($filme)) auch. Ich habe auch alles mit 'labels' und 'all' als Antwortoptionen versucht.

Interessanterweise sagt debug():
Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 5, 2, 4, 3, 1
debug()    Inhalt: Array (ohne Elemente)
[Warnung]    loopPage(-, -) wird ignoriert

...getItems bekommt also keine Elemente ins Array, weder von RG, noch vom Textbaustein, wie vermutet.

In der Beschreibung steht, dass getItems() eigentlich für bereits beantwortet Fragen gemacht ist. Dies ist ja beim Zufallsgenerator oder Textbaustein nicht gegeben. Vielleicht liegt hier ein Problem?

Ich habe mal versucht, den Zufallsgenerator als Baustein in den Fragebogen einzufügen, eine Seite davor. Ändert nichts, ich bekomme dieselbe Ausgabe.

Ich habe getItems(), getTextelements() und getValues() durchprobiert. Jeweils mit Zufallsgenerator RG01, Textbausteinen TB01 und einer offenen Texteingabe TO01). Jeweils sind 5 Zeilen bzw. Items drin. Looppage() wird in jedem der Fälle ignoriert, bis auf einen Fall:

Das einzige, was "geht", ist getItems() von einer offenen Texteingabe.
Hier zeigt debug:

debug()    Inhalt: 0:1, 1:2, 2:3, 3:4, 4:5
[Information]    loopPage() wiederholt die Seite 15 nun 2 mal, beginnend mit dem Wert 1

Nur hier scheint looppage() ein für sich brauchbares Array zu bekommen.

Ich habe alle möglichen Ausgabeformate probiert, die Werte entsprechen immer nur den Kennungen, nie dem Inhalt oder looppage() wird wieder ignoriert.
by s219074 (140 points)
Ich habe noch etwas gefunden:

Bei getTextElement('RG01') holt er mir folgenden String:

Inhalt: $filme = <div class="SoSciDebug textelement">⏎ <div class="container">⏎ <div class="ballot"></div>⏎ <div class="box">⏎ <div class="label">TB01</div>⏎ </div>⏎ </div>⏎ </div>⏎ <div class="s2readable spacing">⏎ <p>FILM001</p>⏎ </div> (string)

Kann ihn aber nicht umsetzen. Looppage() wird wieder ignoriert oder, wenn ich looppage() mit array_values benutzen, wird ein Fehler im Fragebogen angezeigt:

array_values(): Argument #1 ($array) must be of type array, string given
by SoSci Survey (305k points)
> Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 5, 2, 4, 3, 1
> debug()    Inhalt: Array (ohne Elemente)

Starten wir doch mal hier. Ich befürchte, ich habe oben zwei Befehle verwechselt, es muss nicht getItems() heißen, sondern valueList().

$filme = valueList('RG01', 'label');

Ich korrigiere das oben gleich noch.
by s219074 (140 points)
Danke für die Mühe!

mit valueList() klappt es leider auch nicht. Bei Zufallsgenerator oder Textbaustein zeigt debug erneut an:

debug()    Inhalt: Array (ohne Elemente)
[Warnung]    loopPage(-, -) wird ignoriert

Es tut mir leid, dass mein Problem so hartnäckig zu sein scheint.

In der Beschreibung zu valueList() ist auch wieder von "Antworten eines Teilnehmers" die Rede, die ausgegeben werden... die wir ja nicht haben....
by SoSci Survey (305k points)
Die Ziehungen eines Zufallsgenerators sind - technisch gesehen - genauso zu behandeln wie die Antworten von Teilnehmern. Das passt ;)

Nur zur Sicherheit: Sie haben oben auf der Seite den Zugfallsgenerator, der heißt RG01, und darunter den PHP-Code

$filme = valueList('RG01', 'label');
debug($filme);

Soweit korrekt?
by s219074 (140 points)
Ah, verstehe. Gut.

Ja, soweit korrekt.
by SoSci Survey (305k points)
Vielleicht möchten Sie Zufallsgenerator plus die beiden Zeilen PHP-Code erst einmal in einen separaten Frgebogen packen, damit wir Interaktionen mit anderen Elementen ausschließen können.

Die Debug-Information lautet dann immer noch wie folgt?

> Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 5, 2, 4, 3, 1
> debug()    Inhalt: Array (ohne Elemente)
by s219074 (140 points)
Ja, tut sie leider.
Neuer Fragebogen, eine Seite, oben RG und unten das PHP-Feld.

Nur, wenn ich 'label' weglasse, funktioniert looppage():

debug()    Inhalt: RG01x01:5, RG01x02:1, RG01x03:2, RG01x04:3, RG01x05:4
[Information]    loopPage() wiederholt die Seite 1 nun 5 mal, beginnend mit dem Wert 5

...allerdings nur mit den gezogenen Zahlen, keinen Strings

Auch mit getTextElements('RG01') beschwert er sich darüber, dass kein Text existiert...

Evtl. könnten Sie es ja mal bei sich versuchen? Ob es da mit einem Zufallsgenerator funktioniert?
by SoSci Survey (305k points)
Ja, da war noch ein kleiner Fehler im Aufruf von valueList() ... und zwar kommt das 'label' erst als dritter Parameter. Allerdings sollte SoSci Survey eine Fehlermeldung anzeigen, wenn man das falsch im Code verwendet:

> Die Angabe label in der Funktion valueList() ist keine gültige Liste oder Angabe von Item-Kennungen.

Fehermeldungen sollte man bei der Fehlersuche immer als erstes behandeln. Dann erst weitere Probleme.

Korrekt also:

$filme = valueList('RG01', NULL, 'label');
by s219074 (140 points)
Die Fehlermeldung kommt nicht, sonst hätte ich Sie mitgeteilt...
Er zeigt direkt die 3 Fragen an und im Debug die schon genannte Info, ohne weitere Fehlermendungen...

Ich probiere es! Danke!
by s219074 (140 points)
UNglaublich, es geht!! Die Strings im Zufallsgenerator werden angegeben! Tausend Dank!

Nun muss ich es aber auch mit Textbausteinen hinbekommen, oder? Weil der RG nur 32kb hat?
by s219074 (140 points)
....und mit denen klappt es natürlich nicht... wär auch zu schön gewesen :D
by SoSci Survey (305k points)
Ja, entweder viele Textbausteine ... oder schauen, was sich im HTML-Code ändert, und gezielt das im Zufallsgenerator hinterlegen.
by s219074 (140 points)
Okay. Ich werde beide Varianten versuchen.

Eine Idee, wehalb es bei Textbausteinen nicht klappt?
Ich meine, mit $filme = valueList('RG01', NULL, 'label'); ??
by SoSci Survey (305k points)
Wenn Sie die HTML-Codes in Textbausteinen ablegen, dann ziehen Sie nur deren Kennungen via Zufallsgenerator - und dann verwenden Sie text($kennung), um den Textbaustein anzuzeigen.
by s219074 (140 points)
>  ... um den Textbaustein anzuzeigen.

Ich möchte die Textbausteine ja nicht anzeigen, sondern in eine Variable bekommen, die mit multiLevelDown() übertragen und im Sub-fragebogen per replace() an die richtige Stelle verfrachtet wird.

  >  ...ziehen Sie nur deren Kennungen via Zufallsgenerator - und dann verwenden Sie text($kennung)...

Was schreibe ich dann in die Zeilen des Zufallsgenerators? Woher weiß dieser, welche Kennung welchem Textbaustein entspricht?
An welche Stelle kommt der PHP-Code text($kennung) auf die Fragebogenseite?

"Randomisierung von Texten habe ich gelesen", aber auch hier steht nicht, was im Falle der Einbindung von Textbausteinen in den Generator kommt. Hier ist nur ein Beispiel mit if/else, was mir wenig hilft.

Über eine kleine Beschreibung der Schritte in Reihenfolge wäre ich sehr dankbar.

Nur aus Interesse: Hier widmen sich gewiss mehrere Mitarbeitende des Hilfe-Teams einem Thema, oder? Das würde erklären, weshalb ich das Gefühl habe, mich oft wiederholen zu müssen. No offense! Nur verständnishalber.
by s219074 (140 points)
Ergänzung:
Irgendwie spinnt SoSciSurvey heute..

Er zeigt mir bei verschiedenen Befehlen den Fehler an, dass 'RG01', nicht existieren würde, die vorher definitiv funktioniert haben.

Ich habe mich nun nach einer Beschreibung in einer anderen Frage im Forum gerichtet:
Der Zufallsgenerator enthält In Zeile 1 und 2 die Werte TB01 und TB02 (das sind die Textbausteine).

Mit dem PHP-Code
$filme = value('RG01', 'TB01');
text($filme);

Bekomme ich ganze 4 Fehlerzeilen raus:

Die Frage RG01 unterstützt keine individuelle Steuerung der enthaltenen Items/Optionen. Der Parameter none wird ignoriert.

You have specified an invalid value (TB01) for parameter 2 in function value(). This parameter is ignored.

Die Variable RG01 gibt es in diesem Projekt nicht (siehe Variablen-Übersicht). Daher kann kein Antwort-Wert dafür ermittelt werden.

Im Befragungsprojekt existiert kein Text mit der Kennung

Ich mache seit 2 Wochen damit rum, langsam aber sicher verzweifle ich...
by SoSci Survey (305k points)
> Er zeigt mir bei verschiedenen Befehlen den Fehler an, dass 'RG01', nicht existieren würde, die vorher definitiv funktioniert haben.

Wenn Sie mehrere Zttel pro Interview ziehen (das haben Sie ja geändert), dann heißt die Variable nicht mehr RG01, sondern RG01x01, RG01x02, u.s.w.

$filme = value('RG01');

kann also nicht funktionieren. Was Sie mit value() abrufen könnten, wäre der erste gezogene Film:

$filme = value('RG01x01');

Oder eben die komplette Liste mittels valueList(...)

Als zweiten Parameter erwartet value() einen Formatcode - da hat "TB01" sicherlich noch nie funktioniert, vgl. https://www.soscisurvey.de/help/doku.php/de:create:functions:value
by s219074 (140 points)
reshown by s219074
Okay, danke!

Das heißt, ich brauche gar keinen text($kennung)-Befehl, richtig?

Was genau muss denn im Zufallsgenerator stehen, damit dieser auf den Textbaustein zugreift?

Bei
1 = TB01
2 = TB01

Kommt als Fehlermeldung: "Im Befragungsprojekt existiert kein Text mit der Kennung 1".

Nur mit dem "if/else"-Befehl aus der Randomisierung-Anleitung geht es. Dann müsste ich aber 100 davon erstellen.

Danke im Voraus!
by SoSci Survey (305k points)
Es ist wie bei den Filmnamen ... Sie müssen im PHP-Code das 'label' auslesen, nicht den Code.

$filme = valueList('RG01', NULL, 'label');
$textID = loopPage($filme);
text($textID);

Oder eben multiLevelDown($textID) und dann im untergeordneten Fragebogen den text()-Befehl verwenden.
by s219074 (140 points)
Okay, danke!

Was genau muss denn im Zufallsgenerator stehen, damit dieser auf den Textbaustein zugreift?

Bei
1 = TB01
2 = TB01

Kommt als Fehlermeldung: "Im Befragungsprojekt existiert kein Text mit der Kennung 1".

Nur mit dem "if/else"-Befehl aus der Randomisierung-Anleitung geht es. Dann müsste ich aber 100 davon erstellen.

Danke im Voraus!
by SoSci Survey (305k points)
Der Zufallsgenerator greift nur auf die Codes zu, also im Prinzip das, was Sie schon haben...

1 = TB01
2 = TB02
3 = TB03
...

> Im Befragungsprojekt existiert kein Text mit der Kennung 1

Welcher PHP-Code genau erzeugt denn diese Meldung?

Haben sie mit debug() mal nachgesehen, was in den Variablen jeweils gespeichert ist, also z.B. ein debug($filme)?
by s219074 (140 points)
>  Welcher PHP-Code genau erzeugt denn diese Meldung?

$filme = value('RG01x01');
text($filme);

  >  Haben sie mit debug() mal nachgesehen, was in den Variablen jeweils gespeichert ist, also z.B. ein debug($filme)?

Debug-Information für $filme:
$filme = 2 (string)

Aber das Problem ist ja an sich obsolet, wenn ich ohnehin mit valueList() arbeiten muss.

  >  Es ist wie bei den Filmnamen ... Sie müssen im PHP-Code das 'label' auslesen, nicht den Code.
$filme = valueList('RG01', NULL, 'label');
$textID = loopPage($filme);
text($textID);

Klappt! Da gibt er mir mit text() bei jedem loop einen andere Text aus!

Bleibt dennoch das Problem, dass er mir mit text() den Text im sub-Fragebogen anzeigt... obwohl er nur im Platzhalter sein soll.
Wie kombiniere ich den Text in den Textbausteinen mit der ausgebenen Kennung 'TB0x', ohne text() zu benutzen?
by s219074 (140 points)
Okay, ich glaube ich habe es mit...
$filmcode = getTextElement($film);
...geschafft.

Er gibt mir den HTML-Codes sauber zufällig in den Platzhalter über die Fragen.

put('IV01_01', $film); baut mir schön eine Variable mit der dazugehörigen Textbaustein-Kennung.

Ich scheine kein registerVariable() zu brauchen.

Durch die Textbausteine sollte die Speicherkapazität vom Zufallsgenerator locker ausreichen.

Korrekt? Oder habe ich Ihrer Meinung nach noch etwas übersehen?
by SoSci Survey (305k points)
Ich würde den HTML-Code direkt ausgeben lassen mittels text($film), aber Sie können im Prinzip auch den Umweg über getTextelement() gehen. Ansonsten: Prüfen Sie nochmal, ob Sie mit den erhobenen Daten korrekt arbeiten können - wenn das gut aussieht, dann sollte alles passen.
by s219074 (140 points)
Danke.

Stimmt! Das getTextElements() war nur um den Textbaustein nicht anzuzeigen, sondern durch den Platzhalter einzufügen.
Aber hab gerade gerafft, dass ich mir den Platzhalter ja gänzlich schenken kann, wenn der ganze Code hineinpasst.
i
Mit Platzhalter meckert er ohnehin über eine 2kb Grenze, ohne geht es sauber!

Wieso komplex, wenn es auch einfach geht.. :D

Danke für den Hinweis, ich prüfe!

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

...