Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


registerVariable()

void registerVariable(string VariablenName)

Eine PHP-Variable ist normalerweise nur innerhalb eines PHP-Code Elements gültig. Mittels registerVariable() kann man eine Variable für alle folgenden PHP-Code Elemente verfügbar machen.

  • VariablenName
    Ein String (in Anführungszeichen) mit dem Namen der Variable. Es darf nicht die Variable selbst sein (z.B. $item), ein String mit dem Namen der Variable (z.B. 'item').

Verwendung mit isset()

Viele Beispiele in der Anleitung verwenden registerVariable() zusammen mit der PHP-Funktion isset(), um eine mehrfache Randomisierung bzw. Rotation zu vermeiden – zum Beispiel wenn die Fragebogen-Seite nach dem „Weiter“ erneut angezeigt wird, weil noch Antworten fehlen.

Die Funktion isset() ermittelt, ob eine PHP-Variable bereits vorher definiert wurde. Damit kann man vermeiden, dass z.B. eine Liste neu erstellt und gemischt wird, wenn sie schon vorher definiert wurde.

Wichtig: Der Inhalt der Variable wird nicht im Datensatz gespeichert und die PHP-Variable wird beim Erreichen der „letzten Seite“ (Abschluss des Fragebogens) gelöscht. Falls der Inhalt der Variable (z.B. die Reihenfolge einer Rotation) für die Auswertung relevant ist, muss man sie mittels put() explizit im Datensatz speichern.

Wichtig: Bei der Verwendung von registerVariable() muss man sich bewusst sein, dass die registrierte Variable für das komplette restliche Interview definiert ist. Wenn man also die Kombination registerVariable() und isset() nochmal an anderer Stelle verwenden möchte, sollte man dafür tunlicht eine andere Bezeichnung für die Variable wählen. Zum Beispiel $itemsAB im ersten PHP-Code und $itemsBC im zweiten.

Hier ein Beispiel, bei welchem die Items einer Frage gezielt gemischt werden:

// Die Klammer wird nur ausgeführt,
// wenn die Variable $items noch nicht definiert wurde,
// also beim ersten Aufuruf dieser Seite - und auch nur dann,
// wenn früher im Fragebogen kein registerVariable($items) steht.
if (!isset($items)) {
  // Hier werden nun die Items der Frage AB01 abgerufen und gemischt
  $items = getItems('AB01');
  shuffle($items);
  // Und hier wird dafür gesorgt, dass SoSci Survey die Variable $items
  // nicht sofort wieder vergisst, sondern sie für das komplette
  // restliche Interview (inkl. eines eventuellen
  // erneuten Aufrufs der aktuellen Seite) merkt.
  registerVariable($items);
}
// Hier wird der Inhalt der Variable nun verwendet
question('AB01', $items);

Die Variable $items ist fortan auf jeder weiteren Seite im Fragebogen in jedem PHP-Code definiert. Würde man denselben PHP-Code auf einer weiteren Seite platzieren, dann würde isset($items) das Ergebnis true (trifft zu) liefern, die Verneinung mit dem Ausrufezeichen !isset($items) entsprechend false (trifft nicht zu). Und damit würde die Klammer nicht mehr ausgeführt, selbst wenn die Variable $items beim zweiten Mal ganz anders verwendet werden sollte.

Dieses Beispiel ist dem Kapitel Rotation entnommen. Dort finden Sie auch Beispiele zu weiteren Einsatzmöglichkeiten.

Items einer Frage ziehen

Im folgenden Beispiel werden auf Seite 1 zufällig drei Items aus den Items der Frage „AB01“ gezogen. Anschließend soll die Frage mit diesen drei Items gestellt werden – und auf einer späteren Seite soll Frage „AB02“ mit eben denselben drei Items abgefragt werden.

// Drei Items aus Frage AB01 ziehen
$itemliste = random_items('AB01', 3);
// Die entsprechende Frage anzeigen
question('AB01', $itemliste);
// Die Variable $itemliste registrieren
registerVariable($itemliste);

Weil die Variable $itemliste für weitere Fragebogen-Seiten verfügbar gemacht wurde, können Sie in einem anderen PHP-Code Element einfach mit $itemliste weiterarbeiten.

question('AB02', $itemliste);

Teilergebnisse/Filter merken

Auf Seite 4 im Fragebogen soll anhand eines recht komplexen Filters ermittelt werden, ob der Teilnehmer in Gruppe 1 (Neukunden oder Kunden in Anbahnung eines Geschäfts) oder Gruppe 2 (Altkunden) der Untersuchung fällt. Aufgrund dieser Einordnung sollen später im Interview unterschiedliche Fragen angezeigt werden.

if (
  (value('BB01') == 1) or
  ((value('BB02') < 3) and (value('BB04') == 2)
) {
  $gruppe = 1;
} else {
  $gruppe = 2;
}
registerVariable($gruppe);

Auch hier kann später einfach mit der Variable $gruppe gearbeitet werden.

if ($gruppe == 1) {
  question('BX01');
} else {
  question('BX02');
}
if ($gruppe == 1) {
  question('BX04', '1-3,5,6');
} else {
  question('BX04', '1-5,7,9');
}

Tipp: Weil die Gruppe auch in der Auswertung relevant sein werden, wäre hier die Verwendung von put() und auf späteren Seiten value() u.U. zielführender.

Rotation von Inhalten

4 Fragen („AB01“ bis „AB04“) sollen zusammen mit 4 zugehörigen Textbausteinen („text1“ bis „text4“) angezeigt werden – aber in zufälliger Reihenfolge. Dafür wird auf Seite 1 des Fragebogens ein Array gemischt und via registerVariable() für die folgenden Seiten verfügbar gemacht. Details s. Kapitel Rotation.

$fragen = array(
  array('AB01', 'text1'),
  array('AB02', 'text2'),
  array('AB03', 'text3'),
  array('AB04', 'text4')
);
shuffle($fragen);
registerVariable('fragen');

Auf den folgenden 4 Seiten wird jeweils die Frage und der Textbaustein angezeigt, die an der entsprechenden Position im Array steht.

text($fragen[0][1]);
question($fragen[0][0]);
text($fragen[1][1]);
question($fragen[1][0]);
text($fragen[2][1]);
question($fragen[2][0]);
text($fragen[3][1]);
question($fragen[3][0]);

Mehr dazu s. Rotation.

de/create/functions/registervariable.1599123013.txt.gz · Zuletzt geändert: 03.09.2020 10:50 von experi.tu-darmstadt
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki