Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
de:create:filter-boolean [04.10.2011 21:54] – angelegt admin | de:create:filter-boolean [01.06.2023 20:29] – [Verschachtelte Filter] admin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Mehrere Bedingungen verknüpfen ====== | ====== Mehrere Bedingungen verknüpfen ====== | ||
- | Falls mehrere Bedingungen verknüpft werden | + | Eventuell müssen für einen Filter ([[filters|Filterfragen und Filter]]) |
+ | |||
+ | * Hat der Befragte die Option "eher unwichtig" | ||
+ | * Hat der Befragte angegeben, ein Auto zu besitzen **und** handelt es sich dabei um einen Benziner? | ||
+ | * Nutzt der Befragte **weder** Nachrichten im Fernsehen **noch** in der Zeitung? | ||
+ | * Kauft der Teilnehmer -- laut einer Mehrfachauswahl -- üblicherweise Schokolade **und** Milchprodukte? | ||
+ | |||
+ | Bei der Verknüpfung | ||
+ | |||
+ | * Der UND-Operator ('' | ||
+ | * Der ODER-Operator ('' | ||
+ | * Der NOT-Operator ('' | ||
+ | |||
+ | **Wichtig: | ||
+ | |||
+ | <code php> | ||
+ | (value(' | ||
+ | (value(' | ||
+ | </ | ||
- | **Wichtig: | ||
===== Bedingungen mit UND verknüpfen ===== | ===== Bedingungen mit UND verknüpfen ===== | ||
- | Angenommen, der Benutzer soll -- wenn er einen Computer hat (TF02_01 hat den Wert 2, vgl. Abbildung) und wenn er ein Handy besitzt (TF02_03 hat ebenfalls den Wert 2) gefragt werden, ob er schon einmal Bilder, Klingeltöne, | + | Angenommen, der Benutzer soll gefragt werden, ob er schon einmal Bilder, Klingeltöne, |
{{scr.filters.example_checkbox.png? | {{scr.filters.example_checkbox.png? | ||
- | In diesem Fall müssten folgende beide Bedingungen | + | Die einzelnen |
- | * '' | + | * '' |
- | * '' | + | * '' |
- | Im Filter | + | Zwischen diese beiden Bedingungen |
<code php> | <code php> | ||
- | if ((value(' | + | (value(' |
+ | </ | ||
+ | |||
+ | In diesem Fall wären die inneren Klammern nicht notwendig, weil das '' | ||
+ | |||
+ | Im IF-Filter steht die gesamte Bedingung nochmals in runden Klammern (denn die Bedingung bei der IF-Konstruktion steht immer in Klammern). Ein Filter mit der verknüpften Bedingung sie also aus wie folgt: | ||
+ | |||
+ | <code php> | ||
+ | if ((value(' | ||
question(' | question(' | ||
} | } | ||
</ | </ | ||
- | Zur Sicherheit wurden beide Einzel-Bedingungen hier nochmal in runde Klammern gesetzt. In diesem Fall wäre das nicht notwendig, weil das '' | + | Wenn die Klammer-Struktur |
- | + | ||
- | Wenn die Klammer-Struktur nicht mehr übersichtlich ist, kann man auch problemlos mehrere Zeilen verwenden. Folgender Code hat exakt dieselbe Funktion wie das Beispiel oben: | + | |
<code php> | <code php> | ||
if ( | if ( | ||
- | (value(' | + | (value(' |
(value(' | (value(' | ||
) { | ) { | ||
Zeile 38: | Zeile 61: | ||
Spätestens, | Spätestens, | ||
+ | |||
===== Die eine ODER andere Bedingung erfüllt ===== | ===== Die eine ODER andere Bedingung erfüllt ===== | ||
- | Folgendes Beispiel zeigt eine Überprüfung, | + | Folgendes Beispiel zeigt eine Überprüfung, |
<code php> | <code php> | ||
if ( | if ( | ||
- | (value(' | + | (value(' |
- | (value(' | + | (value(' |
- | (value(' | + | (value(' |
- | (value(' | + | |
) { | ) { | ||
- | html('< | + | |
+ | | ||
} else { | } else { | ||
- | // Keins ausgewählt: | + | // Keines |
goToPage(' | goToPage(' | ||
} | } | ||
Zeile 58: | Zeile 82: | ||
**Tipp:** Drei oder vier Items einer Frage kann man so noch abfragen. Aber sobald es mehr Items werden, gibt es eine elegantere Lösung. Diese wird vorgestellt in dem Kapitel [[filter-itemcount|Prüfen, | **Tipp:** Drei oder vier Items einer Frage kann man so noch abfragen. Aber sobald es mehr Items werden, gibt es eine elegantere Lösung. Diese wird vorgestellt in dem Kapitel [[filter-itemcount|Prüfen, | ||
+ | |||
===== Prüfen ob eine Auswahl den einen ODER anderen Wert hat ===== | ===== Prüfen ob eine Auswahl den einen ODER anderen Wert hat ===== | ||
Zeile 66: | Zeile 91: | ||
<code php> | <code php> | ||
- | if ((value(' | + | if ((value(' |
question(' | question(' | ||
} | } | ||
Zeile 75: | Zeile 100: | ||
<code php> | <code php> | ||
if ( | if ( | ||
- | (value(' | + | (value(' |
- | (value(' | + | (value(' |
(value(' | (value(' | ||
) { | ) { | ||
Zeile 87: | Zeile 112: | ||
<code php> | <code php> | ||
$a1 = value(' | $a1 = value(' | ||
- | if (($a1 == 1) or ($a1 == 2) or ($a1 == 3)) { | + | if (($a1 == 1) || ($a1 == 2) || ($a1 == 3)) { |
question(' | question(' | ||
} | } | ||
</ | </ | ||
- | Eine Alternative für eine größere Anzahl von Werten bieten Arrays in Verbindung mit der Funktion '' | + | Eine Alternative für eine größere Anzahl von Werten bieten |
<code php> | <code php> | ||
if (in_array(value(' | if (in_array(value(' | ||
question(' | question(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Prüfung, ob eine Bedingung NICHT zutrifft ===== | ||
+ | |||
+ | Mit dem NICHT-Operator ('' | ||
+ | |||
+ | <code php> | ||
+ | if (not (value(' | ||
+ | goToPage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Allerdings wird für diesen Filter wohl eher der Ungleich-Vergleichsoperator ('' | ||
+ | |||
+ | <code php> | ||
+ | if (value(' | ||
+ | goToPage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Und wenn man weiß, dass '' | ||
+ | |||
+ | <code php> | ||
+ | if (value(' | ||
+ | goToPage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Es gibt aber durchaus Fälle, in denen der NICHT-Operator hilfreich ist. In Anlehnung an das ODER-Beispiel von oben: Wenn der Befragte weder PC noch DSL-Anschluss oder Handy besitzt, soll er direkt ans Ende des Fragebogens geschickt werden: | ||
+ | |||
+ | <code php> | ||
+ | if (!( | ||
+ | (value(' | ||
+ | (value(' | ||
+ | (value(' | ||
+ | )) { | ||
+ | goToPage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Der einzige Unterschied zum obigen ODER-Beispiel ist das Ausrufezeichen ('' | ||
+ | |||
+ | Übrigens gibt es auch für das Rechnen mit dem NICHT-Operator ein mathematisches Distributivgesetz. Der folgende Filter hat denselben Effekt wie der vorhergehende: | ||
+ | |||
+ | <code php> | ||
+ | if ( | ||
+ | (value(' | ||
+ | (value(' | ||
+ | (value(' | ||
+ | ) { | ||
+ | goToPage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Und natürlich kann man auch einfach den '' | ||
+ | |||
+ | <code php> | ||
+ | if ( | ||
+ | (value(' | ||
+ | (value(' | ||
+ | (value(' | ||
+ | ) { | ||
+ | // Nichts tun | ||
+ | } else { | ||
+ | goToPage(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Verschachtelte Filter ===== | ||
+ | |||
+ | Mituner ist es sinnvoll, einen Filter in einen anderen Filter zu setzen. Nehmen wir die Situation, dass abhängig von der Antwort auf FF01 entweder die Frage FF02 oder FF03 angezeigt wurde. Und nun soll in Abhängigkeit von diesen beiden Fragen ein weiterer Filter anschließen. Die einzelnen Filter wären einfach. | ||
+ | |||
+ | <code php> | ||
+ | if (value(' | ||
+ | replace(' | ||
+ | } else { | ||
+ | replace(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code php> | ||
+ | if (value(' | ||
+ | replace(' | ||
+ | } else { | ||
+ | replace(' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Aber nun soll nur einer dieser beiden Filter aktiv werden ... abhängig davon, welchen Wert FF01 hatte. Dafür werden diese Filter in einen weiteren Filter " | ||
+ | |||
+ | <code php> | ||
+ | if (value(' | ||
+ | // Filter für FF02 | ||
+ | if (value(' | ||
+ | replace(' | ||
+ | } else { | ||
+ | replace(' | ||
+ | } | ||
+ | } else { | ||
+ | // Filter für FF03 | ||
+ | if (value(' | ||
+ | replace(' | ||
+ | } else { | ||
+ | replace(' | ||
+ | } | ||
} | } | ||
</ | </ |