Actions

Expression Manager/sl: Difference between revisions

From LimeSurvey Manual

m (Text replacement - "Expression Manager" to "ExpressionScript")
(Updating to match new version of source page)
 
(193 intermediate revisions by 3 users not shown)
Line 8: Line 8:
==Pregled==
==Pregled==


When customizing your surveys, you typically need a way to specify the following:
Ko prilagajate svoje ankete, običajno potrebujete način, da določite naslednje:
#'''Navigation/Branching''' - letting a subject's answers change the order in which questions are asked
#'''Navigacija/Razvejanje''' – dovolite, da odgovori subjekta spremenijo vrstni red zastavljenih vprašanj
#'''Tailoring/Piping''' - how to phrase the question (such as referring to prior answers, or conjugating sentences based upon the number or gender of your subjects), or how to generate custom reports (like assessment scores or tailored advice).
#''''Tailoring/ Piping''' - kako ubesediti vprašanje (na primer sklicevanje na prejšnje odgovore ali spreganje stavkov glede na število ali spol vaših predmetov) ali kako ustvariti poročila po meri (kot so rezultati ocenjevanja ali prilagojeni nasveti).
#'''Validation''' - ensuring that answers pass certain criteria, like min and max values, or matching an input pattern
#''''Validacija''' – zagotavljanje, da odgovori izpolnjujejo določena merila, kot so najmanjše in največje vrednosti, ali ujemanje z vnosnim vzorcem


ExpressionScript (EM) provides an intuitive way to specifying the logic for each of those features.  Nearly anything that you can write as a standard mathematical equation is a valid expression, even if you are calling functions.  EM currently provides access to 70 functions, and can be easily extended to support more.  It also lets you access your variables using human-readable variable names (rather than SGQA names).
Expression Manager (EM) ponuja intuitiven način za določanje logike za vsako od teh funkcij. Skoraj vse, kar lahko zapišete kot standardno matematično enačbo, je veljaven izraz, tudi če kličete funkcije. EM trenutno omogoča dostop do 80 funkcij in ga je mogoče enostavno razširiti, da podpira več. Omogoča tudi dostop do vaših spremenljivk z uporabo človeku berljivih imen spremenljivk (namesto imen SGQA).


The following sections show the main places where ExpressionScript is used
Naslednji razdelki prikazujejo glavna mesta, kjer se uporablja Expression Manager


==Relevance (Controlling Navigation/Branching)==
==Ustreznost (nadzor navigacije/razvejanje)==


Some surveys use "Goto Logic", such that if you answer Question 1 with option C, then jump to Question 5. This approach is very limiting, since is hard to validate, and easily breaks if you have to re-order questions.  EM uses a Boolean relevance equation to specify all of the conditions under which a question might be valid.  If the question is relevant, then the question is asked, otherwise it is Not Applicable, and the value NULL is stored in the database.  This is similar to what can be done via the Conditions editor, but EM lets you easily specify much more complex and powerful criteria (and lets you use the variable name rather than SGQA naming).
Nekatere ankete uporabljajo "Pojdi na logiko", tako da če odgovorite na vprašanje 1 z možnostjo C, potem skočite na vprašanje 5. Ta pristop je zelo omejujoč, saj ga je težko preveriti in se zlahka prekine, ko morate preurediti vprašanja. EM uporablja Boolovo relevantno enačbo za določanje vseh pogojev, pod katerimi bi lahko bilo vprašanje veljavno. Če je vprašanje relevantno, se prikaže vprašanje, sicer ni uporabno, vrednost NULL pa je shranjena v bazi podatkov. To je podobno tistemu, kar lahko storite prek urejevalnika pogojev, vendar vam EM omogoča enostavno določanje veliko bolj zapletenih in zmogljivih kriterijev (in omogoča uporabo imena spremenljivke namesto poimenovanja SGQA).


This image shows one way to review the relevance logic for a survey.  It computes Body Mass Index.  The relevance equation is shown in square bracket right after the variable name (which is in green).  So, the relevance of weight, weight_units, height and height_units are all 1, meaning that those questions are always asked.  However, the relevance for BMI is {!is_empty(height) and !is_empty(weight)}, which means that BMI will only be computed if the subject enters a value for both height and weight (thereby avoiding the risk of a divide by zero error).  Also, the Report question is only shown if the subject answers all four main questions (height, height_units, weight, weight_units).
Ta slika prikazuje en način za pregled logike ustreznosti za anketo. Izračunava indeks telesne mase. Enačba ustreznosti je prikazana v oglatem oklepaju takoj za imenom spremenljivke (ki je zelene barve). Torej je ustreznost teže, teže_enot, višine in višine enot 1, kar pomeni, da so ta vprašanja vedno postavljena. Vendar pa je relevantnost za ITM {!is_empty(height) in !is_empty(weight)}, kar pomeni, da bo ITM izračunan samo, če subjekt vnese vrednost za višino in težo (s čimer se izognemo tveganju deljenja z ničlo napaka). Poleg tega je vprašanje Poročilo prikazano samo, če preiskovanec odgovori na vsa štiri glavna vprašanja (višina, višina_enote, teža, teže_enote).


[[File:tutorial1.jpg]]
[[Datoteka:tutorial1.jpg]]


Relevance is shown and editable in the following places:
Ustreznost je prikazana in jo je mogoče urejati na naslednjih mestih:


===Viewing / Editing Question-Level Relevance===
===Ogled/urejanje Ustreznost na ravni vprašanja===


This equation computes the Body Mass Index (BMI).  It is only asked if the person first enters their height and weight.
Ta enačba izračuna indeks telesne mase (ITM). Vpraša se le, ali oseba najprej vnese svojo višino in težo.


[[File:tutorial2.jpg]]
[[Datoteka:tutorial2.jpg]]


This is the edit screen for the BMI question.
To je zaslon za urejanje vprašanja ITM.


[[File:tutorial3.jpg]]
[[Datoteka:tutorial3.jpg]]


Note that you do not use the curly braces when you enter a Relevance Equation.
Upoštevajte, da ne uporabite zavitih oklepajev, ko vnašate enačbo ustreznosti.


===Viewing / Editing Group-Level Relevance===
===Ogled/urejanje ustreznosti na ravni skupine===


This is a sample census survey.  The first page asks how many people live with you and stores that in the "cohabs" variable.  This page is only shown if you have more than one cohabitant (so it is shown for the second person cohabitating with you), and also only shows if you specified how Person One is related to you (p1_rel).
To je vzorčna popisna raziskava. Prva stran vpraša, koliko ljudi živi z vami, in to shrani v spremenljivko "cohabs". Ta stran je prikazana samo, če imate več kot enega sostanovalca (torej je prikazana za drugo osebo, ki živi z vami), prav tako pa je prikazana samo, če ste navedli, kako je oseba ena povezana z vami (p1_rel).


[[File:tutorial4.jpg]]
[[Datoteka:tutorial4.jpg]]


As you can see, the group also has question-level relevance criteria, such that each question only appears once you have answered the question before it (e.g. {!is_empty(p1_sex)}).  EM combines the Group and Question-level relevance for you.  Questions in a group are only asked  if the group as a whole is relevant.  Then, only the subset of questions within the group that are relevant are asked.
Kot lahko vidite, ima skupina tudi kriterije ustreznosti na ravni vprašanja, tako da se vsako vprašanje pojavi šele, ko odgovorite na vprašanje pred njim (npr. {!is_empty(p1_sex)}). EM za vas združuje ustreznost na ravni skupine in vprašanja. Vprašanja v skupini se zastavljajo samo, če je pomembna skupina kot celota. Nato se zastavi samo podmnožica vprašanj znotraj skupine, ki so pomembna.


Here is the screen for editing the group-level relevance for that question:
Tukaj je zaslon za urejanje ustreznosti na ravni skupine za to vprašanje:


[[File:tutorial5.jpg]]
[[Datoteka:tutorial5.jpg]]


Note that you do not use the curly braces when you enter a Relevance Equation.
Upoštevajte, da ne uporabite zavitih oklepajev, ko vnašate enačbo ustreznosti.


==Tailoring/Piping==
==Krojenje/Piping==


EM lets you easily do simple and complex conditional tailoring of your questions.  Sometimes you just need simple substitution, like saying, "You said you purchased <nowiki>[</nowiki>Product].  What did you like best about it?".  Sometimes you need conditional substitution like "<nowiki>[</nowiki>Mr./Mrs.] <nowiki>[</nowiki>LastName], would you be willing to complete our survey?".  In this case,  you want to use Mr. or Mrs. based upon the person's gender.  Other times you need even more complex substitution (such as based upon a mathematical computation).  EM supports each of these types of tailoring/piping.
EM vam omogoča preprosto in zapleteno pogojno prilagajanje vaših vprašanj. Včasih potrebujete preprosto zamenjavo, na primer: "Rekel si, da si kupil<nowiki> [</nowiki> Izdelek]. Kaj vam je bilo pri tem najbolj všeč?". Včasih potrebujete pogojno zamenjavo, kot je "<nowiki> [</nowiki> Gospod Gospa.]<nowiki> [</nowiki> Priimek], bi bili pripravljeni izpolniti našo anketo?". V tem primeru želite uporabiti g. ali gospa glede na spol osebe. Drugič potrebujete še bolj zapleteno zamenjavo (na primer na podlagi matematičnega izračuna) EM podpira vsako od teh vrst krojenja/cevovodov.


===Conditional Equations===
===Pogojne enačbe===


The Body Mass Index example shows the ability to compute a person's BMI, even while letting them enter their height in weight in metric or non-metric units.
Primer indeksa telesne mase prikazuje zmožnost izračuna ITM osebe, čeprav ji dovolite, da svojo višino in težo vnese v metričnih ali nemetričnih enotah.


[[File:tailoring7.jpg]]
[[Datoteka:tailoring7.jpg]]


Here weight_kg is {if(weight_units == 'kg', weight, weight * .453592)}.  This if() function means that if the subject entered the weight using kilograms, use that value, otherwise multiple the entered value (which was in pounds) by .453592 to convert it to kilograms.  The height_m variable uses a similar approach to compute the person's height in meters, even if he entered his height in inches.
Tu je weight_kg {if(weight_units == 'kg', teža, teža * .453592)}. Ta funkcija if() pomeni, da če je subjekt vnesel težo v kilogramih, uporabite to vrednost, sicer pomnožite vneseno vrednost (ki je bila v funtih) z 0,453592, da jo pretvorite v kilograme. Spremenljivka height_m uporablja podoben pristop za izračun višine osebe v metrih, tudi če je vnesla svojo višino v palcih.


BMI computes the weight formula as {weight_kg / (height_m * height_m)}.
ITM izračuna formulo teže kot {teža_kg / (višina_m * višina_m)}.


Lastly, the report conditionally tailors the message for the subject, telling him what he entered. ("You said you are 2 meters tall and weight 70 kg.")
Nazadnje poročilo pogojno prilagodi sporočilo subjektu in mu pove, kaj je vnesel. ("Rekli ste, da ste visoki 2 metra in težki 70 kg.")


Although not well shown in the above image, weight_status uses nested if() statements to categorize the person as underweight to severely obese.  You can see its equation in the Show Logic View
Čeprav na zgornji sliki ni dobro prikazano, weight_status uporablja ugnezdene stavke if(), da kategorizira osebo kot prenizko telesno težo do zelo debelo. Njegovo enačbo si lahko ogledate v prikazu Logic View


[[File:tailoring8.jpg]]
[[Datoteka:tailoring8.jpg]]


From the edit window for this question, you can see two things:
V oknu za urejanje tega vprašanja lahko vidite dve stvari:
#Tailoring must surround expressions with Curly Braces
#Tailoring mora obdati izraze z zavitimi oklepaji
#Expressions can span multiple lines if, as in this case, you want to make it easier to read the nested conditional logic.
#Izrazi lahko zajemajo več vrstic, če želite, kot v tem primeru, olajšati branje ugnezdena pogojna logika.


[[File:tailoring9.jpg]]
[[Datoteka:tailoring9.jpg]]


===Tailored Questions, Answers, and Reports===
===Prilagojena vprašanja, odgovori in poročila===


<div class="simplebox">Note: Dynamic tailoring may not work if answer options are made available in select boxes on the same question page. This results from the fact that tailoring inserts a <nowiki><span></nowiki> tag which is not valid inside select options.</div>
<div class="simplebox">Opomba: dinamično prilagajanje morda ne bo delovalo, če so možnosti odgovora na voljo v izbirnih poljih na isti strani z vprašanji. To je posledica dejstva, da krojaški vstavki a<nowiki></nowiki> <span>oznaka, ki ni veljavna znotraj izbranih možnosti.</span>


This example shows the BMI report.
Ta primer prikazuje poročilo ITM.


[[File:tailoring10.jpg]]
[[Datoteka:tailoring10.jpg]]


Here is the edit window for the same question.
Tukaj je okno za urejanje istega vprašanja.


[[File:tailoring11.jpg]]
[[Datoteka:tailoring11.jpg]]


As you can see, anything in curly braces is treated as an expression, so is syntax-highlighted (color coded) in the prior image.  If you had any typos (such as misspelled or undefined variable names or functions), EM would show an error, such as this, showing that height_unit is an undefined variable name (it is actually height_units), and rnd() is an undefined function (the proper function name is round()).  In both cases, the errors are surrounded by a red box to make it easier to spot and fix them.
Kot lahko vidite, je vse v zavitih oklepajih obravnavano kot izraz, zato je sintaksa poudarjena (barvno kodirana) na prejšnji sliki. Če bi imeli kakršne koli tipkarske napake (na primer napačno črkovana ali nedefinirana imena ali funkcije spremenljivk), bi EM prikazal napako, kot je ta, ki kaže, da je height_unit nedefinirano ime spremenljivke (pravzaprav je height_units), rnd() pa je nedefinirana funkcija (pravilno ime funkcije je round()). V obeh primerih so napake obdane z rdečim poljem, da jih lažje opazimo in odpravimo.


[[File:tailoring12.jpg]]
[[Datoteka:tailoring12.jpg]]


You can also see that you can quickly create complex reports, such as a table of entered values or tailored advice.
Opazite lahko tudi, da lahko hitro ustvarite kompleksna poročila, kot je tabela vnesenih vrednosti ali prilagojeni nasveti.


Please remember that all tailoring must surround expressions with Curly Braces, so that LimeSurvey knows which parts of the question are free text and which should be parsed through ExpressionScript.
Zapomnite si, da mora vsako prilagajanje obdati izraze z zavitimi oklepaji, tako da LimeSurvey ve, kateri deli vprašanja so prosto besedilo in katere je treba razčleniti z upraviteljem izrazov.


==Validation==
==Potrjevanje==


EM controls how most of the advanced question options work.  These control aspects like min/max numbers of answers; min/max individual values; min/max sum values; and checking that entered values match specified string patterns.  You continue to enter those advanced question options as usual.  However, now any value in one of those fields is considered an expression, so you can have min/max criteria with complex conditional relationships to other questions.
EM nadzoruje, kako deluje večina naprednih možnosti vprašanj. Ti nadzorni vidiki, kot so najmanjše/največje število odgovorov; min/max posamezne vrednosti; min/max vsota vrednosti; in preverjanje, ali se vnesene vrednosti ujemajo z določenimi vzorci nizov. Še naprej vnašate te napredne možnosti vprašanj kot običajno. Vendar pa se zdaj katera koli vrednost v enem od teh polj šteje za izraz, tako da lahko imate minimalna/največja merila s kompleksnimi pogojnimi razmerji do drugih vprašanj.


In all of these cases, since the advanced question option is always considered an expression, you do not use curly braces when specifying it.
V vseh teh primerih, ker se možnost naprednega vprašanja vedno obravnava kot izraz, pri določanju ne uporabite zavitih oklepajev.


The [[ExpressionScript Sample Surveys|Sample Surveys]] pages shows many working examples of using expressions for validations.
Strani [[Vzorčne ankete upravitelja izrazov|Vzorčne ankete]] prikazujejo številne delujoče primere uporabe izrazov za validacije.


=Introduction=
=Uvod=


LimeSurvey 1.92 and later uses the new ExpressionScript (EM) module which will let LimeSurvey support more complex branching, assessments, validation, and tailoring.  It will replace how LimeSurvey manages Replacements, Conditions, and Assessments on the back-end.  It will also speed up processing considerably since it eliminates most run-time database reads.  EM was developed by Dr. Thomas White (TMSWhite).
LimeSurvey uporablja nov modul Expression Manager (EM), ki bo LimeSurveyju omogočil podporo za bolj zapleteno razvejanje, ocenjevanje, validacijo in prilagajanje. Zamenjal bo način, kako LimeSurvey upravlja zamenjave, pogoje in ocene v ozadju. Prav tako bo znatno pospešil obdelavo, saj odpravlja večino branj baze podatkov med izvajanjem. EM je razvil dr. Thomas White (TMSWhite).


This wiki page is the definitive reference for ExpressionScript syntax and functionality.
Ta stran wiki je dokončna referenca za sintakso in funkcionalnost Expression Managerja.


==Key Definitions==
==Ključne definicije==
#'''Expression''':  Anything surrounded by curly braces
#''Izraz''': Vse, kar je obdano z zavitimi oklepaji
#*As long as there is no white space immediately after the opening brace or before the closing curly brace
#*Dokler ni praznega prostora takoj za začetnim oklepajem ali pred zaključnim zavitim oklepajem
#*The contents of Expressions are evaluted by EM, so they can contain mathematical formulas, functions, and complex string and date processing.
#*Vsebino izrazov ovrednoti EM, tako da lahko vsebujejo matematične formule, funkcije ter zapleteno obdelavo nizov in datumov.
#'''Tailoring''': Sometimes called "piping", this is the process of conditionally modifying text
#''''Krojenje'''': včasih imenovano "cevovod", je to proces pogojno spreminjanje besedila
#*You have access to all 'replacement fields', TOKENs, and INSERTANS values
#*Imate dostop do vseh 'nadomestnih polj', podatkov o udeležencih in podatkov o odzivih.
#*You also have easier access to questions, answers, and their properties.
#*Imate tudi lažji dostop do vprašanj, odgovorov in njihovih lastnosti.
#'''Relevance''' Equation:  A new question attribute controlling question visiblity
#'' Enačba 'Relevantnost''': nov atribut vprašanja, ki nadzoruje vidnost vprašanja
#*If there is a relevance equation, then the question is only shown if the relevance evaluates to true.
#*Če obstaja enačba relevantnosti, potem je vprašanje prikazano le, če je relevantnost ocenjena kot res.
#*Internally, all array_filter and array_filter_exclude commands become subquestion-level relevance
#*Interno, vsi array_filter in array_filter_exclude ukazi postanejo relevantni na ravni podvprašanja
#'''Equation''' Question Type:  A new question type that saves calculations or reports to the database
#'''Equation''' Vrsta vprašanja: Nova vrsta vprašanja, ki shranjuje izračune ali poročila v zbirko podatkov
#*It is like a Boilerplate question, but its contents are saved to the database even if you set "Always Hide this Question"
#*Je kot vprašanje Boilerplate, vendar se njegova vsebina shrani v baze podatkov, tudi če nastavite "Vedno skrij to vprašanje"
#'''SGQA''':  This is how variables are named in LimeSurvey <= 1.91+
#'''Koda vprašanja''': To je prednostno ime spremenljivke za EM
#*Stands for Survey-Group-Question-Answer
#*To je lahko opisno ime, ki označuje namen vprašanja , kar olajša branje zapletene logike
#*SGQA variable names look like 123X5X382X971, and may have subquestion suffixes.
#*Veljavne kode vprašanj se NE smejo začeti s številko, zato, ko uporabljate kodo vprašanja za oštevilčenje vprašanj, preprosto uporabite »q1«, »q1a« ali »g1q2«.! N!#*To je tisto, kar trenutno postane ime spremenljivke, če izvozite podatke v SPSS ali R, tako da, če izvajate statistično analizo, ste to verjetno že naredili edinstveno.
#*These variable names are specific to the underlying S/Q/G/A database codes, so often need to be changed
#'''Question Code''':  This is the preferred variable name for EM
#*This can be a descriptive name indicating the purpose of the question, making it easier to read complex logic
#*Although not required to be unique in <= 1.91+, it must be unique if you want to use EM
#*Valid question codes should NOT start with a number, so when using the question code to number your questions, simply use "q1", or "q1a" or "g1q2".
#*This is what currently becomes the variable name if you export data to SPSS or R, so if you do statistical analysis, you probably already made this unique.


==Do I have to use EM?==
==Ali moram uporabiti EM?==


The short answer is No (but also yes).
Kratek odgovor je Ne (a tudi da).


EM is fully backwards-compatible with existing surveys.  So, if you are happy to use Conditions and Assessments in the style that LimeSurvey used in versions <= 1.91+, you can continue to do so.
EM je popolnoma nazaj združljiv z obstoječimi raziskavami. Če torej z veseljem uporabljate pogoje in ocene v slogu, ki ga je LimeSurvey uporabljal v različicah <= 1.91+, lahko to počnete še naprej.


However, EM completely replaces how LimeSurvey internally deals with Conditions.  Although you can still use the Conditions Editor to create and manage conditions, LimeSurvey 1.92 will convert those to the equivalent Relevance Equations.  As part of the upgrade, LimeSurvey 1.92 will auto-convert all existing Conditions to Relevance Equations.
Vendar pa EM popolnoma nadomesti način, na katerega LimeSurvey interno obravnava pogoje. Čeprav lahko še vedno uporabljate urejevalnik pogojev za ustvarjanje in upravljanje pogojev, jih bo LimeSurvey 1.92 pretvoril v enakovredne enačbe ustreznosti. Kot del nadgradnje bo LimeSurvey 1.92 samodejno pretvoril vse obstoječe pogoje v enačbe ustreznosti.


This should give you the best of both worlds - you can continue using LimeSurvey as you are used to, but will see the Relevance Equation equivalent so you can gradually migrate to Relevance Equations directly whenever you see fit.
To bi vam moralo dati najboljše iz obeh svetov – lahko nadaljujete z uporabo LimeSurvey, kot ste navajeni, vendar boste videli ekvivalent Relevance Equation, tako da lahko postopoma preidete neposredno na Relevance Equations, kadar koli se vam zdi primerno.


==Can I mix use of Conditions and Relevance?==
==Ali lahko kombiniram uporabo pogojev in ustreznosti?==


Yes. You can use the Conditions editor for some questions and the Relevance editor for others.  Conditions are auto-converted to Relevance when you save the question.
ja Za nekatera vprašanja lahko uporabite urejevalnik pogojev, za druga pa urejevalnik ustreznosti. Ko shranite vprašanje, se pogoji samodejno pretvorijo v ustreznost.


Note, we assume that if you are using the Conditions editor, that you want those Conditions to over-write any manually entered Relevance equation.  So, if you have existing Conditions and want to manually edit the Relevance, please delete the Conditions for that question first.  Specifically, copy the generated relevance equation to a text editor, use the Conditions menu to delete all of the conditions for that question (which will also delete the relevance), then edit the question and paste the generated relevance equation from the text editor back into the relevance field for that question (and save the question).  If there is enough demand for deleting conditions without deleting the generated relevance equation, we could add a bulk conversion process.
Upoštevajte, da predpostavljamo, da če uporabljate urejevalnik pogojev, želite, da ti pogoji prepišejo vsako ročno vneseno enačbo ustreznosti. Torej, če imate obstoječe pogoje in želite ročno urediti ustreznost, najprej izbrišite pogoje za to vprašanje. Natančneje, kopirajte ustvarjeno enačbo ustreznosti v urejevalnik besedil, uporabite meni Pogoji, da izbrišete vse pogoje za to vprašanje (s čimer boste izbrisali tudi ustreznost), nato uredite vprašanje in prilepite ustvarjeno enačbo ustreznosti iz urejevalnika besedil nazaj v polje ustreznosti za to vprašanje (in shranite vprašanje). Če obstaja dovolj povpraševanja po izbrisu pogojev brez izbrisa ustvarjene enačbe pomembnosti, lahko dodamo postopek množične pretvorbe.


==How should I choose between Conditions and Relevance?==
==Kako naj izbiram med pogoji in ustreznostjo?==


Here is a list of pros and cons of each style:
Tukaj je seznam prednosti in slabosti vsakega sloga:


{| class="wikitable"
{| class="wikitable"
!Style!!Pros!!Cons
!Slog!!Prednosti!!Slabosti
|-
|-
|Conditions||1. Nice GUI for creating simple conditions <br/>2. GUI well documented and understood by support team||1. Only supports simple comparisons and does not AND/OR conditions well <br/>2. Cascading conditions work erratically <br/>3. Slow - database intensive, so can slow down long surveys <br/>4. Some reported problems with re-loading conditions <br/>5. GUI doesn't scale well when there are dozens, hundreds, or thousands of questions <br/>6. May be slow to convert paper-based surveys since must use SGQA names <br/>7. Often need a programmer to custom-code logic needed for complex branching
|Pogoji||1. Lep GUI za ustvarjanje preprostih pogojev<br/> 2. GUI je dobro dokumentiran in ga razume skupina za podporo||1. Podpira samo preproste primerjave in ne pogojuje dobro IN/ALI<br/> 2. Kaskadni pogoji delujejo neredno<br/> 3. Počasen - podatkovna baza je intenzivna, zato lahko upočasni dolge ankete<br/> 4. Nekateri so poročali o težavah s pogoji ponovnega nalaganja<br/> 5. GUI se ne prilagaja dobro, če je vprašanj na desetine, stotine ali tisoče<br/> 6. Pretvorba anket v papirni obliki je morda počasna, ker morajo uporabljati imena SGQA<br/> 7. Pogosto potrebujejo programerja za kodiranje logike po meri, potrebne za kompleksno razvejanje
|-
|-
|Relevance||1. Supports very complex logic, including 80+ functions and math/string operators <br/>2. Perfect support for cascading logic <br/>3. Fast - no extra database calls, so supports 1000+ question surveys <br/>4. No problems with re-loading logic since does not require SGQA codes <br/>5. Syntax-highlighting scales to 1000+ question surveys <br/>6. Easy and fast to use for groups wanting to computerize existing paper-based suveys.  <br/>7. Easily supports semi-structured interviews and epidemiological surveys without needing a programmers||1. No GUI for simple conditions - use syntax-highlighting instead <br/>2. New, so support teams have not mastered EM yet.
|Ustreznost||1. Podpira zelo kompleksno logiko, vključno z 80+ funkcijami in matematičnimi/niznimi operaterji<br/> 2. Popolna podpora za kaskadno logiko<br/> 3. Hitro – brez dodatnih klicev baze podatkov, zato podpira 1000+ anket z vprašanji<br/> 4. Brez težav z logiko ponovnega nalaganja, saj ne zahteva kod SGQA<br/> 5. Označevanje sintakse meri na 1000+ anket z vprašanji<br/> 6. Enostaven in hiter za uporabo za skupine, ki želijo računalniško obdelati obstoječe papirnate ankete.<br/> 7. Preprosto podpira polstrukturirane intervjuje in epidemiološke raziskave, ne da bi potrebovali programerje||1. Brez GUI za preproste pogoje - namesto tega uporabite označevanje sintakse<br/> 2. Novo, zato podporne ekipe še niso obvladale EM.
|}
|}


The bottom is that if you are happy with how LimeSurvey 1.91+ works, there is no reason to change what you do.
Bistvo je, da če ste zadovoljni z delovanjem LimeSurvey 1.91+, ni razloga, da bi spreminjali svoje početje.


==What are some other benefits of using EM?==
==Katere so druge prednosti uporabe EM?==


Here are some of the other reasons you might want to use EM.
Tukaj je nekaj drugih razlogov, zakaj bi morda želeli uporabiti EM.
#Calculations - you can create any calculation you can think of:
#Izračuni - ustvarite lahko poljuben izračun, ki vam pade na pamet:
#*You have access to all common mathematical operators and functions
#*Imate dostop do vseh običajnih matematičnih operatorjev in funkcij
#*You have access to 70+ mathematical, date, and string processing functions
#* Imate dostop do 70+ matematičnih funkcij, funkcij za obdelavo datumov in nizov
#*It is fairly easy for developers to add new functions if users need them
#*Razvijalcem je dokaj enostavno dodati nove funkcije, če jih uporabniki potrebujejo
#Storing Calculations to Database
#Shranjevanje izračunov v zbirko podatkov
#*You can now compute simple and complex calculations and/or scale scores AND have them stored in the database without needing JavaScript.
#*Zdaj lahko izračunate preproste in zapletene izračune in/ali ocene na lestvici IN jih shranite v zbirko podatkov, ne da bi potrebovali JavaScript.
#*You use the Equation question type to accomplish this.
#*Za to uporabite vrsto vprašanja Equation.
#Assessments
#Ocene
#*You can now create assessments or scale scores from any question type, not just the subset that used to be supported
#*Zdaj lahko ustvarite ocene ali lestvice rezultatov iz katere koli vrste vprašanja, ne samo iz podmnožice, ki je bila prej podprta
#*You can use Tailoring to show running or total assessment scores anywhere needed - even on the same page
#*Uporabite lahko prilagoditev za prikaz tekočih ali skupnih rezultatov ocenjevanja, kjer koli je to potrebno – tudi na isti strani
#*You have more control over the reports generated based upon those assessment scores
#*Imate več nadzora nad poročili, ustvarjenimi na podlagi teh ocenjevalnih rezultatov
#*You can store assessment scores in the database without needing JavaScript
#*Ocenjevalne rezultate lahko shranite v bazo podatkov, ne da bi potrebovali JavaScript
#*You can hide assessment scores without needing JavaScript or CSS
#*Ocenjevalne rezultate lahko skrijete, ne da bi potrebovali JavaScript ali CSS
#Replacement Fields
#Nadomestna polja
#*Instead of using {INSERTANS:SGQA}, you can just use the Question Code - this makes it easier to read and validate.
# *Namesto uporabe {INSERTANS:SGQA} lahko uporabite samo kodo vprašanja - to olajša branje in preverjanje.
#*This also avoids the common need to edit questions to change the SGQA code to make everything work.
#*S tem se tudi izognete pogosti potrebi po urejanju vprašanj za spreminjanje kode SGQA, da bo vse delovalo .
#Tailoring - you can conditionally display text based upon other values
#Prilagoditev - besedilo lahko pogojno prikažete na podlagi drugih vrednosti
#*Use the appropriate title for a subject, like (e.g. "Hello <nowiki>[</nowiki>Mr./Mrs.] Smith")
#*Uporabite ustrezen naslov za zadevo, na primer (npr. »Pozdravljeni<nowiki> [</nowiki> G./Mrs.] Smith")
#*Output gramatically correct sentences based when singular/plural matter:  (e.g. "You have 1 child" vs. "You have 2 children")
#*Izdaj slovnično pravilne stavke, ki temeljijo na ednini/množini: (npr. "Imaš 1 otroka" proti "Imaš 2 otroka")
#*Appropriately conjugate verbs and decline nouns based upon subject's gender and plurality.
#*Ustrezno spreženi glagoli in zaklanjajte samostalnike glede na spol in množino osebka.
#New Variable Attributes - you can access the following to do your tailoring:
#Novi atributi spremenljivk - za prilagajanje lahko dostopate do naslednjega:
#* (no suffix) -  an alias for qcode.code
#* (brez pripone) - vzdevek za qcode.code
#*.code - the selected response code for the question if it is relevant (otherwise blank), or the text value if it is not a coded question
#*. koda - izbrana koda odgovora na vprašanje, če je relevantno (sicer prazno), ali besedilna vrednost, če ni kodirano vprašanje
#*.NAOK - same as .code, but can be part of calculations or lists even if irrelevant
#*.NAOK - enako kot .code, vendar je lahko del izračunov ali seznamov tudi če je nepomembno
#*.value - the assessment value for the question if it is relevant (otherwise blank), or the text value if it is not a coded question
#*.value - vrednost ocene za vprašanje, če je relevantno (sicer prazno), ali besedilna vrednost, če ni kodirano vprašanje -- na voljo, če so ocene omogočene za anketo, sicer vedno zero
#*.valueNAOK - same as .value, but can be part of calculations or lists even if irrelevant
#*.valueNAOK - enako kot .value, vendar je lahko del izračunov ali seznamov, tudi če ni pomembno
#*.shown - the answer as displayed to the user (this is what {INSERTANS:xxx}  does)
#*.shown - odgovor, kot je prikazan uporabniku (to počne {INSERTANS:xxx} )
#*.qid - the question ID
#*.qid - ID vprašanja
#*.gid - the group ID
#*.gid - ID skupine
#*.sgqa - the SGQA value for the question
#*.sgqa - vrednost SGQA za vprašanje
#*.jsName - the correct javascript variable name for the question, regardless whether defined on this page or another
#*.jsName - pravilno ime spremenljivke javascript za vprašanje, ne glede na to, ali je definirano na tej ali drugi strani
#*.qseq - the question sequence (starting from 0)
#*.qseq - zaporedje vprašanj (začenši z 0)
#*.gseq - the group sequence (starting from 0)
#*.gseq - zaporedje skupine (začenši z 0)
#*.mandatory - whether the question is mandatory (Y/N)
#*. obvezno - ali je vprašanje obvezno (Y/N)
#*.question - the text of the question
#*.question - besedilo vprašanja
#*.relevance - the relevance equation for the question
#*.relevance - enačba relevantnosti za vprašanje
#*.grelevance - the relevance equation for the group
#*.grelevance - enačba relevantnosti za skupino
#*.relevanceStatus - whether or not the question is currently relevant (1 if true, 0 if false)
#*.relevanceStatus - ali je vprašanje trenutno relevantno ali ne (logična vrednost (lahko se razlikuje v PHP in JS))
#*.type - the question type (the one character code)
#*.type - vrsta vprašanja (koda z enim znakom)!N !#Dinamične spremembe na strani
#Dynamic On-Page Changes
#*Vsa ustreznost, izračuni in prilagajanje delujejo dinamično na strani – tako spremembe vrednosti takoj posodobijo stran
#*All Relevance, Calculation, and Tailoring works dynamically on a page - so changes in values instantly update the page
#*Vaša vprašanja se torej dinamično pojavljajo/izginejo glede na to, ali so ustrezni
#*So, you have questions dynamically appear/disappear based upon whether they are relevant
#*Vprašanja so tudi dinamično prilagojena glede na odgovore na strani, tako da lahko vidite tekoče vsote, prilagojene stavke in prilagojena poročila.
#*Questions are also dynamically tailored based upon responses on the page, so you can see running totals, tailored sentences and customized reports.
#Nov zaslon za vnos podatkov
#New Data Entry Screen
#*Poleg uporabe trenutnem sistemu za vnos podatkov, lahko preprosto uporabite Survey-All-In-One.
#*In addition to using the current data-entry system, you can just use Survey-All-In-One.
#*To podpira ustreznost in prilagajanje na strani, tako da lahko uradniki za vnos podatkov hitro pregledajo in bodo morali vnesti samo ustrezne odzive
#*This supports the on-page relevance and tailoring, so data entry clerks can quickly tab through and they will only have to enter the relevant responses
#*To je lahko ključnega pomena, če mora vaša oseba za vnos podatkov videti prilagoditev, ki je tudi dinamična.
#*This can be critical if your data entry person needs to see the tailoring, which is also dynamic.
#Odpravlja potrebo po večini JavaScripta po meri
#Eliminates the need for most custom JavaScript
#*EM enostavno podpira zapletene izračune, točkovanje , prilagajanje in pogojna logika.
#*EM easily supports complicated computations, scoring, tailoring and conditional logic.
#*Nekatere stvari bodo še vedno potrebovale JavaScript (na primer postavitve po meri in pogojno skrivanje podelementov vprašanj), vendar lahko vaš JavaScript uporablja funkcije EM, tako da lahko dostopate do vprašanj z njihovo Qcode namesto SGQA in dostop do katere koli zgoraj navedene lastnosti vprašanja.
#*Some things will still need JavaScript (like custom layouts and conditionally hiding question sub-elements), but your JavaScript can use the EM functions so that you can access questions by their Qcode instead of SGQA, and access any of the question properties listed above.


==What are some other helpful new features enabled by EM?==
==Katere so druge uporabne nove funkcije, ki jih omogoča EM?==


Regardless of whether you continue to use the Conditions Editor or manually compose Relevance Equations, you get these additional benefits:
Ne glede na to, ali boste še naprej uporabljali urejevalnik pogojev ali ročno sestavljali enačbe ustreznosti, boste prejeli te dodatne prednosti:
#You can create more complex validation criteria
#Ustvarite lahko bolj zapletena merila za preverjanje veljavnosti
#*All of the advanced question attribute (like max_answers, min_num_value_n, max_num_value) can use Expressions.  So, you min/max criteria can be easily adjusted based upon prior responses, even if they are on the same page.
#*Vse napredne atribute vprašanj (kot so max_answers, min_num_value_n, max_num_value) lahko uporablja izraze. Tako je mogoče vaša najmanjša/največja merila preprosto prilagoditi glede na predhodne odgovore, tudi če so na isti strani.
#*EM also handles all regular-expression-based validation, so you can robustly combine preg and equation-based question attributes.
#*EM obravnava tudi vsa preverjanja, ki temeljijo na regularnih izrazih, tako da lahko robustno kombinirate preg in enačbo- na podlagi atributov vprašanj.
#Easy Re-ordering (or deleting) of Questions and Groups
#Enostavno prerazvrščanje (ali brisanje) vprašanj in skupin
#*Prior to version 1.92, you could not re-order questions or groups if LimeSurvey thought that such-re-ordering could break conditions in which they were used.  Similarly, you could not delete questions if any other questions depended upon them.
#*Pred različico 1.92 niste mogli prerazporediti vprašanj ali skupin, če je LimeSurvey menil, da bi se takšno prerazporejanje lahko pokvarilo pogojih, v katerih so bili uporabljeni. Podobno ne morete izbrisati vprašanj, če so bila od njih odvisna katera koli druga vprašanja.
#*With EM's syntax highlighting, it is easy to see and validate whether you try to use questions before they are declared.  So, we now let you re-order or delete questions and groups whenever you like.  EM will update all of the syntax highlighting to show you potential errors.
#*Z označevanjem sintakse EM je preprosto videti in potrditi, ali poskušate uporabiti vprašanja, preden so navedena. Tako vam zdaj omogočamo, da vprašanja in skupine preuredite ali izbrišete, kadar koli želite. EM bo posodobil vse označevanje sintakse, da vam bo pokazal morebitne napake.
#*The re-order questions view has been enhanced to help with such review.  It now shows the question's relevance equation and tailoring, so you can immediately see whether any variables become pink (meaning they are used before being declared).
#*Pogled vprašanj za ponovno vrstni red je bil izboljšan za pomoč pri takem pregledu. Zdaj prikazuje enačbo pomembnosti vprašanja in njegovo prilagajanje, tako da lahko takoj vidite, ali katera koli spremenljivka postane rožnata (kar pomeni, da se uporabi, preden se razglasi).
#The Question/Group Navigation Index is always available and accurate
#Navigacijski indeks vprašanj/skupin je vedno na voljo in točen
#*Prior to version 1.92, these indexes were not available if there were complex conditions
#* Pred različico 1.92 ti indeksi niso bili na voljo, če so bili zapleteni pogoji
#*With EM, we can guarantee that they are accurate.
#*Z EM lahko zagotovimo, da so točni.
#*Subjects can even jump back, to a prior question, change the answer, then jump forward (or submit)
#*Subjekt lahko celo skoči nazaj na prejšnje vprašanje, spremeni odgovor , nato skočite naprej (ali pošljite)
#**When jumping forwards, EM will re-validate all of the intervening questions/groups.
#**Pri skoku naprej bo EM ponovno preveril vsa vmesna vprašanja/skupine.
#**If any questions become irrelevant, they will be NULLed in the database so that your data is internally consistent
#**Če katero koli vprašanje postane nepomembno, bo v zbirki podatkov razglašeno za NULL. tako da so vaši podatki interno skladni
#**If any questions become relevant or newly fail mandatory or validation rules, EM will stop on that page and force the user to answer those questions before jumping to their final destination.
#**Če kakršna koli vprašanja postanejo pomembna ali na novo ne izpolnjujejo obveznih ali pravil preverjanja, se bo EM ustavil na tej strani in prisilil uporabnika, da odgovori na ta vprašanja, preden skoči na končni cilj.
#Auto-conversion of Conditions to Relevance
#Samodejna pretvorba pogojev v ustreznost
#*When you upgrade your database, all existing surveys that have conditions will have relevance equations generated for them
#*Ko nadgradite svojo zbirko podatkov, bodo za vse obstoječe ankete, ki imajo pogoje, ustvarjene enačbe ustreznosti
#*Whenever you import a survey, relevance equations will be created as needed
#*Kadar koli uvozite anketo, bodo po potrebi ustvarjene enačbe ustreznosti
#*Whenever you add, delete, or modify conditions, EM will generate the appropriate relevance equation.
#*Kadar koli dodate, izbrišete ali spremenite pogoje, bo EM ustvaril ustrezno enačbo ustreznosti.
#Convenient Syntax Highlighting
#Priročno označevanje sintakse
#*When EM shows the relevance equation, it will show the Qcode, even if you entered an SGQA code, as we assume this will be easier to read.
#*Ko EM prikaže enačbo pomembnosti, bo prikazal Qcode, tudi če vnesli ste kodo SGQA, saj predvidevamo, da bo to lažje brati.
#*All variables are color coded to show whether they were declared before or after the current question (or before or after the current group).  This lets you quickly detect and fix cases where you try to use variables for relevance (including array_filter), tailoring, or validation equations prior to declaring them.
#*Vse spremenljivke so barvno kodirane, da pokažejo, ali so bile deklarirane pred ali za trenutnim vprašanjem (ali pred ali za trenutno skupino). To vam omogoča hitro odkrivanje in popravljanje primerov, ko poskušate uporabiti spremenljivke za ustreznost (vključno z array_filter), prilagajanje ali validacijske enačbe, preden jih objavite.
#*In addition, if you hover your mouse over the color-coded variable, you will see the most important metadata about that question.   This includes the Group Sequence #, Question Sequence #, Qcode, Text of the question, and all available answer choices (if it is a question type with enumerated answer choices).
#*Poleg tega, če z miško premaknete nad barvno kodirano spremenljivko , boste videli najpomembnejše metapodatke o tem vprašanju. To vključuje zaporedje skupine #, zaporedje vprašanja #, kodo Q, besedilo vprašanja in vse razpoložljive izbire odgovorov (če gre za vrsto vprašanja z oštevilčenimi možnostmi odgovorov).
#**The list of answer choices uses this syntax:  'answers':{key:val, ... }.
#**Seznam izbir odgovorov uporablja to sintakso : 'odgovori':{ključ:val, ... }.
#**''key'' has the syntax ''''scale~code'''' where ''scale'' is the answer scale (e.g. for dual scale), and ''code'' is the answer code.
#**''ključ'' ima sintakso ''''lestvica~koda'''', kjer je ''lestvica'' lestvica odgovorov (npr. za dvojno lestvico) in ''koda'' je koda odgovora.
#**''val'' has the syntax ''''value~shown'''' where ''value'' is the assessment value (if using assessments, otherwise ''code'')(e.g. Qcode.value), and ''shown'' is the display value as seen by the subject (e.g. Qcode.shown)
#**''val'' ima sintakso ''''prikazana vrednost'''', kjer je ''vrednost'' vrednost ocene (če uporabljate ocene, drugače ''koda'')(npr. Qcode.value) in ''prikazano'' je prikazana vrednost, kot jo vidi subjekt (npr. Qcode.shown)
#**This means that many surveys can use calculations without needing assessment mode.  If you have enumerated answer options  that are unique, non-decimal, and non-negative, you can simply do calculations on the Qcode.code values.
#**To pomeni, da lahko številne raziskave uporabljajo izračune, ne da bi potrebovali način ocenjevanja. Če ste našteli možnosti odgovorov, ki so edinstveni, nedecimalni in nenegativni, lahko preprosto izračunate vrednosti Qcode.code.
#Easy review of entire survey logic and content
#Enostaven pregled celotne logike in vsebine ankete
#*There is a new Show Survey Logic feature that lets you see everything about the survey (or group or question) on a single page.
#*Obstaja nova funkcija Prikaži logiko ankete, ki vam omogoča ogled vsega o anketi (ali skupini ali vprašanju) na eni strani.
#*It shows the Group, Question, Sub-Question, and Answer-level details for the selected scope (survey vs. group vs. question)
#*Prikaže podrobnosti na ravni skupine, vprašanja, podvprašanja in odgovora za izbran obseg (anketa v primerjavi s skupino v primerjavi z vprašanjem)
#*It also shows the relevance, subquestion-level relevance (for array_filter and array_filter_exclude), and generated validation equation (for preg and any validation rules like min/max sum/number of values), and all non-blank question attributes.
#*Prikaže tudi ustreznost, ustreznost na ravni podvprašanja (za array_filter in array_filter_exclude) in ustvarjeno validacijsko enačbo (za preg in morebitna validacijska pravila, kot je najmanjša/največja vsota/število vrednosti) in vsi atributi vprašanj, ki niso prazni.
#*Everything is syntax-highlighted so that you can see potential syntax errors (like unbalanced parentheses or use of variables before they were declared)
#*Vse je skladenjsko označeno, tako da lahko vidite morebitne sintaksne napake (kot so neuravnoteženi oklepaji ali uporaba spremenljivk, preden so bile deklarirane)
#*The syntax-highligting supports rapid navigation and editing of the survey.
#*Skladnja- Highligting podpira hitro navigacijo in urejanje ankete.
#**If you click on a variable name, it opens a browser window (or tab) that shows you that question and lets you edit it.
#**Če kliknete ime spremenljivke, se odpre okno brskalnika (ali zavihek), ki vam prikaže to vprašanje in vam omogoča urejanje.
#**If you click on a group name, it opens a browser window (or tab) showing the group-reorder view so that you can easily move questions around.
#** Če kliknete ime skupine, se odpre okno (ali zavihek) brskalnika, ki prikazuje pogled za preurejanje skupine, tako da lahko preprosto premikate vprašanja.
#**All of the question attributes are also syntax highlighted.  This lets you set and see expressions within advanced question options (like basing the max/min number/sum of values on an expression)
#**Vsi atributi vprašanja so sintaktično označeni. To vam omogoča nastavitev in ogled izrazov v naprednih možnostih vprašanj (na primer določanje največjega/najmanjšega števila/vsote vrednosti na izrazu)
#*The EM author used similar view (a little cleaner) to let his collaborating Epidemiologists and Institutional Review Board validate and authorize surveys with thousands of questions in highly branched and tailored structured interviews
#*Avtor EM je uporabil podoben pogled (malo čistejši), da je svojim sodelujočim epidemiologom in institucijam omogočil Nadzorni odbor potrdi in odobri ankete s tisoči vprašanj v zelo razvejanih in prilagojenih strukturiranih intervjujih


==How Backwards Compatible is EM with 1.91+?==
=Začetek=


LimeSurvey 1.92 is fully backwards-compatible with 1.91+ with one exception/caveat:  1.92 handles less-than / greater-than comparisons against empty values differently than 1.91+.
Najboljši način, da začnete z EM je:
*Namestiti najnovejšo stabilno različico s http://www.limesurvey.org/en/download
*Uvoziti in raziskati [[ExpressionScript sample surveys|vzorčne ankete ]].
*Raziščite [[ExpressionScript How-tos|primere uporabe in navodila]] in [[ExpressionScript examples|primere po korakih]].
*Raziščite dokumentacijo EM (ta stran)! N!*Preglejte vgrajeno zbirko testov EM
**V kateri koli anketi pod orodji izberite možnost EM
**Razpoložljive funkcije navajajo 70+ funkcij in sintakso
**Preizkusi enot izoliranih Izrazi
***prikazuje primere uporabe vseh funkcij in operatorjev EM ter rezultatov PHP in JavaScript
***upoštevajte, da obstaja nekaj funkcij, ki ustvarjajo različne rezultate v različicah PHP in JavaScript, zato vam ta stran omogoča ustrezno načrtujte svojo EM logiko.


One of the LimeSurvey demo surveys uses a set of conditions that translates to this relevance equation:  {(age < 16) or (age == 20) or ... or (age == 80)}. In LimeSurvey 1.91+, (age < 16) is FALSE when there is no answer (the value is blank).  However, in LimeSurey 1.92, (age < 16) is TRUE when there is no answer, since both PHP and JavaScript treat blank as 0 in mathematical comparisons.  Thus, 1.91+ would hide that question when age was unanswered, but 1.92 would show it.  We went to great pains to prevent this, but since we needed to have the Expressions generate identical results in PHP and JavaScript, there was no way to make 1.92 treat "" < 16 as FALSE.  Fortunately, there is an easy work-around for this.  If you want (age < 16) to be FALSE, then use this expression instead: {(!is_empty(age) and age < 16)}.  You can use the new [[Show Logic File|Survey Logic File]] view to quickly identify and fix any such comparisons in your survey.
=Katero funkcionalnost razširi/zamenja Expression Manager? (LimeSurvey <= 1,91+)=


=Getting Started=
==Pogoji => Ustreznost==


The best way to get started with EM is to:
Pogoji so nadzorovali, katera vprašanja so vidna. Splošna sintaksa je bila ''Vrednost operaterja SGQA'', na primer ''111X2X3 == "Y"''. Pogoje je bilo mogoče kombinirati z IN ali ALI, vendar je bilo mešanje IN in ALI težko. Sami pogoji so bili shranjeni v ločeni tabeli, velik del kode LimeSurvey pa je bil namenjen upravljanju pogojev. Zaradi obsežnega dostopa do baze podatkov lahko obdelava velikega števila pogojev povzroči opazne težave z delovanjem. Poleg tega, ko so bili vprašanjem ali skupinam dodeljeni pogoji, jih pogosto ni bilo dovoljeno preurediti ali izbrisati.
*Install the latest stable version from http://www.limesurvey.org/en/download
*Import and explore the [[ExpressionScript Sample Surveys|sample surveys]].
*Explore the [[ExpressionScript HowTos|use cases and HowTos]] and [[ExpressionScript Examples|step-by-step examples]].
*Explore the EM documentation (this page)
*Examine the built-in EM test suite
**From any survey, under tools, select the EM option
**Available Functions lists the 70+ functions and syntax
**Unit Tests of Isolated Expressions
***shows examples of using all EM functions and operators, and the PHP and JavaScript results
***note there are few functions that generate different results in the PHP and JavaScript versions, so this page lets you plan your EM logic accordingly.


=What Functionality does ExpressionScript Extend/Replace? (LimeSurvey <= 1.91+)=
==Ocenjevanja => Enačbe in mikro krojenje==


==Conditions => Relevance==
Ocene uporabnikom omogočajo ustvarjanje rezultatov na lestvici iz zbirke vprašanj. Vendar se na trenutni strani niso mogli dinamično spremeniti in njihove vrednosti niso bile shranjene v zbirki podatkov.


Conditions controlled which  questions are visible.  The general syntax was ''SGQA operator Value'', like ''111X2X3 == "Y"''.  Conditions could be ANDed or ORed together, but mixing ANDs and ORs was difficult.  The conditions themselves were stored in a separate table, and large portion of LimeSurvey's code was devoted to managing Conditions.  Because of extensive database access, processing large numbers of conditions could cause noticable performance problems.  Furthermore, once you had conditions assigned to questions or groups, you were often not allowed to re-order or delete them.
==Zamenjave => Mikro krojenje==


==Assessments => Equations and  Micro-Tailoring==
Uporabniki lahko prilagodijo nekatera sporočila in vprašanja na podlagi predhodnih odgovorov. Vprašanje je lahko na primer: »{TOKEN:FIRSTNAME}, rekli ste, da je {INSERTANS:111X3X4} vaš najljubši šport«. Vendar pa ni bilo mogoče izvesti pogojnega prilagajanja (kot recimo »gospod« ali »gospa«, odvisno od spola osebe) ali spregati glagolov ali zavrniti samostalnikov brez modnega JavaScripta. Avtorji so lahko izvajali ankete, za katere se je zdelo, da prilagajajo vprašanja, vendar so zahtevala ločena vprašanja za vsako permutacijo in zapletene pogoje za odločitev, katera vprašanja prikazati.


Assessments let users create scale scores from a collection of questions.  However, they could not dynamically change on the current page, and their values were not stored to the database.
==Potrjevanje==


==Replacements => Micro-Tailoring==
Vprašanje je mogoče potrditi z regularnimi izrazi ali najmanjšimi/največjimi vrednostmi ali pustiti, da odgovor SGQA služi kot najmanjša ali največja vrednost. Vendar validacije ne morejo temeljiti na izračunih drugih spremenljivk brez modnega JavaScripta.


Users could tailor some messages and questions based  upon prior responses.  For example, a question might be, ''{TOKEN:FIRSTNAME}, you said {INSERTANS:111X3X4} was your favorite sport''.  However, it was not possible to do conditional tailoring (like say "Mr." or "Mrs." depending upon the person's gender), or conjugate verbs or decline nouns without fancy JavaScript.  Authors could implement surveys that seemed to tailor questions, but it required separate questions for each permutation, and complex conditions to decide which questions to display.
==Enačbe==


==Validation==
Enačbe niso bile podprte brez modnega JavaScripta.


Question could be validated with Regular expressions, or minimum/maximum values, or let an SGQA response serve as the minimum or maximum value.  However, validations could not be based upon calculations of other variables without fancy JavaScript.
==Enačba Vrsta vprašanja==


==Equations==
Enačb ni bilo mogoče shraniti v zbirko podatkov (npr. končnega rezultata za oceno) brez modnega JavaScripta.


Equations were not supported without fancy JavaScript.
=Kako bo Expression Manager nadomestil/razširil to funkcionalnost?=


==Equation Question Type==
Expression Manager je nov osrednji modul znotraj LimeSurvey, ki omogoča veliko lažjo podporo vrsti kompleksne funkcionalnosti, ki je prej zahtevala JavaScript po meri. Prav tako nadomešča način, na katerega LimeSurvey trenutno upravlja pogoje in ocene.


Equations could not be saved to the database (e.g. the final score for an assessment) without fancy JavaScript.
==Nova terminologija pri sklicevanju na Expression Manager (EM)==


=How Will ExpressionScript Replace/Extend That Functionality?=
EM "razmišlja" o svoji funkcionalnosti v naslednjih izrazih:
*'''Relevance-based Branching''' - če je vprašanje relevantno, ga postavite, sicer ne (npr. naredite ga nevidnega in označite kot NULL v bazi podatkov). Na voljo je novo polje Ustreznost za vse vrste vprašanj in tudi za vsako skupino (tako da lahko nabor pogojev uporabite za celotno skupino, ne da bi morali kopirati isti pogoj za vsako vprašanje in/ali združiti skupino in pogoj na ravni vprašanja logic).
*'''Tailoring''' - Ko veste, katera vprašanja je treba postaviti, krojenje (včasih imenovano ''piping'') določa, kako naj se vprašanje postavi. To vam omogoča ne samo podporo preproste zamenjave (kot je {TOKEN:FIRSTNAME}), ampak tudi spreganje glagolov in sklanjanje samostalnikov glede na spol ali število vaših subjektov. Prav tako vam omogoča, da spremenite sporočilo, ki ga pošljete subjektu glede na to, ali je odgovoril (ali kako je odgovoril) na druga vprašanja.
*''Equations'''' - EM doda novo vrsto vprašanja, imenovano Equation, ki shrani rezultat izraza. Rezultati teh enačb se izračunajo in zapišejo v bazo podatkov, tudi če jih skrijete na strani. Tako so uporabne za skrite izračune točkovanja, navigacijo na podlagi zapletenih enačb, ocene in poročila, ki jih je treba ustvariti in zlahka dostopna v bazi podatkov.


The ExpressionScript is a new core module within LimeSurvey that makes it much easier to support the type of complex functionality that used to require custom JavaScript.  It is also replacing the way LimeSurvey currently manages Conditions and Assessments.
===Ustreznost in kaskadna ustreznost===


==New Terminology When Referring to ExpressionScript (EM)==
Vsaka vrsta vprašanja ima zdaj možnost Ustreznost, ki nadzira, ali je vprašanje prikazano. EM obdela vsako od enačb ustreznosti v vrstnem redu, v katerem naj bi se pojavile v anketi. Če je izraz resničen (ali manjka – za podporo starim anketam), bo vprašanje prikazano. Če ni relevantno, bo vprašanje skrito, vrednost pa bo v zbirki podatkov označena z NULL. Če v skupini ni ustreznih vprašanj, bo celotna skupina preskočena.


EM "thinks" of its functionality in the following terms:
Poleg tega, če je katera od spremenljivk v izrazu nepomembna, potem je izraz vedno ovrednoten kot false. To omogoča kaskadno ustreznost, tako da vam ni treba pisati zelo dolgih enačb ustreznosti za vsako vprašanje.
*'''Relevance-based Branching''' - if a question is relevant, then ask it, otherwise don't (e.g. make it invisible, and mark it as NULL in the database).  There is a new Relevance field for all Question types, and also for each Group (so you can apply a set of conditions to an entire group without having to copy the same condition to each question, and/or combine group and question-level conditional logic).
*'''Tailoring''' - Once you know which questions should be asked, tailoring (sometimes called ''piping'') specifies how the question should be asked. This lets you support not only simple subsitution (like {TOKEN:FIRSTNAME}), but also conjugation of verbs and declination of nouns based upon the gender or number of your subjects.  It also lets you change the message you deliver to a subject based upon whether they answered (or how they answered) other questions.
*'''Equations''' - EM adds a new question type called Equation which stores the result of an Expression.  These equations results are computed and written to the database, even if you hide them on the page.  Thus, they are useful for hidden scoring calculations, navigation based upon complex equations, assessments, and reports that should be generated and easily available within the database.


===Relevance and Cascading Relevance===
Recimo, da imate 5 vprašanj Q1-Q5 in želite prikazati samo Q2, če je bil odgovor na Q1, in Q3, če je bil odgovor na Q2 itd. Enačbe ustreznosti so lahko:
 
Every question type now has a Relevance option which controls whether the question is displayed.  EM processes each of the Relevance Equations in the order they should appear in the survey.  If the expression is true (or missing - to support legacy surveys), the question will be displayed. If it is not relevant, then the question will be hidden, and the value will be NULLed in the database.  If there are no relevant questions in a group, the entire group will be skipped.
 
Moreover, if any of the variables within an expression is irrelevant, then the expression always evaluates to false.  This enables Cascading Relevance so that you do not have to write very long Relevance equations for each question.
 
Say you have 5 questions Q1-Q5, and you only want to show Q2 if Q1 was answered, and Q3 if Q2 was answered, etc.  The relevance equations might be:


{| class="wikitable"
{| class="wikitable"
!Question Code!!Relevance!!Question
!Koda vprašanja!!Ustreznost!!Vprašanje
|-
|-
|Q1||1||What is your name?
|Q1||1||Kako ti je ime?
|-
|-
|Q2||Q1||{Q1}, how old are you?
|Q2||Q1 ||{Q1}, koliko si star?
|-
|-
|Q3||Q2||So, you are {Q2} years old.  Are you married?
|Q3||Q2||Torej, star si {Q2} let. Ste poročeni?
|-
|-
|Q4||Q3 == "Y"||{Q1}, how long have you been married?
|Q4||Q3 == "Y"||{Q1}, koliko časa ste poročeni?
|-
|-
|Q5||Q4||How many children do you have, {Q1}?
|Q5||Q4|| Koliko otrok imaš, {Q1}?
|}
|}


The relevance calculations also work in JavaScript - so you could put all the above questions on one page and it would still work as expected.  In fact, EM totally replaces how EM processes Survey vs. Group vs. Question-at-a-time survey formats.  They now all use the exactly same navigation engine so they work identically regardless of survey style.
Izračuni ustreznosti delujejo tudi v JavaScriptu – tako da bi lahko vsa zgornja vprašanja postavili na eno stran in bi še vedno delovalo po pričakovanjih. Pravzaprav EM popolnoma nadomešča način, kako EM obdeluje formate anket Anketa vs. Skupina vs. Vprašanje naenkrat. Zdaj vsi uporabljajo popolnoma enak navigacijski mehanizem, tako da delujejo enako ne glede na slog raziskovanja.


As long as you are on the same page, any data you entered will still be there, just hidden.  So, if you enter some information, then choose an option that makes them irrelevant, then make them relevant again, your answers will still be available.  However, as soon as you move to a different page, all irrelevant responses will be lost to integrity of the dataset.
Dokler ste na isti strani, bodo vsi podatki, ki ste jih vnesli, še vedno tam, samo skriti. Torej, če vnesete nekaj informacij, nato izberete možnost, ki jih naredi nepomembne, nato pa jih znova naredite ustrezne, bodo vaši odgovori še vedno na voljo. Vendar takoj, ko se premaknete na drugo stran, bodo vsi nepomembni odgovori izgubljeni zaradi celovitosti nabora podatkov.


===Group-Level Relevance===
===Ustreznost na ravni skupine===


ExpressionScript also supports group-level relevance.  This makes it easier to implement looping.   Say you want to collect information about up to 10 entities (such a products or people in a household), where you first determine how many entities need follow-up (such as by asking how many people live in a household, or having people check which products they like from a long list).  After knowning how many entities need follow-up, you can use Group-level relevance like {count >= 1}, {count >=2}, ... {count >= 10} for each of the 10 groups of follow-up questions.  Within each group, you can have question-level conditional logic (e.g. gender or age-specific follow-up questions for each subject).  The question and group-level relevance equations are ANDed together to determine which should be shown.
Expression Manager podpira tudi ustreznost na ravni skupine. To olajša izvajanje zanke. Recimo, da želite zbrati informacije o do 10 subjektih (kot so izdelki ali ljudje v gospodinjstvu), pri čemer najprej določite, koliko subjektov potrebuje nadaljnje ukrepanje (na primer tako, da vprašate, koliko ljudi živi v gospodinjstvu, ali da ljudi preverijo kateri izdelki so jim všeč z dolgega seznama). Ko veste, koliko subjektov potrebuje nadaljnje ukrepanje, lahko uporabite ustreznost na ravni skupine, kot je {count >= 1}, {count >=2}, ... {count >= 10} za vsako od 10 skupin spremljanja. gor vprašanja. Znotraj vsake skupine imate lahko pogojno logiko na ravni vprašanja (npr. dodatna vprašanja glede spola ali starosti za vsak predmet). Vprašanje in enačbe ustreznosti na ravni skupine se povežejo z IN, da se določi, katera naj bo prikazana.


===Tailoring / Piping===
===Krojenje / Piping===


Anything within curly braces is now treated as an Expression (with one exception described below).  Expressions have acccess to all of the LimeReplacementFields, all of the variables (via several aliases), all typical equation operators (mathematical, logical, and comparison), and dozens of functions (that even work dynamically on the client-side).
Karkoli v zavitih oklepajih se zdaj obravnava kot izraz (z eno izjemo, ki je opisana spodaj). Izrazi imajo dostop do vseh polj LimeReplacementFields, vseh spremenljivk (prek več vzdevkov), vseh tipičnih operatorjev enačb (matematičnih, logičnih in primerjalnih) in na desetine funkcij (ki delujejo celo dinamično na strani odjemalca).


Using these equations, you can do things such as:
Z uporabo teh enačb lahko naredite stvari, kot so:
#Conditionally show tailored messages to the respondants based upon prior responses
#Pogojno prikažite prilagojena sporočila anketirancem na podlagi predhodnih odgovorov
#Create Assessments and show Assessment results (or conditionally branch or show messages) based upon those results, all without using the Assessments module itself
#Ustvarite ocene in pokažite rezultate ocenjevanja (ali pogojno razvejajte ali prikažite sporočila) na podlagi teh rezultatov, vse brez uporabe samega modula za ocenjevanje
#Conjugate verbs and decline nouns within questions, answers, and reports.
#Spregajte glagole in zavrnite samostalnike v vprašanjih, odgovorih in poročilih.
#Show summaries of responses before the "Show your answers" page at the end of the survey
#Prikažite povzetke odgovorov pred stranjo »Pokažite svoje odgovore« na koncu ankete


===Equations===
===Enačbe===


There is a new question type called  Equation.  It is like a Boilerplate questions, except that it stores the value of what is displayed in the database.  So, if the Equation Question text contains an Assessment computation, that value would be stored in the database in a variable that can be displayed within public or private statistics.
Obstaja nova vrsta vprašanja, imenovana Enačba. Je kot Boilerplate vprašanja, le da shrani vrednost tega, kar je prikazano v bazi podatkov. Torej, če besedilo Equation Question vsebuje izračun ocene, bi bila ta vrednost shranjena v zbirki podatkov v spremenljivki, ki jo je mogoče prikazati v javnih ali zasebnih statistikah.


This solves a common request for storing Assessment scores within the database
To rešuje običajno zahtevo za shranjevanje rezultatov ocenjevanja v bazi podatkov


==Syntax==
==Sintaksa==


Anything contained within curly braces is now considered an Expression (with one exception:  there must be no leading or trailing whitespace - this is needed to ensure the ExpressionScript does not try to process embedded JavaScript).
Vse, kar je v zavitih oklepajih, se zdaj obravnava kot izraz (z eno izjemo: ne sme biti presledkov na začetku ali na koncu – to je potrebno za zagotovitev, da upravitelj izrazov ne poskuša obdelati vdelanega JavaScripta).


Note, it is OK for expressions to span multiple lines, as long as there is no whitespace after the opening  curly brace or before the closing curly brace.  This is especially helpful for nested if() statements like this:
Upoštevajte, da je v redu, če izrazi obsegajo več vrstic, če za začetnim zavitim oklepajem ali pred zaključnim zavitim oklepajem ni presledka. To je še posebej koristno za ugnezdene stavke if(), kot je ta:


<syntaxhighlight lang="java" enclose="div">{if(is_empty(PFTotals),
<syntaxhighlight lang="java">{if(is_empty(PFTotals),
 '',
'',
 if(PFTotals >= -5 && PFTotals <= -4,
if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
'Zelo mehko',
   if(PFTotals >= -3 && PFTotals <= -2,
if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
'Mehko',
     if(PFTotals == -1,
if(PFTotals == -1,
       'Somewhat Soft',
'Nekoliko mehko',
       if(PFTotals == 0,
if(PFTotals == 0,
         'Moderate',
'Zmerno',
         if(PFTotals == 1,
if(PFTotals == 1,
           'Somewhat Hard',
'Nekoliko težko',
           if(PFTotals >= 2 && PFTotals <= 3,
if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
'Zelo težko',
               ''
''
             )
)
           )
)
         )
)
       )
)
     )
)
   )
)
 )
)
)}
)}  
</syntaxhighlight>
</syntaxhighlight>


<div id="EMsyntax">ExpressionScript supports the following syntax:</div>
<div id="EMsyntax">Expression Manager podpira naslednjo sintakso:</div>  
*All standard mathematical operators (e.g. +,-,*,/,!)
*Vsi standardni matematični operatorji (npr. +,-,*,/,!)
*All standard comparison operators (e.g. <,<=,==,!=,>,>=, plus these equivalents:  lt,le,eq,ne,gt,ge)
*Vsi standardni primerjalni operatorji (npr. <,<=,==,!=,>,>=, plus ti ustrezniki: lt,le,eq,ne,gt,ge)
*Parentheses (so you can group sub-expressions)
*Oklepaji (da lahko združite podizraze)
*Conditional operators (e.g. &&,| | and these equivalents: and,or)
*Pogojni operatorji (npr. &&,| | in ti ustrezniki: in,ali)
*Single and double-quoted strings (which can each embed strings with the other quote type)
* Nizi z enojnimi in dvojnimi narekovaji (ki lahko vsak vdela nize z drugo vrsto narekovajev)
*Comma operator (so can have a list of expressions and just return the final result)
*Operator vejice (tako ima lahko seznam izrazov in samo vrne končni rezultat)
*Assignment operator (=)
*Operator dodelitve (=)
*Pre-defined variables (to refer to questions, question attributes, and responses) - e.g. all of the SGQA codes
*Vnaprej določene spremenljivke (za sklicevanje na vprašanja, atribute vprašanj in odgovore) - npr. vse kode SGQA
*Pre-defined functions (there are already 70+, and it is easy to add more)
*Vnaprej določene funkcije (obstaja že 70+ in jih je preprosto dodati več)


=== Operators ===
=== Operaterji ===


EM syntax follows normal operator precedence:
Sintaksa EM sledi običajni prednosti operatorja:


{| class="wikitable"
{| class="wikitable"
!Level!!Operator(s)!!Description
!Raven!!Operator(ji)!!Opis
|-
|-
|1||()||parentheses for grouping or calling functions
|1||()||oklepaji za združevanje ali klicanje funkcij
|-
|-
|2||! - +||unary operators: not, negation, unary-plus
| 2||! - +||unarni operatorji: ne, negacija, unarni-plus
|-
|-
|3||* /||times, divide
|3||* /||krat, deli
|-
|-
|4||+ -||plus, minus
|4||+ -||plus , minus
|-
|-
|5||< <= > >= lt le gt ge||relative comparisons
|5||< <= > >= lt le gt ge||relativne primerjave
|-
|-
|6||== != eq ne||equality comparisons
|6||== != eq ne||primerjave enakosti
|-
|-
|7||and||logical AND
|7||in||logično IN
|-
|-
|8||or||logical OR
|8||ali||logično ALI
|-
|-
|9||=||assignment operator
|9||=||dodelitev operator
|-
|-
|10||,||comma operator
|10||,||vejica operator
|}
|}


Note, for consistency between JavaScript and PHP, the plus operator (+) does addition if both operands are numeric, but does concatenation if both parts are non-numeric strings.  However, we recommend using the join() function for concatenation, as that makes your intent more clear, and avoids unexpected results if you were expecting strings but got numbers instead (or vice versa).
==== Opozorilo z operatorjem plus (+) ====
 
Zaradi skladnosti med JavaScriptom in PHP operater plus (+) sešteva, če sta oba operanda številska, vendar združuje, če sta oba dela neštevilska niza. Vendar pa '''priporočamo uporabo funkcije join() za veriženje in funkcije sum() za seštevanje''', saj je s tem vaš namen jasnejši in se izognete nepričakovanim rezultatom, če ste pričakovali nize, a namesto tega dobili številke (ali obratno obratno).
 
==== Opozorilo z neujemanjem med številom in nizom ter abecedno primerjavo ====
 
Ko želite primerjati vrednost z relativnimi primerjavami ali primerjavami enakosti, bodite pozorni na neujemanje vrste. Vrednost, ki jo vnese uporabnik, ali izbrana koda odgovora se lahko uporabi kot številka, če je očitno številka.
Če eno od vrednosti obdate z <code>"</code> , bo primerjava vsiljena kot besedilo (abecedna primerjava). Če želite primerjati številčno, številke nikoli ne obkrožite z narekovaji, <code>"</code> .
 
Na primer <code>Q0.NAOK > "50"</code> velja, če je Q0.NAOK številsko vprašanje z vrednostjo 9. To je zato, ker bo operator <code>></code> domneval, da gre za abecedno primerjavo in ne za številko.


===Caution about using Assignment Operator (=)===
<div class="mw-translate-fuzzy">
Če želite zagotoviti primerjavo celoštevilske vrednosti, lahko uporabite <code>[[Expression_Manager#Implemented_Functions|intval]](Q0.NAOK) > 50</code> , samo zapomnite si, če Q0.NAOK ni število (prazno ali niz), potem intval(Q0. NAOK) === 0. Za primerjavo vrednosti niza ("A" < "B") neposredno uporabite [[Expression_Manager#Implemented_Functions|strcmp]]: <code>strcmp(Q0.NAOK,"B")</code> ali <code>strcmp(Q0.NAOK,"A5")</code> .
</div>


Note, you should avoid using the assignment operators unless absolutely necessary, since they may cause unexpected side-effects.  For example, if you change the value of a previous response, the cascading relevance and validation logic between that question and the current question is not re-computed, so you could end up with internally inconsistent data (e.g. questions that stay answered but should have been NULLed, or questions that are skipped but should have been answered).  In general, if you want to assign a value to a variable, you sould create an Equation question type, and use an expression to set its value.  However, there are some rare times that people really need this operator, so we made it available.
===Previdno pri uporabi operatorja dodelitve (=)===


To help caution you about this operator, it is shown in red font within the syntax equations (so that you don't confuse it with "==")
Opomba: izogibajte se uporabi operatorjev dodelitve, razen če je to nujno potrebno, saj lahko povzročijo nepričakovane stranske učinke. Če na primer spremenite vrednost prejšnjega odgovora, se kaskadna ustreznost in logika preverjanja veljavnosti med tem vprašanjem in trenutnim vprašanjem ne izračunata znova, tako da lahko na koncu dobite notranje neskladne podatke (npr. vprašanja, na katera ostane odgovor, vendar bi morala imeti bila NULLed ali vprašanja, ki so preskočena, a bi nanje morali odgovoriti). Na splošno velja, da če želite spremenljivki dodeliti vrednost, ustvarite vrsto vprašanja Equation in uporabite izraz za nastavitev njene vrednosti. Vendar pa ljudje redko potrebujejo tega operaterja, zato smo ga dali na voljo.


====Using Assignment Operator====
Da bi vas opozorili na ta operator, je v sintaksnih enačbah prikazan z rdečo pisavo (da ga ne zamenjate z "==")
The main reasons you may want to use assignment are:
*You need to set the default value for a question that does not accept defaults via equation (such as list radio, where the user interface lets you pick one of the answer options, but does not let you enter an equation).  However, be careful, as LimeSurvey will not be able to validate that your equation generates one of the allowable answers for that question.
*You need to forcibly change the response to a previous question based upon a later response
* etc...


You can use all expression manager system for this purpose. It's better to use an Equation question type to this purpose.
===Uporaba operatorja dodelitve===
Glavni razlogi, zakaj boste morda želeli uporabiti dodelitev, so:
* Nastaviti morate privzeto vrednost za vprašanje, ki ne sprejema privzetih vrednosti prek enačbe (kot je seznam radio, kjer vam uporabniški vmesnik omogoča izbiro ene od možnosti odgovora, ne dovoljuje pa vnosa enačbe). Vendar bodite previdni, saj LimeSurvey ne bo mogel potrditi, da vaša enačba ustvari enega od dovoljenih odgovorov za to vprašanje.
* Odgovor na prejšnje vprašanje morate na silo spremeniti na podlagi kasnejšega odgovora
* Potrebujete zapleteno kvoto: uporabite eno skrito posamezno izbiro za kvoto in jo nastavite z dodelitvijo
* itd...


Some example:
V ta namen lahko uporabite vse sisteme upravljanja izrazov.  
* Set answer to a short text question in lowercase : <code>{QCODE=strtolower(QCODE.NAOK)}</code>
* Set an answer with condition : <code>{QCODE=if(YesNo="Y","A1","")}</code>


== XSS security ==
{{Opozorilo|Dodeljevanje se izvaja samo v PHP. To ne posodobi nobenih vrednosti na isti strani, ampak le, ko uporabnik krmari z naslednjim, prejšnjim, shrani ….}}


With XSS enable, some expression manager system can not be used :
{{Opozorilo|Če za ta namen ne uporabljate tipa [[Question_type_-_Equation|vprašanja z enačbo]]: dodelitev se izvede šele, ko je dokončana logika trenutne strani. Priporočena metoda je, da vedno uporabite [[Question_type_-_Equation|vprašanje z enačbo]].}}
* starting a HTML tag in expression but ending in another expression
* use a complex expression in URL.  


Example and workaround
Nekaj primerov:
* <code>{if( 1 ,"&lt;strong&gt;","")}information{if( 1 ,"&lt;/strong&gt;","")}</code> is broken with XSS security, here you can use <code>{if(1,"<strong&gt;information&lt;/strong&gt;","information")}</code>
* Nastavite odgovor na kratko besedilno vprašanje z malimi črkami: <code>{QCODE=strtolower(QCODE.NAOK)}</code>
* <code>&lt;a href="/script.php?value={if(QCODE == "Y","yes","no")}"&gt;next&lt;/a&gt;</code>, here you can use an equation question because using a complete question code is OK : <code>&lt;a href="/script.php?value={EQUATION.NAOK}"&gt;next&lt;/a&gt;</code>
* Nastavite privzeti odgovor na vrsto vprašanja niza na začetku ankete: <code>{Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}</code>  
* Nastavite privzeti odgovor na vrsto vprašanja v polju besedila na začetku ankete: <code>{Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}</code>  
* Nastavite odgovor s pogojem: <code>{QCODE=if(YesNo="Y","A1","")}</code>


==Access to Variables==
== Varnost XSS ==


ExpressionScript provides read-only access to whichever variables we might need.  For backwards compatibility, it provides access to the following:
Z omogočenim XSS nekaterih sistemov za upravljanje izrazov ni mogoče uporabiti:  
*TOKEN:xxx - the value of a TOKEN (e.g. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (Only for NOT anonymous survey).
* začetek oznake HTML v izrazu, vendar končanje v drugem izrazu
*[[Adding a question#Information_from_previous_answers||INSERTANS:SGQA]] - the display value of an answer (e.g. "Yes"). For ExpressionScript it's the same that using {QCODE.shown}.
* uporaba kompleksnega izraza v URL-ju.  
*All {XXX} values used by templates
*In question text, you can use {QID} replaced by the question id and {SGQ} replaced by the SGQA of the question


In addition, ExpressionScript lets you refer to variables by the Question Code (the 'title' column in the questions table within the database).  This is also the variable label used when you export your data to SPSS, R, or SAS.  For example, if you have questions about name, age, and gender, you could call those variables ''name'', ''age'', and ''gender'' instead of ''12345X13X22'', ''12345X13X23'', and  ''12345X13X24''.  This makes equations easier for everyone to read and validate the logic, plus makes it possible to shuffle questions around without having to keep track of group or question numbers.
Primer in rešitev
* <code>{if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")}</code> je poškodovana z varnostjo XSS, tukaj lahko uporabite <code>{if(1,"
<strong&gt;information&lt;/strong&gt;","information")}</code>
* <code><a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a></code> , here you can use an equation question because using a complete question code is OK : <code><a href="/script.php?value={EQUATION.NAOK}">next</a></code></code> <strong>information</strong>","information")}</code> <code>{if(1,"
* <code><a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a></code> , here you can use an equation question because using a complete question code is OK : <code><a href="/script.php?value={EQUATION.NAOK}">next</a></code></code>
 
==Dostop do spremenljivk==
 
Expression Manager omogoča dostop samo za branje do spremenljivk, ki jih morda potrebujemo. Za združljivost s prejšnjimi različicami omogoča dostop do naslednjega:
*TOKEN:xxx - vrednost TOKEN-a (npr. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (samo za NEanonimne ankete).
*[[Dodajanje question#Information_from_previous_answers|INSERTANS:SGQA]] - prikazna vrednost odgovora (npr. "Da"). Za Expression Manager je enako kot pri uporabi {QCODE.shown}.
*Vse [[The_template_editor#Keywords|{XXX} vrednosti, ki jih uporabljajo predloge]].
*V besedilu vprašanja lahko zamenjate {QID} z ID-jem vprašanja in {SGQ}, ki ga nadomesti SGQA vprašanja
 
Poleg tega vam Expression Manager omogoča sklicevanje na spremenljivke s kodo vprašanja (stolpec 'naslov' v tabeli vprašanj v bazi podatkov). To je tudi oznaka spremenljivke, ki se uporablja, ko izvozite podatke v SPSS, R ali SAS. Na primer, če imate vprašanja o imenu, starosti in spolu, lahko te spremenljivke imenujete »ime«, »starost« in »spol« namesto »12345X13X22«, »12345X13X23«. ' in ''12345X13X24''. To olajša branje enačb vsem in potrdi logiko, poleg tega pa omogoča mešanje vprašanj, ne da bi morali slediti številkam skupin ali vprašanj.


<div class='simplebox'>
<div class='simplebox'>
'''Important:''' It is only safe to refer to variables that occur in preceding pages or questions.
'''Pomembno:''' Varno je le sklicevanje na spremenljivke, ki se pojavljajo na prejšnjih straneh ali vprašanjih.
</div>
</div>


Furthermore, ExpressionScript lets you access many properties of the Question:
Poleg tega vam Expression Manager omogoča dostop do številnih lastnosti vprašanja:




{| class="wikitable"
{| class="wikitable"
!Syntax!!Meaning!!Example!!Example Result
!Sintaksa!!Pomen!!Primer!!Primer Rezultat
|-
|-
|Qcode||an alias for Qcode.code||{implode(',',name,gender)}||'Tom','M'
|Qcode||vzdevek za Qcode.code||{implode(',',name,gender )}||'Tom','M'
|-
|-
|Qcode.code||the selected response code for the question if it is relevant (otherwise blank), or the text value if it is not a coded question||{implode(',',name.code,gender.code)}||'Tom','M'
|Qcode.code||izbrana koda odgovora na vprašanje, če je ustrezna (sicer prazna), ali besedilna vrednost, če ni kodirano vprašanje||{implode(',',name.code,gender.code)}||'Tom','M'
|-
|-
|Qcode.NAOK||same as Qcode - see discussion of NAOK||{gender.NAOK}||'M'
|Qcode.NAOK||enako kot Qcode - glejte razpravo o NAOK||{gender.NAOK}||'M'
|-
|-
|Qcode.value||the assessment value for the question if it is relevant (otherwise blank), or the text value if it is not a coded question||{gender.value}||'1'
|Qcode.value||vrednost ocene za vprašanje, če je relevantno (sicer prazno), ali vrednost besedila, če ni kodirano vprašanje||{gender.value}||'1'
|-
|-
|Qcode.valueNAOK||same as Qcode.value - see discussion about NAOK||{gender.valueNAOK}||'1'
|Qcode.valueNAOK||enako kot Qcode.value - glej razpravo o NAOK||{gender.valueNAOK}||'1 '
|-
|-
|Qcode.shown||the dispay value for the question||{implode(',',name.shown,gender.shown)}||'Tom','Male'
|Qcode.shown||prikazana vrednost za vprašanje||{implode(',',name.shown,gender.shown)}||'Tom','Male'!N !|-
|Qcode.question||besedilo vprašanja||{gender.question}||'Kakšen je vaš spol?'
|-
|-
|Qcode.question||the text of the question||{gender.question}||'What is your gender?'
|Qcode.mandatory||ali je vprašanje je obvezno (Y/N)||{gender.mandatory}||'N'
|-
|-
|Qcode.mandatory||whether the question is mandatory (Y/N)||{gender.mandatory}||'N'
|Qcode.qid||notranja številka vprašanja (ne zaporedna številka)||{gender.qid} ||337
|-
|-
|Qcode.qid||the internal question number (not the sequential number)||{gender.qid}||337
|Qcode.type||tip vprašanja||{gender.type}||'G'
|-
|-
|Qcode.type||the question type||{gender.type}||'G'
|Qcode.jsName||pravilno ime javascript za vprašanje, ne glede na to, ali je navedeno na tej strani ali zunaj nje||{gender.jsName}||'java1827X3X337'
|-
|-
|Qcode.jsName||the correct javascript name for the question, regardless whether declared on or off this page||{gender.jsName}||'java1827X3X337'
|Qcode.gid||notranja številka skupine (ne zaporedna številka)|| {gender.gid}||3
|-
|-
|Qcode.gid||the internal group number (not the sequential number)||{gender.gid}||3
|Qcode.qseq||zaporedna številka vprašanja, začenši z 0||{gender.qseq}||5
|-
|-
|Qcode.qseq||the sequential number of the question, starting from 0||{gender.qseq}||5
|Qcode.gseq||zaporedna številka skupine, začenši z 0||{gender.gseq}||1
|-
|-
|Qcode.gseq||the sequential number of the group, starting from 0||{gender.gseq}||1
|Qcode.relevanceStatus||ali je vprašanje trenutno relevantno (0 ali 1 )||{gender.relevanceStatus}||1
|-
|-
|Qcode.relevanceStatus||whether the question is currently relevant (0 or 1)||{gender.relevanceStatus}||1
|Qcode.relevance||enačba ustreznosti na ravni vprašanja||{gender.relevance}||'!is_empty(name)'
|-
|Qcode.grelevance||enačba ustreznosti na ravni skupine||{gender.grelevance}||'num_children >= 5'
|-
|-
|Qcode.relevance||the question-level relevance equation||{gender.relevance}||'!is_empty(name)'
|Qcode.sgqa||vrednost SGQA za to vprašanje||{gender.sgqa}||'1827X3X337'
|-
|Qcode.grelevance||the  group-level relevance equation||{gender.grelevance}||'num_children >= 5'
|-
|Qcode.sgqa||the SGQA value for this question||{gender.sgqa}||'1827X3X337'
|}
|}


=== HTML editor issue===
=== Težava z urejevalnikom HTML===


{{Alert|This issue is fixed after 2.06 build 140803}}  
{{Opozorilo|Ta težava je odpravljena po različici 2.05 build 140803}}  


If you use HTML editor, some characters are replaced by HTML entities.
Če uporabljate urejevalnik HTML, so nekateri znaki nadomeščeni z entitetami HTML.
* & by &amp;amp;
* & z &amp;
* < by &amp;lt;
* < z &lt;
* > by &amp;gt;
* > z &gt;


If you use HTML editor you need to use :
Če uporabljate urejevalnik HTML, morate uporabiti :
* and for &
* in za &
* lt for <
* lt for <
* le for <=
* le for <=
* gt for >
* gt for >
* ge for >=
* ge za >=


==Qcode Variable Naming==
==Poimenovanje spremenljivke Qcode==


Here are the details of how to construct a Qcode (and access some properties) by question type.  In general, Qcodes are constructed as:
Tukaj so podrobnosti o tem, kako sestaviti Qcode (in dostopati do nekaterih lastnosti) glede na vrsto vprašanja. Na splošno so kode Q zgrajene kot:


  QuestionCode . '_' . SubQuestionID . '_' . ScaleId
QuestionCode . '_'. ID podvprašanja. '_'. ScaleId


For comment and other, question code are QuestionCode_comment and QuestionCode_other
Za '''komentar''' in '''drugo''' sta kodi vprašanja QuestionCode_comment in QuestionCode_other


{| class="wikitable"
{| class="wikitable"
!Type!!Description!!Code!!SubQs!!Answer Options!!Scales!!Answer Code!!Answer Shown!!Relevance
!Tip!!Opis!!Koda!!SubQs!!Možnosti odgovorov!!Lestvice!!Koda odgovora!!Odgovor je prikazan!!Ustreznost
|-
|-
|5||5 Point Choice Radio-Buttons||Q1|| ||1-5|| ||{Q1}||{Q1.shown}||{Q1==3}
|5||5 Izbirni gumbi za izbiro točke||Q1|| ||1-5|| ||{Q1}||{Q1.shown}||{Q1==3}
|-
|-
|B||Array (10 Point Choice) Radio-Buttons||Q2||L1-L6||1-10|| ||{Q2_L2}||{Q2_L2.shown}||{Q2_L2==7}
|B||Matrika (izbira 10 točk) izbirni gumbi||Q2||L1-L6| |1-10|| ||{Q2_L2}||{Q2_L2.shown}||{Q2_L2==7}
|-
|-
|A||Array (5 Point Choice) Radio-Buttons||Q3||1-5||1-5|| ||{Q3_1}||{Q3_1.shown}||{Q3_1>=3}
|A||Matrika (izbira 5 točk) izbirni gumbi||Q3||1-5| |1–5|| ||{Q3_1}||{Q3_1.shown}||{Q3_1>=3}
|-
|-
|1||Array (Flexible Labels) Dual Scale||Q4||sq1-sq5||0:a1-a3||1:b1-b3||{Q4_sq1_0}||{Q4_sq1_1.shown}||{Q4_sq1_1=='b2'}
|1||Matrika (prilagodljive oznake) dvojna lestvica||Q4||sq1-sq5||0 :a1-a3||1:b1-b3||{Q4_sq1_0}||{Q4_sq1_1.shown}||{Q4_sq1_1=='b2'}
|-
|-
|H||Array (Flexible) - Column Format||Q5||1-5||s,m,t|| ||{Q5_1}||{Q5_1.shown}||{Q5_1=='s'}
|H||Matrika (prilagodljiva) - Oblika stolpca||Q5||1-5||s,m,t|| ||{Q5_1}||{Q5_1.shown}||{Q5_1=='s'}
|-
|-
|F||Array (Flexible) - Row Format||Q6||F1-F5||1-5|| ||{Q6_F3}||{Q6_F3.shown}||{Q6_F3==4}
|F||Matrika (prilagodljiva) – oblika vrstice||Q6||F1-F5| |1–5|| ||{Q6_F3}||{Q6_F3.shown}||{Q6_F3==4}
|-
|-
|E||Array (Increase/Same/Decrease) Radio-Buttons||Q7||1-7||I,S,D|| ||{Q7_4}||{Q7_4.shown}||{Q7_4=='D'}
|E||Matrika (povečanje/enako/zmanjšanje) radijskih gumbov||Q7||1- 7||I,S,D|| ||{Q7_4}||{Q7_4.shown}||{Q7_4=='D'}
|-
|-
|:||Array (Multi Flexi) 1 To 10||Q8||ls1,todo,ls2||min,max,avg|| ||{Q8_ls1_max}||{Q8_ls2_avg.shown}||{Q8_ls2_min==7}
|:||Matrika (Multi Flexi) 1 do 10||Q8||ls1,todo ,ls2||min,max,avg|| ||{Q8_ls1_max}||{Q8_ls2_avg.shown}||{Q8_ls2_min==7}
|-
|-
|;||Array (Multi Flexi) Text||Q9||hp,st,sw||1st,2nd,3rd|| ||{Q9_hp_3rd}||{Q9_hp_3rd.shown}||{Q9_hp_3rd=='Peter'}
|;||Array (Multi Flexi) Besedilo||Q9||hp,st,sw|| 1.,2.,3.|| ||{Q9_hp_3rd}||{Q9_hp_3rd.shown}||{Q9_hp_3rd=='Peter'}
|-
|-
|C||Array (Yes/Uncertain/No) Radio-Buttons||Q10||1-5||Y,N,U|| ||{Q10_1}||{Q10_1.shown}||{Q10_3=='Y'}
|C||Array (Da/Negotovo/Ne) Radio-Buttons||Q10|| 1–5||D,N,U|| ||{Q10_1}||{Q10_1.shown}||{Q10_3=='Y'}
|-
|-
|X||Boilerplate Question||Q11|| || || || ||{Q11.shown}||
|X||Standardno vprašanje||Q11|| || || || ||{Q11.shown}||
|-
|-
|D||Date||Q12|| || || ||{Q12}||{Q12.shown}||
|D||Datum||Q12|| || || ||{Q12}||{Q12.shown}||
|-
|-
|*||Equation||Q13|| || || ||{Q13}||{Q13.shown}||{Q13>5}
|*||Enačba||Q13|| || || ||{Q13}||{Q13.shown}||{Q13>5}
|-
|-
|~124~||File Upload (records number of files uploaded)||Q14|| || || ||{Q14}|| ||{Q14>0}
|~124~||Nalaganje datoteke (zabeleženo število naloženih datotek)||Q14|| || || ||{Q14}|| ||{Q14>0}
|-
|-
|G||Gender Drop-Down List||Q15|| ||M,F|| ||{Q15}||{Q15.shown}||{Q15=='M'}
|G||Spustni seznam za spol||Q15|| ||M,Ž|| ||{Q15}||{Q15.shown}||{Q15=='M'}
|-
|-
|U||Huge Free Text||Q16|| || || ||{Q16}||{Q16.shown}||{strlen(Q16)>100}
|U||Ogromno prosto besedilo||Q16|| || || ||{Q16}||{Q16.shown}||{strlen(Q16)>100}
|-
|-
|I||Language Question||Q17|| || || ||{Q17}||{Q17.shown}||{Q17=='en'}
|I||Jezikovno vprašanje||Q17|| || || ||{Q17}||{Q17.shown}||{Q17=='en'}
|-
|-
|!||List - Dropdown||Q18|| ||1-5|| ||{Q18}||{Q18.shown}||{Q18==3}
|!||Seznam – spustni meni||Q18|| ||1-5|| ||{Q18}||{Q18.shown}||{Q18==3}
|-
|-
|L||List Drop-Down/Radio-Button List||Q19|| ||A-Z|| ||{Q19}||{Q19.shown}||{Q19=='X'}
|L||Spustni seznam/seznam radijskih gumbov||Q19|| ||AZ|| ||{Q19}||{Q19.shown}||{Q19=='X'}
|-
|-
|O||List With Comment Drop-Down/Radio-Button List + Textarea||Q20|| ||A-F|| ||{Q20},{Q20comment}||{Q20.shown}||{Q20=='B'}
|O||Seznam s spustnim seznamom komentarjev/seznam izbirnih gumbov + besedilno polje||Q20 || ||AF|| ||{Q20},{Q20comment}||{Q20.shown}||{Q20=='B'}
|-
|-
|T||Long Free Text||Q21|| || || ||{Q21}||{Q21.shown}||{strstr(Q21,'hello')>0}
|T||Dolgo prosto besedilo||Q21|| || || ||{Q21}||{Q21.shown}||{strstr(Q21,'hello')>0}
|-
|-
|M||Multiple Choice Checkbox||Q22||A-F|| || ||{Q22_E}||{Q22_E.shown}||{Q22_E=='Y'}
|M||Potrditveno polje z več možnostmi||Q22||AF, other| | || ||{Q22_E}, {Q22_other}||{Q22_E.shown}, {Q22_other.shown}||{Q22_E=='Y'}
|-
|-
|P||Multiple Choice With Comments Checkbox + Text||Q23||A-F|| || ||{Q23_D}, {Q23_Dcomment}||{Q23_D.shown}||{!is_empty(Q23)}
|P||Več možnosti s potrditvenim poljem za komentarje + Besedilo||Q23||AF|| || ||{Q23_D}, {Q23_Dcomment}||{Q23_D.shown}||{!is_empty(Q23)}
|-
|-
|K||Multiple Numerical Question||Q24||self,mom,dad|| || ||{Q24_self}||{Q24_self.shown}||{Q24_self>30}
|K||Vprašanje z več številkami||Q24||jaz,mama,oče || || ||{Q24_self}||{Q24_self.shown}||{Q24_self>30}
|-
|-
|Q||Multiple Short Text||Q25||A-F|| || ||{Q25_B}||{Q25_B.shown}||{substr(Q25_B,1,1)=='Q'}
|Q||Večkratno kratko besedilo||Q25||AF|| || ||{Q25_B}||{Q25_B.shown}||{substr(Q25_B,1,1)=='Q'}
|-
|-
|N||Numerical Question Type||Q26|| || || ||{Q26}||{Q26.shown}||{Q26 > 30}
|N||Vrsta številskega vprašanja||Q26|| || || ||{Q26}||{Q26.shown}||{Q26 > 30}
|-
|-
|R||Ranking Style||Q27||1-4|| || ||{Q27_1}||{Q27_1.shown}||{Q27_1==3}
|R||Slog razvrstitve||Q27||1-4|| || ||{Q27_1}||{Q27_1.shown}||{Q27_1==3}
|-
|-
|S||Short Free Text||Q28|| || || ||{Q28}||{Q28.shown}||{Q28=='mine'}
|S||Kratko prosto besedilo||Q28|| || || ||{Q28}||{Q28.shown}||{Q28=='moje'}
|-
|-
|Y||Yes/No Radio-Buttons||Q29|| || || ||{Q29}||{Q29.shown}||{Q29=='Y'}
|Y||Da/Ne radijski gumbi||Q29|| || || ||{Q29}||{Q29.shown}||{Q29=='Y'}
|}
|}


==The reserved 'this', 'self', and 'that' variables==
==Rezervirane spremenljivke 'this', 'self' in 'that'==


Quite often, you want to evalute all parts of a question, such as counting how many subquestions have been answered, or summing the scores.  Other times, you want to process just certain rows or columns of a question (such as getting the row or column sums and storing them in the database).  These reserved variables make that process relatively painless.
Precej pogosto želite ovrednotiti vse dele vprašanja, na primer prešteti, koliko podvprašanj je bilo odgovorjenih, ali sešteti ocene. Včasih želite obdelati samo določene vrstice ali stolpce vprašanja (na primer pridobiti vsote vrstic ali stolpcev in jih shraniti v bazo podatkov). Zaradi teh rezerviranih spremenljivk je ta postopek relativno neboleč.


The 'this' variable is used exclusively within the "Whole question validation equation" and "Sub-question validation equation" advanced question options.  It expands to the variable names of each of the cells within those questions.  So, if you want to make sure that each entry is greater than three, you would set the "Sub-question validation equation" to (this > 3).
Spremenljivka 'ta' se uporablja izključno v naprednih možnostih vprašanj »Enačba za preverjanje veljavnosti celotnega vprašanja« in »Enačba za preverjanje veljavnosti podvprašanja«. Razširi se na imena spremenljivk vsake celice znotraj teh vprašanj. Torej, če se želite prepričati, da je vsak vnos večji od tri, nastavite »Enačbo potrjevanja podvprašanja« na (to > 3).


The 'self' and 'that' variable are more powerful, and serve as macros which are expanded prior to processing equations.  The syntax choices are:
Spremenljivki 'jaz' in 'ta' sta močnejši in služita kot makra, ki se razširita pred obdelavo enačb. Možnosti sintakse so:
*self
*self
*self.''suffix''
*self.''suffix''
*self.''sub-selector''
*self.''sub-selector''
*self.''sub-selector''.''suffix''
*self.''sub-selector''.'' pripona''


''suffix'' is any of the normal qcode suffixes (e.g. NAOK, value, shown)
''pripona'' je katera koli običajna pripona qcode (npr. NAOK, vrednost, prikazano)


''sub-selector'' is one of:
''podizbirnik'' je eden izmed:
*comments - only subquestions that are comments (e.g. from multiple choice with comment and list with comment)
*komentarjev - samo podvprašanja, ki so komentarji (npr. iz izbire več s komentarjem in seznama s komentarjem)
*nocomments - only subquestions that are not comments
*brez komentarjev - samo podvprašanja, ki niso komentarji
*sq_X - where X is a row or column identifier.  Only subquestions matching pattern X are selected. Note that search is done on complete code identifier, then sq_X match and include subquestions nX, X, Xn (e.g. if you use sq_1, subquestions a1, 1a, 1, 11 or 001 was included). Put attention at dual scale question type where subquestions code are QCODE_SQCODE_1 and QCODE_SQCODE_1 and to ranking question type where subquestions code are QCODE_1,QCODE_2 ....
*sq_X - kjer je X identifikator vrstice ali stolpca. Izbrana so samo podvprašanja, ki se ujemajo z vzorcem X. Upoštevajte, da se iskanje izvaja po celotnem identifikatorju kode, nato se sq_X ujema in vključuje podvprašanja nX, X, Xn (npr. če uporabljate sq_1, so bila vključena podvprašanja a1, 1a, 1, 11 ali 001). Bodite pozorni na vrsto vprašanja z dvojno lestvico, kjer sta kodi podvprašanj QCODE_SQCODE_1 in QCODE_SQCODE_1, in na vrsto vprašanja za razvrščanje, kjer je koda podvprašanj QCODE_1,QCODE_2 ....
*nosq_X – kjer je X identifikator vrstice ali stolpca. Izbrana so samo podvprašanja, ki se ne ujemajo z vzorcem X. Upoštevajte, da se iskanje izvaja po celotnem identifikatorju kode, nato se ujema nosq_X in ne vključuje podvprašanj nX, X, Xn


Examples:
Primeri:
*Has any part of a question been answered?  {count(self.NAOK)>0}
*Je bil kateri koli del vprašanja odgovorjen? {count(self.NAOK)>0}
*What is the assessment score for this question?  {sum(self.value)}
*Kakšna je ocena za to vprašanje? {sum(self.value)}


You can also use these to get row and column totals.  Say you have a array of numbers with rows A-E and columns 1-5.
Te lahko uporabite tudi za pridobivanje skupnih vrednosti vrstic in stolpcev. Recimo, da imate niz števil z vrsticami AE in stolpci 1-5.
*What is the grand total?  {sum(self.NAOK)}
*Kakšna je skupna vsota? {sum(self.NAOK)}
*What is the total of row B?  {sum(self.sq_B.NAOK)}
*Kolikšna je vsota vrstice B? {sum(self.sq_B.NAOK)}
*What is the total of column 3? {sum(self.sq_3.NAOK)}
*Kolikšna je vsota stolpca 3? {sum(self.sq_3.NAOK)}


The 'that' variable is like the 'self' variable, but lets you refer to other questions.  Its syntax is:
Spremenljivka 'that' je podobna spremenljivki 'self', vendar vam omogoča, da se sklicujete na druga vprašanja. Njegova sintaksa je:
*that.''qname''
*that.''qname''
*that.''qname''.''suffix''
*that.''qname''.''suffix''
*that.''qname''.''sub-selector''
*that.''qname''.''pod-izbirnik' '
*that.''qname''.''sub-selector''.''suffix''
*that.''qname''.''podizbirnik''.''pripona''


''qname'' is the question name without any subquestion extensions.  So, say you create a question 'q1', that is its ''qname''
''qname'' je ime vprašanja brez razširitev podvprašanja. Torej, recimo, da ustvarite vprašanje "q1", to je njegovo "qname"


Examples:
Primeri:
*Has any part of question q1 been answered?  {count(that.q1.NAOK)>0}
*Ali ste odgovorili na kateri koli del vprašanja q1? {count(that.q1.NAOK)>0}
*What is the assessment score for q2?  {sum(that.q2.NAOK)}
*Kakšna je ocena za q2? {sum(that.q2.NAOK)}
*What is the grand total of q3? {sum(that.q3.NAOK)}
*Kolikšna je skupna vsota q3? {sum(that.q3.NAOK)}
*What is the total of row C in q4?  {sum(that.q4.sq_C.NAOK)}
*Kolikšna je vsota vrstice C v q4? {sum(that.q4.sq_C.NAOK)}
*What is the total of column 2 in q4? {sum(that.q4.sq_2.NAOK)}
*Kolikšna je vsota stolpca 2 v q4? {sum(that.q4.sq_2.NAOK)}


The 'self' and 'that' variables can be used in any relevance,  validation, or tailoring.
Spremenljivki 'jaz' in 'to' se lahko uporabita pri kateri koli ustreznosti, validaciji ali prilagajanju.


The one caveat is that when you use the [[Show Logic File|Show Logic File]] feature, it will show you the expanded value of 'self' and 'that'.  This lets you see the actual equation that will be generated so that you (and ExpressionScript) can validate that the variables exist.  This may seem confusing since you may see quite lenghty equations.  However, if you edit the question, you will see the original equation using 'self' and/or 'that'
Eno opozorilo je, da ko uporabite funkcijo [[Pokaži logično datoteko|Pokaži logično datoteko]], vam bo prikazala razširjeno vrednost 'sebe' in 'to'. To vam omogoča, da vidite dejansko enačbo, ki bo ustvarjena, tako da lahko vi (in upravitelj izrazov) preverite, ali spremenljivke obstajajo. To se morda zdi zmedeno, saj lahko vidite precej dolge enačbe. Vendar, če uredite vprašanje, boste videli prvotno enačbo z uporabo 'sebe' in/ali 'to'


Also note that you should not use these variables if (a) you want to explicitly name each variable used in an equation, or (b) use variables that do not have subquestions (e.g. single response questions).  In those cases, prefixing a variable with 'that' is overkill, and you run the risk of getting unexpected results.
Upoštevajte tudi, da teh spremenljivk ne smete uporabljati, če (a) želite izrecno poimenovati vsako spremenljivko, uporabljeno v enačbi, ali (b) uporabite spremenljivke, ki nimajo podvprašanj (npr. vprašanja z enim odgovorom). V teh primerih je predpona spremenljivke s 'to' pretirana in tvegate, da boste dobili nepričakovane rezultate.


==Access to Functions==
==Uporaba NAOK==  


ExpressionScript provides access to mathematical, string, and user-defined functions, as shown below.  It has PHP and JavaScript equivalents for these functions so that they work identically on server-side (PHP) and client-side (JavaScript).  It is easy to add new functions.
NAOK --> "Ni primerno" (NA) je v redu (OK)


===Implemented Functions===
Uporaba NAOK pomeni, da so vse ali nekatere spremenljivke nepomembne (npr. "Ni uporabno" (NA) je v redu (OK)).


The following functions are currently available:
Ko vstavite neko spremenljivko iz vprašanja v katero koli enačbo: če je to vprašanje (ali podvprašanje) skrito zaradi pogoja: to onemogoči vse enačbe.
 
Na primer: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) poda vedno prazen niz, če je eno podvprašanje Q1 filtrirano.
Število označenih podvprašanj v takem vprašanju lahko preštejete s count(Q1_SQ1.NAOK,Q1_SQ2.NAOK ,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Če je podvprašanje skrito :Upravitelj izrazov vrne prazen niz.
 
Brez NAOK : če je eno vprašanje ali eno podvprašanje skrito : Expression Manager vrne vedno prazen niz, enako kot false.
 
Prikazano .vedno uporablja sistem NAOK (prazen niz, če je skrit), če pa potrebujete kodo odgovora: vedno je dobro dodati .NAOK za kodo vprašanja. Razen če ga potrebujete in veste, kaj počnete.
 
Drug primer in informacije so na voljo na [[#Overriding_Cascading_Conditions|Preglasitev kaskadnih pogojev]]
 
==Dostop do funkcij==
 
Expression Manager omogoča dostop do matematičnih, nizovnih in uporabniško definiranih funkcij, kot je prikazano spodaj. Za te funkcije ima ekvivalente PHP in JavaScript, tako da delujejo enako na strani strežnika (PHP) in strani odjemalca (JavaScript). Dodajanje novih funkcij je preprosto.
 
===Implementirane funkcije===
 
Trenutno so na voljo naslednje funkcije:


{| class="wikitable"
{| class="wikitable"
Line 687: Line 712:
|[http://www.php.net/manual/en/function.cos.php cos]||Cosine||number cos(number)
|[http://www.php.net/manual/en/function.cos.php cos]||Cosine||number cos(number)
|-
|-
|count||count the number of answered (non-blank)questions in the list||number count(arg1, arg12, ..., argN)
|count||count the number of answered (non-blank) questions in the list||number count(arg1, arg12, ..., argN)
|-
|-
|countif||Count the number of answered questions in the list equal the first argument||number countif(matches, arg1, arg2, ... argN)
|countif||Count the number of answered questions in the list equal to the first argument||number countif(matches, arg1, arg2, ... argN)
|-
|-
|countifop||Count the number of answered questions in the list which pass the criteria (arg op value)||number countifop(op, value, arg1, arg2, ... argN)
|countifop||Count the number of answered questions in the list which pass the criteria (arg op value)||number countifop(op, value, arg1, arg2, ... argN)
Line 713: Line 738:
|[http://www.php.net/manual/en/function.idate.php idate]||Format a local time/date as integer||string idate(string <nowiki>[</nowiki>, timestamp=time()])
|[http://www.php.net/manual/en/function.idate.php idate]||Format a local time/date as integer||string idate(string <nowiki>[</nowiki>, timestamp=time()])
|-
|-
|if||Excel-style if(test,result_if_true,result_if_false)||if(test,result_if_true,result_if_false)
|if{{UpdatedIn|3.0.2}}||Excel-style if(test,result_if_true<nowiki>[</nowiki>,result_if_false = &quot;&quot;<nowiki>]</nowiki>)||if(test,result_if_true<nowiki>[</nowiki>,result_if_false = &quot;&quot;<nowiki>]</nowiki>)
|-
|-
|[http://www.php.net/manual/en/function.implode.php implode]||Join array elements with a string||string implode(glue,arg1,arg2,...,argN)
|[http://www.php.net/manual/en/function.implode.php implode]||Join array elements with a string||string implode(glue,arg1,arg2,...,argN)
Line 736: Line 761:
|-
|-
|list||Return comma-separated list of non-blank values||string list(arg1, arg2, ... argN)
|list||Return comma-separated list of non-blank values||string list(arg1, arg2, ... argN)
|-
|listifop{{NewIn|3.16.1}}||Return a 'glue'-separated list of the specified question property (retProp) from questions in the list which pass the criteria (cmpProp op value)||string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
|-
|-
|[http://www.php.net/manual/en/function.log.php log]|| The logarithm of number to base, if given, or the natural logarithm. ||number log(number,base=e)
|[http://www.php.net/manual/en/function.log.php log]|| The logarithm of number to base, if given, or the natural logarithm. ||number log(number,base=e)
Line 763: Line 790:
|[http://www.php.net/manual/en/function.quotemeta.php quotemeta]||Quote meta characters||string quotemeta(string)
|[http://www.php.net/manual/en/function.quotemeta.php quotemeta]||Quote meta characters||string quotemeta(string)
|-
|-
|[http://www.php.net/manual/en/function.rand.php rand]||Generate a random integer, see [[ExpressionScript Sample Surveys#Randomly Ask One Question Per Group|this example]]||int rand() OR int rand(min, max)
|[http://www.php.net/manual/en/function.rand.php rand]||Generate a random integer, see [[Expression Manager sample surveys#Randomly Ask One Question Per Group|this example]]||int rand() OR int rand(min, max)
|-
|-
|regexMatch||compare a string to a [[Using regular expressions|regular expression]]||bool regexMatch(pattern,input)
|regexMatch||compare a string to a [[Using regular expressions|regular expression]]||bool regexMatch(pattern,input)
Line 791: Line 818:
|[http://www.php.net/manual/en/function.strip-tags.php strip_tags]||Strip HTML and PHP tags from a string||string strip_tags(str, allowable_tags)
|[http://www.php.net/manual/en/function.strip-tags.php strip_tags]||Strip HTML and PHP tags from a string||string strip_tags(str, allowable_tags)
|-
|-
|[http://www.php.net/manual/en/function.stripos.php stripos]||Find position of first occurrence of a case-insensitive string||int stripos(haystack, needle <nowiki>[</nowiki>, offset=0])
|[http://www.php.net/manual/en/function.stripos.php stripos]||Find position of first occurrence of a case-insensitive unicode string (starting by 0, return false if not found)|||int stripos(haystack, needle <nowiki>[</nowiki>, offset=0])
|-
|-
|[http://www.php.net/manual/en/function.stripslashes.php stripslashes]||Un-quotes a quoted string||string stripslashes(string)
|[http://www.php.net/manual/en/function.stripslashes.php stripslashes]||Un-quotes a quoted string||string stripslashes(string)
Line 799: Line 826:
|[http://www.php.net/manual/en/function.strlen.php strlen]||Get string length||int strlen(string)
|[http://www.php.net/manual/en/function.strlen.php strlen]||Get string length||int strlen(string)
|-
|-
|[http://www.php.net/manual/en/function.strpos.php strpos]||Find position of first occurrence of a string||int strpos(haystack, needle <nowiki>[</nowiki> offset=0])
|[http://www.php.net/manual/en/function.strpos.php strpos]||Find position of first occurrence of an unicode string (starting by 0, return false if not found)||int strpos(haystack, needle <nowiki>[</nowiki> offset=0])
|-
|-
|[http://www.php.net/manual/en/function.strrev.php strrev]||Reverse a string||string strrev(string)
|[http://www.php.net/manual/en/function.strrev.php strrev]||Reverse a string||string strrev(string)
|-
|-
|[http://www.php.net/manual/en/function.strstr.php strstr]||Find first occurrence of a string||string strstr(haystack, needle)
|[http://www.php.net/manual/en/function.strstr.php strstr]||Find first occurrence of a string||string strstr(haystack, needle<nowiki>[</nowiki>, before_needle=false])
|-
|-
|[http://www.php.net/manual/en/function.strtolower.php strtolower]||Make a string lowercase||string strtolower(string)
|[http://www.php.net/manual/en/function.strtolower.php strtolower]||Make a string lowercase||string strtolower(string)
Line 811: Line 838:
|[http://www.php.net/manual/en/function.strtoupper.php strtoupper]||Make a string uppercase||string strtoupper(string)
|[http://www.php.net/manual/en/function.strtoupper.php strtoupper]||Make a string uppercase||string strtoupper(string)
|-
|-
|[http://www.php.net/manual/en/function.substr.php substr]||Return part of a string||string substr(string, start <nowiki>[</nowiki>, length])
|[http://www.php.net/manual/en/function.substr.php substr]||Return part of an unicode string||string substr(string, start <nowiki>[</nowiki>, length])
|-
|-
|sum||Calculate the sum of values in an array||number sum(arg1, arg2, ... argN)
|sum||Calculate the sum of values in an array||number sum(arg1, arg2, ... argN)
Line 828: Line 855:
|}
|}


===Functions that are Planned or Being Considered===
===Funkcije, ki so načrtovane ali obravnavane===


Other functions that are planned (or being considered) but which are not implemented yet include the following.  Some of these are for backwards compatability with another survey tool.
Druge funkcije, ki so načrtovane (ali se obravnavajo), vendar še niso izvedene, vključujejo naslednje. Nekateri od teh so namenjeni za nazaj združljivost z drugim raziskovalnim orodjem.


{| class="wikitable"
{| class="wikitable"
!Syntax!!Meaning!!Comments
!Sintaksa!!Pomen!!Komentarji
|-
|e()||returns the value of e||
|-
|formatDate(X,PAT)||return the string value of date X formatted according to Java data format pattern PAT||
|-
|-
|formatNumber(X,PAT)||return the string value of number X formatted according to Java number format pattern PAT||
|e()||vrne vrednost e||
|-
|-
|getAnsOption(X)||returns the text corresponding to the selected option for answer X||this is the same as X.shown
|formatDate(X, PAT)||vrni vrednost niza datuma X, oblikovano v skladu z vzorcem zapisa podatkov Java PAT||
|-
|-
|getAnsOption(X,Y)||returns the text corresponding to the option at index Y of node X||
|formatNumber(X,PAT)||vrni vrednost niza števila X, oblikovano v skladu s številko Java vzorec formata PAT||
|-
|-
|getRelevance(X)||returns the relevance equation for question X||
|getAnsOption(X)|| [[ExpressionAnswerOptions|Osnovni vtičnik ExpressionAnswerOptions ]] ||
|-
|-
|getStartTime()||returns the date corresponding to the system time when the interview was started||
|getAnsOption(X,Y)|| [[ExpressionAnswerOptions|Osnovni vtičnik ExpressionAnswerOptions ]] ||
|-
|-
|getType(X)||returns the string name of the datatype - e.g. *NA* if isNA()||
|getRelevance(X)||vrne enačbo pomembnosti za vprašanje X||
|-
|-
|gotoFirst()||jumps to the first relevant set of questions - this violates the normal flow of the system||
|getStartTime()||vrne datum, ki ustreza sistemskemu času, ko se je intervju začel||
|-
|-
|gotoNext()||jumps to the next set of relevant questions - this violates the normal flow of the system||
|getType(X)||vrne ime niza podatkovnega tipa - npr. *NA*, če jeNA()||
|-
|gotoFirst()||skoči na prvi ustrezen niz vprašanj - to krši normalni tok sistema||
|-
|-
|gotoPrevious()||jumps to the previous set of relevant questions - this violates the normal flow of the system||
|gotoNext()||skoči na naslednji niz vprašanj relevantna vprašanja - to krši običajni tok sistema||
|-
|-
|isAsked(X)||returns true if the answer is neither *NA*, *INVALID*, nor *UNASKED*||
|gotoPrevious()||skoči na prejšnji niz relevantnih vprašanj - to krši normalen tok sistema||
| -
|isAsked(X)||vrne true, če odgovor ni niti *NA*, *INVALID*, niti *UNASKED*||
|-
|-
|isInvalid(X)||returns true if the answer is of type *INVALID*||
|isInvalid(X)||vrne true, če odgovor je tipa *INVALID*||
|-
|-
|isNA(X)||returns true if the answer is of type *NA*||
|isNA(X)||vrne true, če je odgovor tipa *NA*||
|-
|-
|isNotUnderstood(X)||returns true if the answer if of type *HUH*||
|isNotUnderstood(X)||vrne true, če je odgovor tipa *HUH*||
|-
|-
|isRefused(X)||returns true if the answer is of type *REFUSED*||
|isRefused(X)||vrne true, če je odgovor tipa *REFUSED*||
|-
|-
|isSpecial(X)||returns true if the answer is of type *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN*, or *HUH*||
isSpecial(X)||vrne true, če je odgovor tipa *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* ali *HUH*||
|-
|-
|isUnknown(X)||returns true if the answer is of type *UNKNOWN*||
|isUnknown(X)||vrne true, če je odgovor tipa *UNKNOWN*||
|-
|-
|jumpTo(X)||jump to the group containing the named question -- this violates the normal flow of the system||
|jumpTo(X)||skoči v skupino, ki vsebuje imenovano vprašanje -- to krši običajno tok sistema||
|-
|-
|jumpToFirstUnasked()||jump to the first unasked question <strike> thus bypassing previous answered questions </strike> this violates the normal flow of the system||
|jumpToFirstUnasked()||skok na prvo nepostavljeno vprašanje <strike>in tako zaobide prejšnja odgovorjena vprašanja</strike> , kar krši normalni tok sistema||
|-
|-
|lastIndexOf(X,Y)||returns the last index (base 0) of string Y in string X. Returns -1 if Y is not contained within X||
| lastIndexOf(X,Y)||vrne zadnji indeks (osnova 0) niza Y v nizu X. Vrne -1, če Y ni v X||
|-
|-
|list(X,...)||a string containing a comma separated list of the positive values with "and" separating the last two||
|list(X,.. .)||niz, ki vsebuje z vejicami ločen seznam pozitivnih vrednosti z "in", ki ločuje zadnji dve ||
|-
|-
|mean(X,...)||returns the mean of a list of values||
|mean(X,...)||vrne povprečje seznama vrednosti||
|-
|-
|numAnsOptions(X)||returns the number of answer options that question X has||
|numAnsOptions(X)||vrne število možnosti odgovora, ki jih ima vprašanje X||
|-
|-
|orlist(X,...)||a string containing a comma separated list of the positive values, with "or" separting the last two||
|orlist(X,...)|| niz, ki vsebuje seznam pozitivnih vrednosti, ločenih z vejicami, z "ali" loči zadnji dve ||
|-
|-
|parseDate(X,PAT)||returns the date value of string X parsed with Java date format pattern PAT||
|parseDate(X,PAT)||vrne datumsko vrednost niza X, razčlenjeno z datumom Java vzorec formata PAT||
|-
|-
|parseNumber(X,PAT)||returns the numerical value of string X parsed with Java number format pattern PAT||
|parseNumber(X,PAT)||vrne številsko vrednost niza X, razčlenjenega z vzorcem formata števila Java PAT||
|-
|-
|showAllResponsesExcept( questionList,attributeList,attributeTitleList)||questionList = pipe-delimited list of question identifiers; attributeList = pipe-delimited list of attributes (like question#, title, text, type - so you can decide what to show); attributeTitleList = pipe-delimited list of table headers, so can internationalize the report.||
|showAllResponsesExcept( questionList ,attributeList,attributeTitleList)||questionList = s črto ločen seznam identifikatorjev vprašanj; attributeList = s črto ločen seznam atributov (kot je vprašanje #, naslov, besedilo, vrsta - tako da se lahko odločite, kaj želite prikazati); attributeTitleList = z navpičnimi črtami ločen seznam glav tabel, tako da lahko internacionalizirate poročilo.||
|-
|-
|showTheseResponses( questionList,attributeList,attributeTitleList)||questionList = pipe-delimited list of question identifiers; attributeList = pipe-delimited list of attributes (like question#, title, text, type - so you can decide what to show); attributeTitleList = pipe-delimited list of table headers, so can internationalize the report.||  
|showTheseResponses( questionList,attributeList,attributeTitleList)||questionList = z navpičnimi črtami ločen seznam identifikatorjev vprašanj; attributeList = s črto ločen seznam atributov (kot je vprašanje #, naslov, besedilo, vrsta - tako da se lahko odločite, kaj želite prikazati); attributeTitleList = s črto ločen seznam glav tabel, tako da lahko internacionalizirate poročilo.||  
|}
|}


==ExpressionScript Knows Which Variables are Local==
==Upravitelj izrazov ve, katere spremenljivke so lokalne==


In order to properly build the JavaScript for page, ExpressionScript needs to know which variables are set on the page, and what their JavaScript ID is (e.g. for document.getElementById(x)).  It also must know which variables are set on other pages (so that it can ensure that the needed <input type='hidden' value='x'> fields are present and populated).
Da pravilno zgradi JavaScript za stran, mora Expression Manager vedeti, katere spremenljivke so nastavljene na strani in kakšen je njihov ID JavaScript (npr. za document.getElementById(x)). Prav tako mora vedeti, katere spremenljivke so nastavljene na drugih straneh (da lahko zagotovi, da so potrebne<input type='hidden' value='x'> polja so prisotna in poseljena).


==Cascading Conditions==
==Kaskadni pogoji==


If any of the variables are irrelevant, the whole equation will be irrelevant (false).  For example, in the following table, N/A means that one of the variables was not relevant
Če je katera od spremenljivk nepomembna, bo celotna enačba nepomembna (napačna). Na primer, v naslednji tabeli N/A pomeni, da ena od spremenljivk ni bila ustrezna


{| class="wikitable"
{| class="wikitable"
!Operator!!Example!!a!!b!!Result
!Operator!!Primer!!a!!b!!Rezultat
|-
|-
|<nowiki>+ (unary)</nowiki>||<nowiki>+a</nowiki>||N/A|| ||false
|<nowiki> + (enarni)</nowiki> ||<nowiki> +a</nowiki> ||N/V|| ||false
|-
|-
|- (unary)||-a||N/A|| ||false
|- (enarno)||-a||N/A|| ||false
|-
|-
|!||!a||N/A|| ||false
|!||!a||N/A|| ||false
|-
|-
|== (or eq)||a == b||N/A||5||false
|== (ali eq)||a == b||N/A||5||false
|-
|== (or eq)||a == b||N/A||0||false
|-
|-
|== (or eq)||a == b||N/A||N/A||false
|== (ali eq) ||a == b||N/A||0||false
|-
|-
|!= (or ne)||a != b||N/A||5|| false
|== (ali eq)||a == b||N/A||N/A|| false
|-
|-
|!= (or ne)||a != b||N/A||N/A|| false
|!= (ali ne)||a != b||N/A||5|| false
|-
|-
|!= (or ne)||a != b||N/A||0||false
|!= (ali ne)||a != b||N/A||N/A|| false
|-
|-
|> (or gt)||a > b||N/A||5|| false
|!= (ali ne)||a != b||N/A||0||false
|-
|-
|>= (or ge)||a >= b||N/A||5||false
|> (ali gt)||a > b||N/A||5|| false
|-
|-
|< (or lt)||a < b||N/A||5||false
|>= (ali ge)||a >= b||N/A||5||false
|-
|-
|<= (or le)||a <= b||N/A||5||false
|< (ali lt)||a < b||N/A||5||false
|-
|-
|and||a and b||N/A||5||false
|<= (ali le)||a <= b||N/A||5||false
|-
|in||a in b||N/A||5||false
|-
|-
|and||a and b||N/A||N/A||false
|in||a in b||N/A||N/A||false! N!|-
|ali||a ali b||N/A||N/A||false
|-
|-
|or||a or b||N/A||N/A||false
|ali||a ali b||N/A||5 ||false
|-
|-
|or||a or b||N/A||5||false
|<nowiki> +</nowiki> ||a + b||N/A||5||false
|-
|<nowiki>+</nowiki>||a + b||N/A||5||false
|-
|-
|-||a - b||N/A||5||false
|-||a - b||N/A||5||false
|-
|-
|*||a * b||N/A||5||false
|*||a * b||N/A||5||false
|-
|-
|/||a / b||5||N/A||false
|/||a / b||5||N/A||false
Line 951: Line 977:
|(exp)||(a && b)||N/A||5||false
|(exp)||(a && b)||N/A||5||false
|-
|-
|(exp) op (exp)||(b + b) > (a && b)||N/A||5||false
|(exp) op (exp)| |(b + b) > (a && b)||N/A||5||false
|-
|-
|function||sum(a,b,b)||N/A||5||false
|funkcija||vsota(a,b,b)||N/A|| 5||false
|-
|-
|function||max(a,b)||N/A||5||false
|funkcija||max(a,b)||N/A||5||false
|-
|-
|function||min(a,b)||N/A||5||false
|funkcija||min(a,b)||N/A||5||false
|-
|-
|function||implode(', ',a,b,a,b)||N/A||5||false
|funkcija||implode(', ',a,b,a,b)||N/A||5||false! N!|-
|funkcija||if(a,a,b)||N/A||5||false
|-
|-
|function||if(a,a,b)||N/A||5||false
|funkcija||je_prazna(a)||N/ A|| ||false
|-
|-
|function||is_empty(a)||N/A|| ||false
|funkcija||je_prazna(a)||0 (ali prazno)|| ||true
|-
|-
|function||is_empty(a)||0 (or blank)|| ||true
|funkcija||!je_prazna(a)||N/A|| ||false
|-
|function||!is_empty(a)||N/A|| ||false
|}
|}


===Overriding Cascading Conditions===
===Preglasitev kaskadnih pogojev===


Say you want to show a running total of all relevant answers.  You might try to use the equation {sum(q1,q2,q3,...,qN)}.  However, this gets translated internally to LEMif(LEManyNA('q1','q2','q3',...,'qN'),'',sum(LEMval('q1'),LEMval('q2'),LEMval('q3'),...,LEMval('qN'))).  So, if any of the values q1-qN are irrelevant, the equation will always return false.  In this case, the sum() will show 0 until all questions are answered.
Recimo, da želite prikazati seštevek vseh ustreznih odgovorov. Lahko poskusite uporabiti enačbo {sum(q1,q2,q3,...,qN)}. Vendar se to interno prevede v LEMif(LEManyNA('q1','q2','q3',...,'qN'),'',sum(LEMval('q1'),LEMval('q2') ,LEMval('q3'),...,LEMval('qN'))). Torej, če je katera od vrednosti q1-qN nepomembna, bo enačba vedno vrnila false. V tem primeru bo vsota () prikazovala 0, dokler ne odgovorite na vsa vprašanja.


To get around this, each variable can have a ".NAOK" suffix (meaning that Not Applicable is OK) added to it.  In such cases, the following behavior occurs.  Say you have a variable q1.NAOK
Da bi se temu izognili, lahko vsaki spremenljivki dodamo pripono ".NAOK" (kar pomeni, da je Not Applicable OK). V takih primerih se pojavi naslednje vedenje. Recimo, da imate spremenljivko q1.NAOK
#q1 is not added to the LEManyNA() clause
#q1 ni dodan členu LEManyNA()
#LEMval('q1') will  continue to check whether the response is relevant, and will return <nowiki>''</nowiki> if it is not (so individual irrelevant responses will be ignored, but they will not void the entire expression).
#LEMval('q1') bo še naprej preverjal, ali je odgovor ustrezen, in vrnil<nowiki> ''</nowiki> če ni (zato bodo posamezni nepomembni odgovori prezrti, vendar ne bodo razveljavili celotnega izraza).


So, the solution to the running total problem is to use the equation sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).
Torej je rešitev tekočega skupnega problema uporaba enačbe sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).


The use of the .NAOK suffix also lets authors design surveys that have several possible paths but then converge on common paths later.  For example, say subjects answer a survey in a way that is outside the normal range of responses.  The author could alert the subjects that they may not get valid results, and ask them whether they really want to  continue with the survey.  If they say Yes, then the rest of the questions will be shown.  The condition for the "rest of the questions" would check whether the initial responses were answered within the normal range OR whether the subject said Yes to the question that is only relevant if they answered outside the normal range.
Uporaba pripone .NAOK avtorjem omogoča tudi oblikovanje anket, ki imajo več možnih poti, vendar se pozneje združijo na skupne poti. Recimo, da subjekti na anketo odgovorijo na način, ki je izven običajnega obsega odgovorov. Avtor bi lahko subjekte opozoril, da morda ne bodo dobili veljavnih rezultatov, in jih vprašal, ali res želijo nadaljevati z raziskavo. Če odgovorijo z Da, bodo prikazana preostala vprašanja. Pogoj za "preostala vprašanja" bi preverjal, ali je bil odgovor na začetne odgovore znotraj običajnega obsega ALI ali je preiskovanec rekel pritrdilno na vprašanje, ki je pomembno le, če je odgovoril zunaj običajnega obsega.


==How does ExpressionScript Support Conditional Micro-Tailoring?==
==Kako Expression Manager podpira pogojno mikro krojenje?==


Here is an example of micro-tailoring (where Question Type=='expr' means an Equation):
Tukaj je primer mikrokrojenja (kjer Question Type=='expr' pomeni enačbo):


{| class="wikitable"
{| class="wikitable"
!Question Code!!Relevance!!Question Type!!Question
!Koda vprašanja!!Ustreznost!!Vrsta vprašanja!!Vprašanje
|-
|-
|name||1||text||What is your name?
|ime||1||besedilo||Kako ti je ime?
|-
|-
|age||1||text||How old are you?
|age||1||text||Koliko si star?
|-
|-
|badage||!is_empty(age)||expr||{(age<16) or (age>80)}
|značka||!is_empty(age)||expr||{(starost<16) ali (starost>80)}
|-
|-
|agestop||badage||message||Sorry, {name}, you are too {if( (age<16),'young',if( (age>80),'old','middle-aged') ) } for this test.
|agestop||značka||sporočilo||Oprosti, {name}, tudi ti si {if( (starost<16),'young',if( (starost>80), 'star','srednjih let') ) } za ta test.
|-
|-
|kids||!badage||yesno||Do you have children?
|otroci||!značka||dano||Imate otroke?
|-
|-
|parents||1||expr||{!badage && kids=='Y'}
|starši ||1||expr||{!badage && kids=='Y'}
|-
|-
|numKids||parents||text||How many children do you have?
|numKids||starši||text||Koliko otrok imate?
|-
|-
|kid1||parents && numKids >= 1||text||How old is your first child?
|kid1||starši && numKids >= 1||besedilo||Koliko je star vaš prvi otrok?
|-
|-
|kid2||parents && numKids >= 2||text||How old is your second child?
|kid2||starši && numKids >= 2||besedilo||Koliko je star vaš drugi otrok?
|-
|-
|kid3||parents && numKids >= 3||text||How old is your third child?
|kid3||starši && numKids >= 3||text||Koliko je star vaš tretji otrok?
|-
|-
|kid4||parents && numKids >= 4||text||How old is your fourth child?
|kid4||starši && numKids > = 4||text||Koliko je star vaš četrti otrok?
|-
|-
|kid5||parents && numKids >= 5||text||How old is your fifth child?
|kid5||starši && numKids >= 5||text||Koliko je star vaš peti otrok?
|-
|-
|sumage||1||expr||{sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
|sumage||1||expr||{sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
|-
|-
|report||parents||yesno||{name}, you said you are {age} and that you have {numKids}.  The sum of ages of your first {min(numKids,5)} kids is {sumage}
|poročilo||starši| |yesno||{name}, rekli ste, da ste stari {age} in da imate {numKids}. Vsota starosti vaših prvih {min(numKids,5)} otrok je {sumage}
|}
|}


All of these questions can be on a single page (e.g. in the same group), and only the relevant questions will display.  Moreover, as you enter the ages of children, the sum() expression in the last question will dynamically update on the page.
Vsa ta vprašanja so lahko na eni strani (npr. v isti skupini), prikazana pa bodo le ustrezna vprašanja. Poleg tega, ko vnesete starost otrok, se izraz sum() v zadnjem vprašanju dinamično posodablja na strani.


ExpressionScript provides this functionality by surrounding each expression with a named <span> element.  Every time a value changes, it recomputes the expression that should appear in that <span> element and regenerates the display.  You can have dozens, or even hundreds, of such tailored expressions on the same page, and the page will re-display all of them in a single screen refresh.
<html>Upravitelj izrazov zagotavlja to funkcionalnost tako, da vsak izraz obda z imenovanim<nowiki></nowiki> <span>element. Vsakič, ko se vrednost spremeni, znova izračuna izraz, ki bi se moral pojaviti v njej</span><nowiki></nowiki> <span><span>element in regenerira zaslon. Na isti strani imate lahko na desetine ali celo stotine takšnih prilagojenih izrazov in stran jih bo ponovno prikazala vse ob eni sami osvežitvi zaslona.</span></span>


==Mapping of LimeSurvey 1.91+ to ExpressionScript Functionality==
==Preslikava LimeSurvey 1.91+ v funkcijo Expression Manager==


{| class="wikitable"
{| class="wikitable"
!Old Feature!!New Feature!!Comments
!Stara funkcija!!Nova funkcija!!Komentarji
|-
|-
|Conditions||Relevance||You can use very complex conditional equations, and access a broader range of variables
|Pogoji||Ustreznost||Uporabite lahko zelo zapletene pogojne enačbe in dostopate do širšega nabora spremenljivk!N !|-
|Ocene||Enačba||Vsak rezultat ocenjevanja je mogoče prestrukturirati v enačbo. To zagotavlja, da se rezultat zapiše v zbirko podatkov, poleg tega pa vam omogoča ogled dinamičnih sprememb vrednosti rezultata na trenutni strani
|-
|-
|Assessments||Equation||Any assessment scores can be re-structured into an Equation. This both ensures that the score is written to the database, and also lets you see dynamic changes to the score value on the current page
|Zamenjave||Upravitelj izrazov||Jedrni mehanizem sprejme vhodni niz in vse v zavitih oklepajih obravnava kot izraz - tako obravnava vse vrste zgodovinskih zamenjav. Da ne bi pokvaril vdelanega JavaScripta, Expression Manager obdeluje samo vsebino med zavitimi oklepaji, če (a) v zavitih oklepajih ni presledka na začetku ali na koncu – npr. {expr} je izraz, vendar {expr}, {expr }, in {expr} nista izraza. Poleg tega Expression Manager ne obdeluje vsebine znotraj lastnih nizov (npr. {list('hi','there {braces}')} ustvari "hi there {braces}"). Prav tako ignorira ubežne zavite oklepaje (npr. \{to ni izraz\})
|-
|-
|Replacements||ExpressionScript||The core engine takes the input string and treats everything within curly braces as an Expression - so it handles all historical replacements types.  To avoid messing up embedded JavaScript, ExpressionScript only processes content between curly braces as long as (a)  there is no leading or trailing whitespace within the curly braces - e.g. {expr} is an expression, but { expr}, {expr }, and { expr } are not expressions.  Furthermore, ExpressionScript does not process content within its own strings (e.g. {list('hi','there {braces}')} generates "hi there {braces}").  It also ignores escaped curly braces (e.g. \{this is not an expression\})
|Preverjanje||Upravitelj izrazov||Načrt je, da vzamemo trenutne najmanjše/največje atribute vprašanja in imamo upravitelja izrazov jih obdelati. Tako so lahko najmanjše/maksimalne vrednosti same izrazi
|-
|Validation||ExpressionScript||The plan is to take the current min/max Question Attributes and have ExpressionScript process them.  That way the min/max values can be expressions themselves
|}
|}


=Syntax Highlighting=
=Označevanje sintakse=


To help with entering and validating expressions, EM provides syntax highlighting with the following features:
Za pomoč pri vnosu in preverjanju izrazov EM zagotavlja označevanje sintakse z naslednjimi funkcijami:


==Types and Meanings of Syntax Highlighting==
==Vrste in pomen označevanja sintakse==


{| class="wikitable"
{| class="wikitable"
!Color!!Sample!!Meaning!!Tooltip!!Comments
!Barva!!Vzorec!!Pomen!!Namig!!Komentarji
|-
|-
|tan background||style='background-color: #eee8aa'|Sample||the whole equation||none||Anything within curly braces that is recognized as an equation (e.g. there is no leading or trailing whitepace) will be color-coded with a tan background to help distinguish it from surrounding text
|rjavo ozadje||style='background-color: #eee8aa'|Vzorec|| celotna enačba||nič||Vse, kar je v zavitih oklepajih, kar je prepoznano kot enačba (npr. ni uvodne ali končne črte), bo barvno kodirano s rjavim ozadjem, da se bo lažje razlikovalo od okoliškega besedila
|-
|-
|blue bold text||style='color:blue; background-color:#eee8aa'|'''Sample'''||function name||meaning and allowable syntax||function names, or things that should be functions since they are followed by an opening parenthesis, are presented in bold blue text.  Tooltips show the meaning and allowable syntax for the function.
|krepko rdeče besedilo||style='color:#ff0000; background-color:#eee8aa'|''''Vzorec'''||Napaka||Nekaj pojasnil o napaki||Lahko je neznana spremenljivka ali napaka v funkciji, .... Anketa je lahko popolnoma pokvarjena, to ne ni prikazan javnemu uporabniku.
|-
|-
|grey text||style='color:grey; background-color:#eee8aa'|Sample||string||none||single and double-quoted strings are shown in grey text
|modro besedilo||style='color:#0000ff; background-color:#eee8aa'|Vzorec||ime funkcije||pomen in dovoljena sintaksa||imena funkcij ali stvari, ki bi morale biti funkcije, ker jim sledi začetni oklepaj, so predstavljene v krepkem modrem besedilu. Opisi orodij prikazujejo pomen in dovoljeno sintakso za funkcijo.
|-
|-
|bold maroon text||style='color:maroon; background-color:#eee8aa'|'''Sample'''||variable set on the same page, but after the current question||<nowiki>[</nowiki>name or SGQA code]: question; value; answerList showing codes for each value||Any variable that is set on the same page but after the current question is shown in bold maroon text.  This color coding should alert authors to possible errors in question sequencing; but it is allowed since some authors may want this sequence of variables a page, especially for dynamic reports.  The tooltip shows its name (if you used INSERTANS:xxx) or SGQA code (if you used the new naming system), the actual question, and its current value (or blank if not set).  If the question type expects responses from an enumerated value set, the mapping of the codes to display values is show.
|sivo besedilo||style='color:#808080; background-color:#eee8aa'|Vzorec||string||brez||nizi z enojnimi in dvojnimi narekovaji so prikazani v sivem besedilu
|-
|-
|bold cyan text||style='color:#4C88BE; background-color:#eee8aa'|'''Sample'''||variable set on the same page, prior to the current question||<nowiki>[</nowiki>name or SGQA code]: question; value; answerList showing codes for each value||Any variable that is set on the same page and prior to the current question is shown in bold cyan text. The tooltip shows its name (if you used INSERTANS:xxx) or SGQA code (if you used the new naming system), the actual question, and its current value (or blank if not set). If the question type expects responses from an enumerated value set, the mapping of the codes to display values is show.
|cyan text||style='color:#4169e1; background-color:#eee8aa'|Vzorec||nastavljena spremenljivka na isti strani,||<nowiki> [</nowiki> ime ali koda SGQA]: vprašanje; vrednost; Seznam odgovorov, ki prikazuje kode za vsako vrednost||Katera koli spremenljivka, ki je nastavljena na isti strani kot trenutno vprašanje, je prikazana v cian besedilu, kar kaže, da jo je mogoče posodobiti v javascriptu. Opis orodja prikazuje njegovo ime (če ste uporabili INSERTANS:xxx) ali kodo SGQA (če ste uporabili nov sistem poimenovanja), dejansko vprašanje in njegovo trenutno vrednost (ali prazno, če ni nastavljeno). Če vrsta vprašanja pričakuje odgovore iz nabora oštevilčenih vrednosti, je preslikava kod v prikazane vrednosti prikazana.
|-
|-
|bold green text||style='color:green; background-color:#eee8aa'|'''Sample'''||variable set on a prior page||<nowiki>[</nowiki>name or SGQA code]: question; value; answerList showing codes for each value||Any variable that is set on a prior page is shown in bold green text. The tooltip shows its name (if you used INSERTANS:xxx) or SGQA code (if you used the new naming system), the actual question, and its current value (or blank if not set). If the question type expects responses from an enumerated value set, the mapping of the codes to display values is show.
|zeleno besedilo||style='color:#008000; background-color:#eee8aa'|Vzorec||spremenljivke, nastavljene na prejšnji strani||<nowiki> [</nowiki> ime ali koda SGQA]: vprašanje; vrednost; Seznam odgovorov, ki prikazuje kode za vsako vrednost||Katera koli spremenljivka, ki je nastavljena na prejšnji strani, je prikazana s krepkim zelenim besedilom. Opis orodja prikazuje njegovo ime (če ste uporabili INSERTANS:xxx) ali kodo SGQA (če ste uporabili nov sistem poimenovanja), dejansko vprašanje in njegovo trenutno vrednost (ali prazno, če ni nastavljeno). Če vrsta vprašanja pričakuje odgovore iz nabora oštevilčenih vrednosti, je preslikava kod v prikazane vrednosti prikazana.
|-
|-
|bold pink text||style='color:#FF00FF; background-color:#eee8aa'|'''Sample'''||variable set on a later page||<nowiki>[</nowiki>name or SGQA code]: question; value; answerList showing codes for each value||Any variable that is set on a prior page is shown in bold pink text. These are erorrs since the variable is  being used before it is declareed.  The tooltip shows its name (if you used INSERTANS:xxx) or SGQA code (if you used the new naming system), the actual question, and its current value (or blank if not set). If the question type expects responses from an enumerated value set, the mapping of the codes to display values is show.
|krepko roza besedilo||style='color:#9370db; barva ozadja:#eee8aa'|Vzorec||nastavljena spremenljivka na poznejši strani <sup>na splošno: prazna na začetku ankete, lahko pa se zapolni z indeksom ali premakne prejšnjo</sup> ||<nowiki> [</nowiki> ime ali koda SGQA]: vprašanje; vrednost; Seznam odgovorov, ki prikazuje kode za vsako vrednost||Vsaka spremenljivka, ki je nastavljena na naslednji strani, je prikazana v krepkem rožnatem besedilu. Opis orodja prikazuje njegovo ime (če ste uporabili INSERTANS:xxx) ali kodo SGQA (če ste uporabili nov sistem poimenovanja), dejansko vprašanje in njegovo trenutno vrednost (ali prazno, če ni nastavljeno). Če vrsta vprašanja pričakuje odgovore iz nabora oštevilčenih vrednosti, je preslikava kod v prikazane vrednosti prikazana.
|-
|-
|bold tan text||style='color:#996600; background-color:#eee8aa'|'''Sample'''||a lime replacement value||the value||Lime Replacement Strings (like {TOKEN:xxx}, {PRIVACY_MESSAGE}) are shown in bold tan text.
|krepko rumeno besedilo||style='color:#a0522d; background-color:#eee8aa'|Vzorec||nadomestna vrednost limete||vrednost||Nizovi zamenjave apna (kot {TOKEN:xxx}, {PRIVACY_MESSAGE}) so prikazani v krepkem rjavem besedilu.  
|-
|-
|red text||style='color:red; background-color:#eee8aa'|Sample||assignment operator||warning message||If you use one of the assignment operator (=) that operator will be displayed in red text. This is meant to help prevent accidental re-assignment of values when you really meant to check whether a == b instead of  setting the value of a = b.
|rdeče besedilo||style='color:#ff4500; background-color:#eee8aa'|Vzorec||operator dodelitve (=) ||opozorilno sporočilo||Če uporabite enega od operatorjev dodelitve (=), bo ta operator prikazan v rdečem besedilu. To naj bi pomagalo preprečiti nenamerno ponovno dodelitev vrednosti, ko ste dejansko želeli preveriti, ali je a == b namesto nastavitve vrednosti a = b.
|-
|-
|normal black text||style='color:black; background-color:#eee8aa'|Sample||punctuation||none||All other punctuation within the expression is shown as normal black text.
|običajno črno besedilo||style=' barva: črna; barva ozadja:#eee8aa'|Vzorec||ločila||brez||Vsa druga ločila v izrazu so prikazana kot običajno črno besedilo.
|-
|-
|red-boxed text||a bold red line surrounds the error||syntax error||description of the error||Any detected syntax errors are shown by surrounding the error with a red box. The tooltip shows the error. Examples include unmatched parentheses, use of undefined functions, passing the wrong number of arguments to functions, poorly structured expressions (e.g. missing operators between variables), trying to assign a new value to a read-only variable, trying to assign values to non-variables, or using unsupported syntax.  Note that the syntax error dectection system may only report one error in an expression even if there are multiple errors; however, if any errors are detected, at least one error will be shown.
|besedilo v rdečem polju||obkroža krepka rdeča črta napaka||napaka v sintaksi||opis napake||Vse odkrite napake v sintaksi so prikazane tako, da napako obdajo z rdečim poljem. Opis orodja prikazuje napako. Primeri vključujejo neujemajoče se oklepaje, uporabo nedefiniranih funkcij, posredovanje napačnega števila argumentov funkcijam, slabo strukturirane izraze (npr. manjkajoči operatorji med spremenljivkami), poskus dodelitve nove vrednosti spremenljivki, ki je samo za branje, poskus dodelitve vrednosti ne- spremenljivk ali z uporabo nepodprte sintakse. Upoštevajte, da lahko sistem za odkrivanje napak v sintaksi sporoči samo eno napako v izrazu, tudi če je napak več; če pa so odkrite kakršne koli napake, bo prikazana vsaj ena napaka.
|}
|}


=Additional Reading=
=Dodatno branje=
 
==[[Vzorčne ankete Expression Manager|Vzorčne ankete Expression Manager]]==


==[[ExpressionScript Sample Surveys|ExpressionScript Sample Surveys]]==
==[[ExpressionScript How-tos|Use Cases and HowTos]]==


==[[ExpressionScript HowTos|Use Cases and HowTos]]==
==[[ExpressionScript examples|Step-by-Step examples]]==


==[[ExpressionScript Examples|Step-by-Step Examples]].==
==[[StatFunctions|Expression Manager statistic functions]]==


==[[ExpressionScript for developers|Reference for Developers]]==
==[[Upravitelj izrazov za razvijalce|Referenca za razvijalce]]==


==[[ExpressionScript Roadmap|RoadMap/Status/ToDo List]]==
==[[Načrt programa Expression Manager|Casovni načrt/stanje/seznam opravil]]==

Latest revision as of 17:04, 2 April 2024

Opomba: Ta funkcija je dosegljiva v LimeSurvey-u 1.92 ali novejši.

Vodnik za hitri začetek

Pregled

Ko prilagajate svoje ankete, običajno potrebujete način, da določite naslednje:

  1. Navigacija/Razvejanje – dovolite, da odgovori subjekta spremenijo vrstni red zastavljenih vprašanj
  2. 'Tailoring/ Piping - kako ubesediti vprašanje (na primer sklicevanje na prejšnje odgovore ali spreganje stavkov glede na število ali spol vaših predmetov) ali kako ustvariti poročila po meri (kot so rezultati ocenjevanja ali prilagojeni nasveti).
#'Validacija – zagotavljanje, da odgovori izpolnjujejo določena merila, kot so najmanjše in največje vrednosti, ali ujemanje z vnosnim vzorcem

Expression Manager (EM) ponuja intuitiven način za določanje logike za vsako od teh funkcij. Skoraj vse, kar lahko zapišete kot standardno matematično enačbo, je veljaven izraz, tudi če kličete funkcije. EM trenutno omogoča dostop do 80 funkcij in ga je mogoče enostavno razširiti, da podpira več. Omogoča tudi dostop do vaših spremenljivk z uporabo človeku berljivih imen spremenljivk (namesto imen SGQA).

Naslednji razdelki prikazujejo glavna mesta, kjer se uporablja Expression Manager

Ustreznost (nadzor navigacije/razvejanje)

Nekatere ankete uporabljajo "Pojdi na logiko", tako da če odgovorite na vprašanje 1 z možnostjo C, potem skočite na vprašanje 5. Ta pristop je zelo omejujoč, saj ga je težko preveriti in se zlahka prekine, ko morate preurediti vprašanja. EM uporablja Boolovo relevantno enačbo za določanje vseh pogojev, pod katerimi bi lahko bilo vprašanje veljavno. Če je vprašanje relevantno, se prikaže vprašanje, sicer ni uporabno, vrednost NULL pa je shranjena v bazi podatkov. To je podobno tistemu, kar lahko storite prek urejevalnika pogojev, vendar vam EM omogoča enostavno določanje veliko bolj zapletenih in zmogljivih kriterijev (in omogoča uporabo imena spremenljivke namesto poimenovanja SGQA).

Ta slika prikazuje en način za pregled logike ustreznosti za anketo. Izračunava indeks telesne mase. Enačba ustreznosti je prikazana v oglatem oklepaju takoj za imenom spremenljivke (ki je zelene barve). Torej je ustreznost teže, teže_enot, višine in višine enot 1, kar pomeni, da so ta vprašanja vedno postavljena. Vendar pa je relevantnost za ITM {!is_empty(height) in !is_empty(weight)}, kar pomeni, da bo ITM izračunan samo, če subjekt vnese vrednost za višino in težo (s čimer se izognemo tveganju deljenja z ničlo napaka). Poleg tega je vprašanje Poročilo prikazano samo, če preiskovanec odgovori na vsa štiri glavna vprašanja (višina, višina_enote, teža, teže_enote).

Datoteka:tutorial1.jpg

Ustreznost je prikazana in jo je mogoče urejati na naslednjih mestih:

Ogled/urejanje Ustreznost na ravni vprašanja

Ta enačba izračuna indeks telesne mase (ITM). Vpraša se le, ali oseba najprej vnese svojo višino in težo.

Datoteka:tutorial2.jpg

To je zaslon za urejanje vprašanja ITM.

Datoteka:tutorial3.jpg

Upoštevajte, da ne uporabite zavitih oklepajev, ko vnašate enačbo ustreznosti.

Ogled/urejanje ustreznosti na ravni skupine

To je vzorčna popisna raziskava. Prva stran vpraša, koliko ljudi živi z vami, in to shrani v spremenljivko "cohabs". Ta stran je prikazana samo, če imate več kot enega sostanovalca (torej je prikazana za drugo osebo, ki živi z vami), prav tako pa je prikazana samo, če ste navedli, kako je oseba ena povezana z vami (p1_rel).

Datoteka:tutorial4.jpg

Kot lahko vidite, ima skupina tudi kriterije ustreznosti na ravni vprašanja, tako da se vsako vprašanje pojavi šele, ko odgovorite na vprašanje pred njim (npr. {!is_empty(p1_sex)}). EM za vas združuje ustreznost na ravni skupine in vprašanja. Vprašanja v skupini se zastavljajo samo, če je pomembna skupina kot celota. Nato se zastavi samo podmnožica vprašanj znotraj skupine, ki so pomembna.

Tukaj je zaslon za urejanje ustreznosti na ravni skupine za to vprašanje:

Datoteka:tutorial5.jpg

Upoštevajte, da ne uporabite zavitih oklepajev, ko vnašate enačbo ustreznosti.

Krojenje/Piping

EM vam omogoča preprosto in zapleteno pogojno prilagajanje vaših vprašanj. Včasih potrebujete preprosto zamenjavo, na primer: "Rekel si, da si kupil [ Izdelek]. Kaj vam je bilo pri tem najbolj všeč?". Včasih potrebujete pogojno zamenjavo, kot je " [ Gospod Gospa.] [ Priimek], bi bili pripravljeni izpolniti našo anketo?". V tem primeru želite uporabiti g. ali gospa glede na spol osebe. Drugič potrebujete še bolj zapleteno zamenjavo (na primer na podlagi matematičnega izračuna) EM podpira vsako od teh vrst krojenja/cevovodov.

Pogojne enačbe

Primer indeksa telesne mase prikazuje zmožnost izračuna ITM osebe, čeprav ji dovolite, da svojo višino in težo vnese v metričnih ali nemetričnih enotah.

Datoteka:tailoring7.jpg

Tu je weight_kg {if(weight_units == 'kg', teža, teža * .453592)}. Ta funkcija if() pomeni, da če je subjekt vnesel težo v kilogramih, uporabite to vrednost, sicer pomnožite vneseno vrednost (ki je bila v funtih) z 0,453592, da jo pretvorite v kilograme. Spremenljivka height_m uporablja podoben pristop za izračun višine osebe v metrih, tudi če je vnesla svojo višino v palcih.

ITM izračuna formulo teže kot {teža_kg / (višina_m * višina_m)}.

Nazadnje poročilo pogojno prilagodi sporočilo subjektu in mu pove, kaj je vnesel. ("Rekli ste, da ste visoki 2 metra in težki 70 kg.")

Čeprav na zgornji sliki ni dobro prikazano, weight_status uporablja ugnezdene stavke if(), da kategorizira osebo kot prenizko telesno težo do zelo debelo. Njegovo enačbo si lahko ogledate v prikazu Logic View

Datoteka:tailoring8.jpg

V oknu za urejanje tega vprašanja lahko vidite dve stvari:

  1. Tailoring mora obdati izraze z zavitimi oklepaji
  2. Izrazi lahko zajemajo več vrstic, če želite, kot v tem primeru, olajšati branje ugnezdena pogojna logika.

Datoteka:tailoring9.jpg

Prilagojena vprašanja, odgovori in poročila

Opomba: dinamično prilagajanje morda ne bo delovalo, če so možnosti odgovora na voljo v izbirnih poljih na isti strani z vprašanji. To je posledica dejstva, da krojaški vstavki a oznaka, ki ni veljavna znotraj izbranih možnosti.

Ta primer prikazuje poročilo ITM.

Datoteka:tailoring10.jpg

Tukaj je okno za urejanje istega vprašanja.

Datoteka:tailoring11.jpg

Kot lahko vidite, je vse v zavitih oklepajih obravnavano kot izraz, zato je sintaksa poudarjena (barvno kodirana) na prejšnji sliki. Če bi imeli kakršne koli tipkarske napake (na primer napačno črkovana ali nedefinirana imena ali funkcije spremenljivk), bi EM prikazal napako, kot je ta, ki kaže, da je height_unit nedefinirano ime spremenljivke (pravzaprav je height_units), rnd() pa je nedefinirana funkcija (pravilno ime funkcije je round()). V obeh primerih so napake obdane z rdečim poljem, da jih lažje opazimo in odpravimo.

Datoteka:tailoring12.jpg

Opazite lahko tudi, da lahko hitro ustvarite kompleksna poročila, kot je tabela vnesenih vrednosti ali prilagojeni nasveti.

Zapomnite si, da mora vsako prilagajanje obdati izraze z zavitimi oklepaji, tako da LimeSurvey ve, kateri deli vprašanja so prosto besedilo in katere je treba razčleniti z upraviteljem izrazov.

Potrjevanje

EM nadzoruje, kako deluje večina naprednih možnosti vprašanj. Ti nadzorni vidiki, kot so najmanjše/največje število odgovorov; min/max posamezne vrednosti; min/max vsota vrednosti; in preverjanje, ali se vnesene vrednosti ujemajo z določenimi vzorci nizov. Še naprej vnašate te napredne možnosti vprašanj kot običajno. Vendar pa se zdaj katera koli vrednost v enem od teh polj šteje za izraz, tako da lahko imate minimalna/največja merila s kompleksnimi pogojnimi razmerji do drugih vprašanj.

V vseh teh primerih, ker se možnost naprednega vprašanja vedno obravnava kot izraz, pri določanju ne uporabite zavitih oklepajev.

Strani Vzorčne ankete prikazujejo številne delujoče primere uporabe izrazov za validacije.

Uvod

LimeSurvey uporablja nov modul Expression Manager (EM), ki bo LimeSurveyju omogočil podporo za bolj zapleteno razvejanje, ocenjevanje, validacijo in prilagajanje. Zamenjal bo način, kako LimeSurvey upravlja zamenjave, pogoje in ocene v ozadju. Prav tako bo znatno pospešil obdelavo, saj odpravlja večino branj baze podatkov med izvajanjem. EM je razvil dr. Thomas White (TMSWhite).

Ta stran wiki je dokončna referenca za sintakso in funkcionalnost Expression Managerja.

Ključne definicije

  1. Izraz': Vse, kar je obdano z zavitimi oklepaji
    • Dokler ni praznega prostora takoj za začetnim oklepajem ali pred zaključnim zavitim oklepajem
    • Vsebino izrazov ovrednoti EM, tako da lahko vsebujejo matematične formule, funkcije ter zapleteno obdelavo nizov in datumov.
  2. 'Krojenje': včasih imenovano "cevovod", je to proces pogojno spreminjanje besedila
    • Imate dostop do vseh 'nadomestnih polj', podatkov o udeležencih in podatkov o odzivih.
    • Imate tudi lažji dostop do vprašanj, odgovorov in njihovih lastnosti.
  3. Enačba 'Relevantnost': nov atribut vprašanja, ki nadzoruje vidnost vprašanja
    • Če obstaja enačba relevantnosti, potem je vprašanje prikazano le, če je relevantnost ocenjena kot res.
    • Interno, vsi array_filter in array_filter_exclude ukazi postanejo relevantni na ravni podvprašanja
  4. Equation Vrsta vprašanja: Nova vrsta vprašanja, ki shranjuje izračune ali poročila v zbirko podatkov
    • Je kot vprašanje Boilerplate, vendar se njegova vsebina shrani v baze podatkov, tudi če nastavite "Vedno skrij to vprašanje"
  5. Koda vprašanja: To je prednostno ime spremenljivke za EM
    • To je lahko opisno ime, ki označuje namen vprašanja , kar olajša branje zapletene logike
    • Veljavne kode vprašanj se NE smejo začeti s številko, zato, ko uporabljate kodo vprašanja za oštevilčenje vprašanj, preprosto uporabite »q1«, »q1a« ali »g1q2«.! N!#*To je tisto, kar trenutno postane ime spremenljivke, če izvozite podatke v SPSS ali R, tako da, če izvajate statistično analizo, ste to verjetno že naredili edinstveno.

Ali moram uporabiti EM?

Kratek odgovor je Ne (a tudi da).

EM je popolnoma nazaj združljiv z obstoječimi raziskavami. Če torej z veseljem uporabljate pogoje in ocene v slogu, ki ga je LimeSurvey uporabljal v različicah <= 1.91+, lahko to počnete še naprej.

Vendar pa EM popolnoma nadomesti način, na katerega LimeSurvey interno obravnava pogoje. Čeprav lahko še vedno uporabljate urejevalnik pogojev za ustvarjanje in upravljanje pogojev, jih bo LimeSurvey 1.92 pretvoril v enakovredne enačbe ustreznosti. Kot del nadgradnje bo LimeSurvey 1.92 samodejno pretvoril vse obstoječe pogoje v enačbe ustreznosti.

To bi vam moralo dati najboljše iz obeh svetov – lahko nadaljujete z uporabo LimeSurvey, kot ste navajeni, vendar boste videli ekvivalent Relevance Equation, tako da lahko postopoma preidete neposredno na Relevance Equations, kadar koli se vam zdi primerno.

Ali lahko kombiniram uporabo pogojev in ustreznosti?

ja Za nekatera vprašanja lahko uporabite urejevalnik pogojev, za druga pa urejevalnik ustreznosti. Ko shranite vprašanje, se pogoji samodejno pretvorijo v ustreznost.

Upoštevajte, da predpostavljamo, da če uporabljate urejevalnik pogojev, želite, da ti pogoji prepišejo vsako ročno vneseno enačbo ustreznosti. Torej, če imate obstoječe pogoje in želite ročno urediti ustreznost, najprej izbrišite pogoje za to vprašanje. Natančneje, kopirajte ustvarjeno enačbo ustreznosti v urejevalnik besedil, uporabite meni Pogoji, da izbrišete vse pogoje za to vprašanje (s čimer boste izbrisali tudi ustreznost), nato uredite vprašanje in prilepite ustvarjeno enačbo ustreznosti iz urejevalnika besedil nazaj v polje ustreznosti za to vprašanje (in shranite vprašanje). Če obstaja dovolj povpraševanja po izbrisu pogojev brez izbrisa ustvarjene enačbe pomembnosti, lahko dodamo postopek množične pretvorbe.

Kako naj izbiram med pogoji in ustreznostjo?

Tukaj je seznam prednosti in slabosti vsakega sloga:

Slog Prednosti Slabosti
Pogoji 1. Lep GUI za ustvarjanje preprostih pogojev
2. GUI je dobro dokumentiran in ga razume skupina za podporo
1. Podpira samo preproste primerjave in ne pogojuje dobro IN/ALI
2. Kaskadni pogoji delujejo neredno
3. Počasen - podatkovna baza je intenzivna, zato lahko upočasni dolge ankete
4. Nekateri so poročali o težavah s pogoji ponovnega nalaganja
5. GUI se ne prilagaja dobro, če je vprašanj na desetine, stotine ali tisoče
6. Pretvorba anket v papirni obliki je morda počasna, ker morajo uporabljati imena SGQA
7. Pogosto potrebujejo programerja za kodiranje logike po meri, potrebne za kompleksno razvejanje
Ustreznost 1. Podpira zelo kompleksno logiko, vključno z 80+ funkcijami in matematičnimi/niznimi operaterji
2. Popolna podpora za kaskadno logiko
3. Hitro – brez dodatnih klicev baze podatkov, zato podpira 1000+ anket z vprašanji
4. Brez težav z logiko ponovnega nalaganja, saj ne zahteva kod SGQA
5. Označevanje sintakse meri na 1000+ anket z vprašanji
6. Enostaven in hiter za uporabo za skupine, ki želijo računalniško obdelati obstoječe papirnate ankete.
7. Preprosto podpira polstrukturirane intervjuje in epidemiološke raziskave, ne da bi potrebovali programerje
1. Brez GUI za preproste pogoje - namesto tega uporabite označevanje sintakse
2. Novo, zato podporne ekipe še niso obvladale EM.

Bistvo je, da če ste zadovoljni z delovanjem LimeSurvey 1.91+, ni razloga, da bi spreminjali svoje početje.

Katere so druge prednosti uporabe EM?

Tukaj je nekaj drugih razlogov, zakaj bi morda želeli uporabiti EM.

  1. Izračuni - ustvarite lahko poljuben izračun, ki vam pade na pamet:
    • Imate dostop do vseh običajnih matematičnih operatorjev in funkcij
    • Imate dostop do 70+ matematičnih funkcij, funkcij za obdelavo datumov in nizov
    • Razvijalcem je dokaj enostavno dodati nove funkcije, če jih uporabniki potrebujejo
  2. Shranjevanje izračunov v zbirko podatkov
    • Zdaj lahko izračunate preproste in zapletene izračune in/ali ocene na lestvici IN jih shranite v zbirko podatkov, ne da bi potrebovali JavaScript.
    • Za to uporabite vrsto vprašanja Equation.
  3. Ocene
    • Zdaj lahko ustvarite ocene ali lestvice rezultatov iz katere koli vrste vprašanja, ne samo iz podmnožice, ki je bila prej podprta
    • Uporabite lahko prilagoditev za prikaz tekočih ali skupnih rezultatov ocenjevanja, kjer koli je to potrebno – tudi na isti strani
    • Imate več nadzora nad poročili, ustvarjenimi na podlagi teh ocenjevalnih rezultatov
    • Ocenjevalne rezultate lahko shranite v bazo podatkov, ne da bi potrebovali JavaScript
    • Ocenjevalne rezultate lahko skrijete, ne da bi potrebovali JavaScript ali CSS
  4. Nadomestna polja
  5. *Namesto uporabe {INSERTANS:SGQA} lahko uporabite samo kodo vprašanja - to olajša branje in preverjanje.
    • S tem se tudi izognete pogosti potrebi po urejanju vprašanj za spreminjanje kode SGQA, da bo vse delovalo .
  6. Prilagoditev - besedilo lahko pogojno prikažete na podlagi drugih vrednosti
    • Uporabite ustrezen naslov za zadevo, na primer (npr. »Pozdravljeni [ G./Mrs.] Smith")
    • Izdaj slovnično pravilne stavke, ki temeljijo na ednini/množini: (npr. "Imaš 1 otroka" proti "Imaš 2 otroka")
    • Ustrezno spreženi glagoli in zaklanjajte samostalnike glede na spol in množino osebka.
  7. Novi atributi spremenljivk - za prilagajanje lahko dostopate do naslednjega:
    • (brez pripone) - vzdevek za qcode.code
    • . koda - izbrana koda odgovora na vprašanje, če je relevantno (sicer prazno), ali besedilna vrednost, če ni kodirano vprašanje
    • .NAOK - enako kot .code, vendar je lahko del izračunov ali seznamov tudi če je nepomembno
    • .value - vrednost ocene za vprašanje, če je relevantno (sicer prazno), ali besedilna vrednost, če ni kodirano vprašanje -- na voljo, če so ocene omogočene za anketo, sicer vedno zero
    • .valueNAOK - enako kot .value, vendar je lahko del izračunov ali seznamov, tudi če ni pomembno
    • .shown - odgovor, kot je prikazan uporabniku (to počne {INSERTANS:xxx} )
    • .qid - ID vprašanja
    • .gid - ID skupine
    • .sgqa - vrednost SGQA za vprašanje
    • .jsName - pravilno ime spremenljivke javascript za vprašanje, ne glede na to, ali je definirano na tej ali drugi strani
    • .qseq - zaporedje vprašanj (začenši z 0)
    • .gseq - zaporedje skupine (začenši z 0)
    • . obvezno - ali je vprašanje obvezno (Y/N)
    • .question - besedilo vprašanja
    • .relevance - enačba relevantnosti za vprašanje
    • .grelevance - enačba relevantnosti za skupino
    • .relevanceStatus - ali je vprašanje trenutno relevantno ali ne (logična vrednost (lahko se razlikuje v PHP in JS))
    • .type - vrsta vprašanja (koda z enim znakom)!N !#Dinamične spremembe na strani
    • Vsa ustreznost, izračuni in prilagajanje delujejo dinamično na strani – tako spremembe vrednosti takoj posodobijo stran
    • Vaša vprašanja se torej dinamično pojavljajo/izginejo glede na to, ali so ustrezni
    • Vprašanja so tudi dinamično prilagojena glede na odgovore na strani, tako da lahko vidite tekoče vsote, prilagojene stavke in prilagojena poročila.
  8. Nov zaslon za vnos podatkov
    • Poleg uporabe trenutnem sistemu za vnos podatkov, lahko preprosto uporabite Survey-All-In-One.
    • To podpira ustreznost in prilagajanje na strani, tako da lahko uradniki za vnos podatkov hitro pregledajo in bodo morali vnesti samo ustrezne odzive
    • To je lahko ključnega pomena, če mora vaša oseba za vnos podatkov videti prilagoditev, ki je tudi dinamična.
  9. Odpravlja potrebo po večini JavaScripta po meri
    • EM enostavno podpira zapletene izračune, točkovanje , prilagajanje in pogojna logika.
    • Nekatere stvari bodo še vedno potrebovale JavaScript (na primer postavitve po meri in pogojno skrivanje podelementov vprašanj), vendar lahko vaš JavaScript uporablja funkcije EM, tako da lahko dostopate do vprašanj z njihovo Qcode namesto SGQA in dostop do katere koli zgoraj navedene lastnosti vprašanja.

Katere so druge uporabne nove funkcije, ki jih omogoča EM?

Ne glede na to, ali boste še naprej uporabljali urejevalnik pogojev ali ročno sestavljali enačbe ustreznosti, boste prejeli te dodatne prednosti:

  1. Ustvarite lahko bolj zapletena merila za preverjanje veljavnosti
    • Vse napredne atribute vprašanj (kot so max_answers, min_num_value_n, max_num_value) lahko uporablja izraze. Tako je mogoče vaša najmanjša/največja merila preprosto prilagoditi glede na predhodne odgovore, tudi če so na isti strani.
    • EM obravnava tudi vsa preverjanja, ki temeljijo na regularnih izrazih, tako da lahko robustno kombinirate preg in enačbo- na podlagi atributov vprašanj.
  2. Enostavno prerazvrščanje (ali brisanje) vprašanj in skupin
    • Pred različico 1.92 niste mogli prerazporediti vprašanj ali skupin, če je LimeSurvey menil, da bi se takšno prerazporejanje lahko pokvarilo pogojih, v katerih so bili uporabljeni. Podobno ne morete izbrisati vprašanj, če so bila od njih odvisna katera koli druga vprašanja.
    • Z označevanjem sintakse EM je preprosto videti in potrditi, ali poskušate uporabiti vprašanja, preden so navedena. Tako vam zdaj omogočamo, da vprašanja in skupine preuredite ali izbrišete, kadar koli želite. EM bo posodobil vse označevanje sintakse, da vam bo pokazal morebitne napake.
    • Pogled vprašanj za ponovno vrstni red je bil izboljšan za pomoč pri takem pregledu. Zdaj prikazuje enačbo pomembnosti vprašanja in njegovo prilagajanje, tako da lahko takoj vidite, ali katera koli spremenljivka postane rožnata (kar pomeni, da se uporabi, preden se razglasi).
  3. Navigacijski indeks vprašanj/skupin je vedno na voljo in točen
    • Pred različico 1.92 ti indeksi niso bili na voljo, če so bili zapleteni pogoji
    • Z EM lahko zagotovimo, da so točni.
    • Subjekt lahko celo skoči nazaj na prejšnje vprašanje, spremeni odgovor , nato skočite naprej (ali pošljite)
      • Pri skoku naprej bo EM ponovno preveril vsa vmesna vprašanja/skupine.
      • Če katero koli vprašanje postane nepomembno, bo v zbirki podatkov razglašeno za NULL. tako da so vaši podatki interno skladni
      • Če kakršna koli vprašanja postanejo pomembna ali na novo ne izpolnjujejo obveznih ali pravil preverjanja, se bo EM ustavil na tej strani in prisilil uporabnika, da odgovori na ta vprašanja, preden skoči na končni cilj.
#Samodejna pretvorba pogojev v ustreznost
    • Ko nadgradite svojo zbirko podatkov, bodo za vse obstoječe ankete, ki imajo pogoje, ustvarjene enačbe ustreznosti
    • Kadar koli uvozite anketo, bodo po potrebi ustvarjene enačbe ustreznosti
    • Kadar koli dodate, izbrišete ali spremenite pogoje, bo EM ustvaril ustrezno enačbo ustreznosti.
  1. Priročno označevanje sintakse
    • Ko EM prikaže enačbo pomembnosti, bo prikazal Qcode, tudi če vnesli ste kodo SGQA, saj predvidevamo, da bo to lažje brati.
    • Vse spremenljivke so barvno kodirane, da pokažejo, ali so bile deklarirane pred ali za trenutnim vprašanjem (ali pred ali za trenutno skupino). To vam omogoča hitro odkrivanje in popravljanje primerov, ko poskušate uporabiti spremenljivke za ustreznost (vključno z array_filter), prilagajanje ali validacijske enačbe, preden jih objavite.
    • Poleg tega, če z miško premaknete nad barvno kodirano spremenljivko , boste videli najpomembnejše metapodatke o tem vprašanju. To vključuje zaporedje skupine #, zaporedje vprašanja #, kodo Q, besedilo vprašanja in vse razpoložljive izbire odgovorov (če gre za vrsto vprašanja z oštevilčenimi možnostmi odgovorov).
      • Seznam izbir odgovorov uporablja to sintakso : 'odgovori':{ključ:val, ... }.
      • ključ ima sintakso 'lestvica~koda', kjer je lestvica lestvica odgovorov (npr. za dvojno lestvico) in koda je koda odgovora.
      • val ima sintakso 'prikazana vrednost', kjer je vrednost vrednost ocene (če uporabljate ocene, drugače koda)(npr. Qcode.value) in prikazano je prikazana vrednost, kot jo vidi subjekt (npr. Qcode.shown)
      • To pomeni, da lahko številne raziskave uporabljajo izračune, ne da bi potrebovali način ocenjevanja. Če ste našteli možnosti odgovorov, ki so edinstveni, nedecimalni in nenegativni, lahko preprosto izračunate vrednosti Qcode.code.
  2. Enostaven pregled celotne logike in vsebine ankete
    • Obstaja nova funkcija Prikaži logiko ankete, ki vam omogoča ogled vsega o anketi (ali skupini ali vprašanju) na eni strani.
    • Prikaže podrobnosti na ravni skupine, vprašanja, podvprašanja in odgovora za izbran obseg (anketa v primerjavi s skupino v primerjavi z vprašanjem)
    • Prikaže tudi ustreznost, ustreznost na ravni podvprašanja (za array_filter in array_filter_exclude) in ustvarjeno validacijsko enačbo (za preg in morebitna validacijska pravila, kot je najmanjša/največja vsota/število vrednosti) in vsi atributi vprašanj, ki niso prazni.
    • Vse je skladenjsko označeno, tako da lahko vidite morebitne sintaksne napake (kot so neuravnoteženi oklepaji ali uporaba spremenljivk, preden so bile deklarirane)
    • Skladnja- Highligting podpira hitro navigacijo in urejanje ankete.
      • Če kliknete ime spremenljivke, se odpre okno brskalnika (ali zavihek), ki vam prikaže to vprašanje in vam omogoča urejanje.
      • Če kliknete ime skupine, se odpre okno (ali zavihek) brskalnika, ki prikazuje pogled za preurejanje skupine, tako da lahko preprosto premikate vprašanja.
      • Vsi atributi vprašanja so sintaktično označeni. To vam omogoča nastavitev in ogled izrazov v naprednih možnostih vprašanj (na primer določanje največjega/najmanjšega števila/vsote vrednosti na izrazu)
    • Avtor EM je uporabil podoben pogled (malo čistejši), da je svojim sodelujočim epidemiologom in institucijam omogočil Nadzorni odbor potrdi in odobri ankete s tisoči vprašanj v zelo razvejanih in prilagojenih strukturiranih intervjujih

Začetek

Najboljši način, da začnete z EM je:

  • Namestiti najnovejšo stabilno različico s http://www.limesurvey.org/en/download
  • Uvoziti in raziskati vzorčne ankete .
  • Raziščite primere uporabe in navodila in primere po korakih.
  • Raziščite dokumentacijo EM (ta stran)! N!*Preglejte vgrajeno zbirko testov EM
    • V kateri koli anketi pod orodji izberite možnost EM
    • Razpoložljive funkcije navajajo 70+ funkcij in sintakso
    • Preizkusi enot izoliranih Izrazi
      • prikazuje primere uporabe vseh funkcij in operatorjev EM ter rezultatov PHP in JavaScript
      • upoštevajte, da obstaja nekaj funkcij, ki ustvarjajo različne rezultate v različicah PHP in JavaScript, zato vam ta stran omogoča ustrezno načrtujte svojo EM logiko.

Katero funkcionalnost razširi/zamenja Expression Manager? (LimeSurvey <= 1,91+)

Pogoji => Ustreznost

Pogoji so nadzorovali, katera vprašanja so vidna. Splošna sintaksa je bila Vrednost operaterja SGQA, na primer 111X2X3 == "Y". Pogoje je bilo mogoče kombinirati z IN ali ALI, vendar je bilo mešanje IN in ALI težko. Sami pogoji so bili shranjeni v ločeni tabeli, velik del kode LimeSurvey pa je bil namenjen upravljanju pogojev. Zaradi obsežnega dostopa do baze podatkov lahko obdelava velikega števila pogojev povzroči opazne težave z delovanjem. Poleg tega, ko so bili vprašanjem ali skupinam dodeljeni pogoji, jih pogosto ni bilo dovoljeno preurediti ali izbrisati.

Ocenjevanja => Enačbe in mikro krojenje

Ocene uporabnikom omogočajo ustvarjanje rezultatov na lestvici iz zbirke vprašanj. Vendar se na trenutni strani niso mogli dinamično spremeniti in njihove vrednosti niso bile shranjene v zbirki podatkov.

Zamenjave => Mikro krojenje

Uporabniki lahko prilagodijo nekatera sporočila in vprašanja na podlagi predhodnih odgovorov. Vprašanje je lahko na primer: »{TOKEN:FIRSTNAME}, rekli ste, da je {INSERTANS:111X3X4} vaš najljubši šport«. Vendar pa ni bilo mogoče izvesti pogojnega prilagajanja (kot recimo »gospod« ali »gospa«, odvisno od spola osebe) ali spregati glagolov ali zavrniti samostalnikov brez modnega JavaScripta. Avtorji so lahko izvajali ankete, za katere se je zdelo, da prilagajajo vprašanja, vendar so zahtevala ločena vprašanja za vsako permutacijo in zapletene pogoje za odločitev, katera vprašanja prikazati.

Potrjevanje

Vprašanje je mogoče potrditi z regularnimi izrazi ali najmanjšimi/največjimi vrednostmi ali pustiti, da odgovor SGQA služi kot najmanjša ali največja vrednost. Vendar validacije ne morejo temeljiti na izračunih drugih spremenljivk brez modnega JavaScripta.

Enačbe

Enačbe niso bile podprte brez modnega JavaScripta.

Enačba Vrsta vprašanja

Enačb ni bilo mogoče shraniti v zbirko podatkov (npr. končnega rezultata za oceno) brez modnega JavaScripta.

Kako bo Expression Manager nadomestil/razširil to funkcionalnost?

Expression Manager je nov osrednji modul znotraj LimeSurvey, ki omogoča veliko lažjo podporo vrsti kompleksne funkcionalnosti, ki je prej zahtevala JavaScript po meri. Prav tako nadomešča način, na katerega LimeSurvey trenutno upravlja pogoje in ocene.

Nova terminologija pri sklicevanju na Expression Manager (EM)

EM "razmišlja" o svoji funkcionalnosti v naslednjih izrazih:

  • Relevance-based Branching - če je vprašanje relevantno, ga postavite, sicer ne (npr. naredite ga nevidnega in označite kot NULL v bazi podatkov). Na voljo je novo polje Ustreznost za vse vrste vprašanj in tudi za vsako skupino (tako da lahko nabor pogojev uporabite za celotno skupino, ne da bi morali kopirati isti pogoj za vsako vprašanje in/ali združiti skupino in pogoj na ravni vprašanja logic).
  • Tailoring - Ko veste, katera vprašanja je treba postaviti, krojenje (včasih imenovano piping) določa, kako naj se vprašanje postavi. To vam omogoča ne samo podporo preproste zamenjave (kot je {TOKEN:FIRSTNAME}), ampak tudi spreganje glagolov in sklanjanje samostalnikov glede na spol ali število vaših subjektov. Prav tako vam omogoča, da spremenite sporočilo, ki ga pošljete subjektu glede na to, ali je odgovoril (ali kako je odgovoril) na druga vprašanja.
  • Equations'' - EM doda novo vrsto vprašanja, imenovano Equation, ki shrani rezultat izraza. Rezultati teh enačb se izračunajo in zapišejo v bazo podatkov, tudi če jih skrijete na strani. Tako so uporabne za skrite izračune točkovanja, navigacijo na podlagi zapletenih enačb, ocene in poročila, ki jih je treba ustvariti in zlahka dostopna v bazi podatkov.

Ustreznost in kaskadna ustreznost

Vsaka vrsta vprašanja ima zdaj možnost Ustreznost, ki nadzira, ali je vprašanje prikazano. EM obdela vsako od enačb ustreznosti v vrstnem redu, v katerem naj bi se pojavile v anketi. Če je izraz resničen (ali manjka – za podporo starim anketam), bo vprašanje prikazano. Če ni relevantno, bo vprašanje skrito, vrednost pa bo v zbirki podatkov označena z NULL. Če v skupini ni ustreznih vprašanj, bo celotna skupina preskočena.

Poleg tega, če je katera od spremenljivk v izrazu nepomembna, potem je izraz vedno ovrednoten kot false. To omogoča kaskadno ustreznost, tako da vam ni treba pisati zelo dolgih enačb ustreznosti za vsako vprašanje.

Recimo, da imate 5 vprašanj Q1-Q5 in želite prikazati samo Q2, če je bil odgovor na Q1, in Q3, če je bil odgovor na Q2 itd. Enačbe ustreznosti so lahko:

Koda vprašanja Ustreznost Vprašanje
Q1 1 Kako ti je ime?
Q2 Q1 {Q1}, koliko si star?
Q3 Q2 Torej, star si {Q2} let. Ste poročeni?
Q4 Q3 == "Y" {Q1}, koliko časa ste poročeni?
Q5 Q4 Koliko otrok imaš, {Q1}?

Izračuni ustreznosti delujejo tudi v JavaScriptu – tako da bi lahko vsa zgornja vprašanja postavili na eno stran in bi še vedno delovalo po pričakovanjih. Pravzaprav EM popolnoma nadomešča način, kako EM obdeluje formate anket Anketa vs. Skupina vs. Vprašanje naenkrat. Zdaj vsi uporabljajo popolnoma enak navigacijski mehanizem, tako da delujejo enako ne glede na slog raziskovanja.

Dokler ste na isti strani, bodo vsi podatki, ki ste jih vnesli, še vedno tam, samo skriti. Torej, če vnesete nekaj informacij, nato izberete možnost, ki jih naredi nepomembne, nato pa jih znova naredite ustrezne, bodo vaši odgovori še vedno na voljo. Vendar takoj, ko se premaknete na drugo stran, bodo vsi nepomembni odgovori izgubljeni zaradi celovitosti nabora podatkov.

Ustreznost na ravni skupine

Expression Manager podpira tudi ustreznost na ravni skupine. To olajša izvajanje zanke. Recimo, da želite zbrati informacije o do 10 subjektih (kot so izdelki ali ljudje v gospodinjstvu), pri čemer najprej določite, koliko subjektov potrebuje nadaljnje ukrepanje (na primer tako, da vprašate, koliko ljudi živi v gospodinjstvu, ali da ljudi preverijo kateri izdelki so jim všeč z dolgega seznama). Ko veste, koliko subjektov potrebuje nadaljnje ukrepanje, lahko uporabite ustreznost na ravni skupine, kot je {count >= 1}, {count >=2}, ... {count >= 10} za vsako od 10 skupin spremljanja. gor vprašanja. Znotraj vsake skupine imate lahko pogojno logiko na ravni vprašanja (npr. dodatna vprašanja glede spola ali starosti za vsak predmet). Vprašanje in enačbe ustreznosti na ravni skupine se povežejo z IN, da se določi, katera naj bo prikazana.

Krojenje / Piping

Karkoli v zavitih oklepajih se zdaj obravnava kot izraz (z eno izjemo, ki je opisana spodaj). Izrazi imajo dostop do vseh polj LimeReplacementFields, vseh spremenljivk (prek več vzdevkov), vseh tipičnih operatorjev enačb (matematičnih, logičnih in primerjalnih) in na desetine funkcij (ki delujejo celo dinamično na strani odjemalca).

Z uporabo teh enačb lahko naredite stvari, kot so:

  1. Pogojno prikažite prilagojena sporočila anketirancem na podlagi predhodnih odgovorov
  2. Ustvarite ocene in pokažite rezultate ocenjevanja (ali pogojno razvejajte ali prikažite sporočila) na podlagi teh rezultatov, vse brez uporabe samega modula za ocenjevanje
  3. Spregajte glagole in zavrnite samostalnike v vprašanjih, odgovorih in poročilih.
  4. Prikažite povzetke odgovorov pred stranjo »Pokažite svoje odgovore« na koncu ankete

Enačbe

Obstaja nova vrsta vprašanja, imenovana Enačba. Je kot Boilerplate vprašanja, le da shrani vrednost tega, kar je prikazano v bazi podatkov. Torej, če besedilo Equation Question vsebuje izračun ocene, bi bila ta vrednost shranjena v zbirki podatkov v spremenljivki, ki jo je mogoče prikazati v javnih ali zasebnih statistikah.

To rešuje običajno zahtevo za shranjevanje rezultatov ocenjevanja v bazi podatkov

Sintaksa

Vse, kar je v zavitih oklepajih, se zdaj obravnava kot izraz (z eno izjemo: ne sme biti presledkov na začetku ali na koncu – to je potrebno za zagotovitev, da upravitelj izrazov ne poskuša obdelati vdelanega JavaScripta).

Upoštevajte, da je v redu, če izrazi obsegajo več vrstic, če za začetnim zavitim oklepajem ali pred zaključnim zavitim oklepajem ni presledka. To je še posebej koristno za ugnezdene stavke if(), kot je ta:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
 'Zelo mehko',
 if(PFTotals >= -3 && PFTotals <= -2,
 'Mehko',
 if(PFTotals == -1,
 'Nekoliko mehko',
 if(PFTotals == 0,
 'Zmerno',
if(PFTotals == 1,
 'Nekoliko težko',
 if(PFTotals >= 2 && PFTotals <= 3,
 'Hard',
 if(PFTotals >= 4 && PFTotals <= 5,
 'Zelo težko',
 ''
 )
 )
 )
 )
 )
 )
 )
)}
Expression Manager podpira naslednjo sintakso:
  • Vsi standardni matematični operatorji (npr. +,-,*,/,!)
  • Vsi standardni primerjalni operatorji (npr. <,<=,==,!=,>,>=, plus ti ustrezniki: lt,le,eq,ne,gt,ge)
  • Oklepaji (da lahko združite podizraze)
  • Pogojni operatorji (npr. &&,| | in ti ustrezniki: in,ali)
  • Nizi z enojnimi in dvojnimi narekovaji (ki lahko vsak vdela nize z drugo vrsto narekovajev)
  • Operator vejice (tako ima lahko seznam izrazov in samo vrne končni rezultat)
  • Operator dodelitve (=)
  • Vnaprej določene spremenljivke (za sklicevanje na vprašanja, atribute vprašanj in odgovore) - npr. vse kode SGQA
  • Vnaprej določene funkcije (obstaja že 70+ in jih je preprosto dodati več)

Operaterji

Sintaksa EM sledi običajni prednosti operatorja:

Raven Operator(ji) Opis
1 () oklepaji za združevanje ali klicanje funkcij
2 ! - + unarni operatorji: ne, negacija, unarni-plus
3 * / krat, deli
4 + - plus , minus
5 < <= > >= lt le gt ge relativne primerjave
6 == != eq ne primerjave enakosti
7 in logično IN
8 ali logično ALI
9 = dodelitev operator
10 , vejica operator

Opozorilo z operatorjem plus (+)

Zaradi skladnosti med JavaScriptom in PHP operater plus (+) sešteva, če sta oba operanda številska, vendar združuje, če sta oba dela neštevilska niza. Vendar pa priporočamo uporabo funkcije join() za veriženje in funkcije sum() za seštevanje, saj je s tem vaš namen jasnejši in se izognete nepričakovanim rezultatom, če ste pričakovali nize, a namesto tega dobili številke (ali obratno obratno).

Opozorilo z neujemanjem med številom in nizom ter abecedno primerjavo

Ko želite primerjati vrednost z relativnimi primerjavami ali primerjavami enakosti, bodite pozorni na neujemanje vrste. Vrednost, ki jo vnese uporabnik, ali izbrana koda odgovora se lahko uporabi kot številka, če je očitno številka. Če eno od vrednosti obdate z " , bo primerjava vsiljena kot besedilo (abecedna primerjava). Če želite primerjati številčno, številke nikoli ne obkrožite z narekovaji, " .

Na primer Q0.NAOK > "50" velja, če je Q0.NAOK številsko vprašanje z vrednostjo 9. To je zato, ker bo operator > domneval, da gre za abecedno primerjavo in ne za številko.

Če želite zagotoviti primerjavo celoštevilske vrednosti, lahko uporabite intval(Q0.NAOK) > 50 , samo zapomnite si, če Q0.NAOK ni število (prazno ali niz), potem intval(Q0. NAOK) === 0. Za primerjavo vrednosti niza ("A" < "B") neposredno uporabite strcmp: strcmp(Q0.NAOK,"B") ali strcmp(Q0.NAOK,"A5") .

Previdno pri uporabi operatorja dodelitve (=)

Opomba: izogibajte se uporabi operatorjev dodelitve, razen če je to nujno potrebno, saj lahko povzročijo nepričakovane stranske učinke. Če na primer spremenite vrednost prejšnjega odgovora, se kaskadna ustreznost in logika preverjanja veljavnosti med tem vprašanjem in trenutnim vprašanjem ne izračunata znova, tako da lahko na koncu dobite notranje neskladne podatke (npr. vprašanja, na katera ostane odgovor, vendar bi morala imeti bila NULLed ali vprašanja, ki so preskočena, a bi nanje morali odgovoriti). Na splošno velja, da če želite spremenljivki dodeliti vrednost, ustvarite vrsto vprašanja Equation in uporabite izraz za nastavitev njene vrednosti. Vendar pa ljudje redko potrebujejo tega operaterja, zato smo ga dali na voljo.

Da bi vas opozorili na ta operator, je v sintaksnih enačbah prikazan z rdečo pisavo (da ga ne zamenjate z "==")

Uporaba operatorja dodelitve

Glavni razlogi, zakaj boste morda želeli uporabiti dodelitev, so:

  • Nastaviti morate privzeto vrednost za vprašanje, ki ne sprejema privzetih vrednosti prek enačbe (kot je seznam radio, kjer vam uporabniški vmesnik omogoča izbiro ene od možnosti odgovora, ne dovoljuje pa vnosa enačbe). Vendar bodite previdni, saj LimeSurvey ne bo mogel potrditi, da vaša enačba ustvari enega od dovoljenih odgovorov za to vprašanje.
  • Odgovor na prejšnje vprašanje morate na silo spremeniti na podlagi kasnejšega odgovora
  • Potrebujete zapleteno kvoto: uporabite eno skrito posamezno izbiro za kvoto in jo nastavite z dodelitvijo
  • itd...

V ta namen lahko uporabite vse sisteme upravljanja izrazov.

Template:Opozorilo

Template:Opozorilo

Nekaj primerov:

  • Nastavite odgovor na kratko besedilno vprašanje z malimi črkami: {QCODE=strtolower(QCODE.NAOK)}
  • Nastavite privzeti odgovor na vrsto vprašanja niza na začetku ankete: {Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}
  • Nastavite privzeti odgovor na vrsto vprašanja v polju besedila na začetku ankete: {Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}
  • Nastavite odgovor s pogojem: {QCODE=if(YesNo="Y","A1","")}

Varnost XSS

Z omogočenim XSS nekaterih sistemov za upravljanje izrazov ni mogoče uporabiti:

  • začetek oznake HTML v izrazu, vendar končanje v drugem izrazu
  • uporaba kompleksnega izraza v URL-ju.

Primer in rešitev

  • {if( 1 ,"","")}information{if( 1 ,"","")} je poškodovana z varnostjo XSS, tukaj lahko uporabite {if(1,"

<strong>information</strong>","information")}

  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a> , here you can use an equation question because using a complete question code is OK : <a href="/script.php?value={EQUATION.NAOK}">next</a> information","information")} {if(1,"
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a> , here you can use an equation question because using a complete question code is OK : <a href="/script.php?value={EQUATION.NAOK}">next</a>

Dostop do spremenljivk

Expression Manager omogoča dostop samo za branje do spremenljivk, ki jih morda potrebujemo. Za združljivost s prejšnjimi različicami omogoča dostop do naslednjega:

  • TOKEN:xxx - vrednost TOKEN-a (npr. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (samo za NEanonimne ankete).
  • INSERTANS:SGQA - prikazna vrednost odgovora (npr. "Da"). Za Expression Manager je enako kot pri uporabi {QCODE.shown}.
  • Vse {XXX} vrednosti, ki jih uporabljajo predloge.
  • V besedilu vprašanja lahko zamenjate {QID} z ID-jem vprašanja in {SGQ}, ki ga nadomesti SGQA vprašanja

Poleg tega vam Expression Manager omogoča sklicevanje na spremenljivke s kodo vprašanja (stolpec 'naslov' v tabeli vprašanj v bazi podatkov). To je tudi oznaka spremenljivke, ki se uporablja, ko izvozite podatke v SPSS, R ali SAS. Na primer, če imate vprašanja o imenu, starosti in spolu, lahko te spremenljivke imenujete »ime«, »starost« in »spol« namesto »12345X13X22«, »12345X13X23«. ' in 12345X13X24. To olajša branje enačb vsem in potrdi logiko, poleg tega pa omogoča mešanje vprašanj, ne da bi morali slediti številkam skupin ali vprašanj.

Pomembno: Varno je le sklicevanje na spremenljivke, ki se pojavljajo na prejšnjih straneh ali vprašanjih.

Poleg tega vam Expression Manager omogoča dostop do številnih lastnosti vprašanja:


Sintaksa Pomen Primer Primer Rezultat
Qcode vzdevek za Qcode.code {implode(',',name,gender )} 'Tom','M'
Qcode.code izbrana koda odgovora na vprašanje, če je ustrezna (sicer prazna), ali besedilna vrednost, če ni kodirano vprašanje {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK enako kot Qcode - glejte razpravo o NAOK {gender.NAOK} 'M'
Qcode.value vrednost ocene za vprašanje, če je relevantno (sicer prazno), ali vrednost besedila, če ni kodirano vprašanje {gender.value} '1'
Qcode.valueNAOK enako kot Qcode.value - glej razpravo o NAOK {gender.valueNAOK} '1 '
Qcode.shown prikazana vrednost za vprašanje {implode(',',name.shown,gender.shown)} - Qcode.question besedilo vprašanja {gender.question} 'Kakšen je vaš spol?'
Qcode.mandatory ali je vprašanje je obvezno (Y/N) {gender.mandatory} 'N'
Qcode.qid notranja številka vprašanja (ne zaporedna številka) {gender.qid} 337
Qcode.type tip vprašanja {gender.type} 'G'
Qcode.jsName pravilno ime javascript za vprašanje, ne glede na to, ali je navedeno na tej strani ali zunaj nje {gender.jsName} 'java1827X3X337'
Qcode.gid notranja številka skupine (ne zaporedna številka) {gender.gid} 3
Qcode.qseq zaporedna številka vprašanja, začenši z 0 {gender.qseq} 5
Qcode.gseq zaporedna številka skupine, začenši z 0 {gender.gseq} 1
Qcode.relevanceStatus ali je vprašanje trenutno relevantno (0 ali 1 ) {gender.relevanceStatus} 1
Qcode.relevance enačba ustreznosti na ravni vprašanja {gender.relevance} '!is_empty(name)'
Qcode.grelevance enačba ustreznosti na ravni skupine {gender.grelevance} 'num_children >= 5'
Qcode.sgqa vrednost SGQA za to vprašanje {gender.sgqa} '1827X3X337'

Težava z urejevalnikom HTML

Template:Opozorilo

Če uporabljate urejevalnik HTML, so nekateri znaki nadomeščeni z entitetami HTML.

  • & z &
  • < z <
  • > z >

Če uporabljate urejevalnik HTML, morate uporabiti :

  • in za &
  • lt for <
  • le for <=
  • gt for >
  • ge za >=

Poimenovanje spremenljivke Qcode

Tukaj so podrobnosti o tem, kako sestaviti Qcode (in dostopati do nekaterih lastnosti) glede na vrsto vprašanja. Na splošno so kode Q zgrajene kot:

QuestionCode . '_'. ID podvprašanja. '_'. ScaleId

Za komentar in drugo sta kodi vprašanja QuestionCode_comment in QuestionCode_other

Tip Opis Koda SubQs Možnosti odgovorov Lestvice Koda odgovora Odgovor je prikazan Ustreznost
5 5 Izbirni gumbi za izbiro točke Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Matrika (izbira 10 točk) izbirni gumbi Q2 |1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Matrika (izbira 5 točk) izbirni gumbi Q3 |1–5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Matrika (prilagodljive oznake) dvojna lestvica Q4 sq1-sq5 0 :a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Matrika (prilagodljiva) - Oblika stolpca Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Matrika (prilagodljiva) – oblika vrstice Q6 |1–5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Matrika (povečanje/enako/zmanjšanje) radijskih gumbov Q7 1- 7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Matrika (Multi Flexi) 1 do 10 Q8 ls1,todo ,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Array (Multi Flexi) Besedilo Q9 hp,st,sw 1.,2.,3. {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Array (Da/Negotovo/Ne) Radio-Buttons Q10 1–5 D,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Standardno vprašanje Q11 {Q11.shown}
D Datum Q12 {Q12} {Q12.shown}
* Enačba Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Nalaganje datoteke (zabeleženo število naloženih datotek) Q14 {Q14} {Q14>0}
G Spustni seznam za spol Q15 M,Ž {Q15} {Q15.shown} {Q15=='M'}
U Ogromno prosto besedilo Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Jezikovno vprašanje Q17 {Q17} {Q17.shown} {Q17=='en'}
! Seznam – spustni meni Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Spustni seznam/seznam radijskih gumbov Q19 AZ {Q19} {Q19.shown} {Q19=='X'}
O Seznam s spustnim seznamom komentarjev/seznam izbirnih gumbov + besedilno polje Q20 AF {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Dolgo prosto besedilo Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Potrditveno polje z več možnostmi Q22 | {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Več možnosti s potrditvenim poljem za komentarje + Besedilo Q23 AF {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Vprašanje z več številkami Q24 jaz,mama,oče {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Večkratno kratko besedilo Q25 AF {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Vrsta številskega vprašanja Q26 {Q26} {Q26.shown} {Q26 > 30}
R Slog razvrstitve Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Kratko prosto besedilo Q28 {Q28} {Q28.shown} {Q28=='moje'}
Y Da/Ne radijski gumbi Q29 {Q29} {Q29.shown} {Q29=='Y'}

Rezervirane spremenljivke 'this', 'self' in 'that'

Precej pogosto želite ovrednotiti vse dele vprašanja, na primer prešteti, koliko podvprašanj je bilo odgovorjenih, ali sešteti ocene. Včasih želite obdelati samo določene vrstice ali stolpce vprašanja (na primer pridobiti vsote vrstic ali stolpcev in jih shraniti v bazo podatkov). Zaradi teh rezerviranih spremenljivk je ta postopek relativno neboleč.

Spremenljivka 'ta' se uporablja izključno v naprednih možnostih vprašanj »Enačba za preverjanje veljavnosti celotnega vprašanja« in »Enačba za preverjanje veljavnosti podvprašanja«. Razširi se na imena spremenljivk vsake celice znotraj teh vprašanj. Torej, če se želite prepričati, da je vsak vnos večji od tri, nastavite »Enačbo potrjevanja podvprašanja« na (to > 3).

Spremenljivki 'jaz' in 'ta' sta močnejši in služita kot makra, ki se razširita pred obdelavo enačb. Možnosti sintakse so:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector. pripona

pripona je katera koli običajna pripona qcode (npr. NAOK, vrednost, prikazano)

podizbirnik je eden izmed:

  • komentarjev - samo podvprašanja, ki so komentarji (npr. iz izbire več s komentarjem in seznama s komentarjem)
  • brez komentarjev - samo podvprašanja, ki niso komentarji
*sq_X - kjer je X identifikator vrstice ali stolpca. Izbrana so samo podvprašanja, ki se ujemajo z vzorcem X. Upoštevajte, da se iskanje izvaja po celotnem identifikatorju kode, nato se sq_X ujema in vključuje podvprašanja nX, X, Xn (npr. če uporabljate sq_1, so bila vključena podvprašanja a1, 1a, 1, 11 ali 001). Bodite pozorni na vrsto vprašanja z dvojno lestvico, kjer sta kodi podvprašanj QCODE_SQCODE_1 in QCODE_SQCODE_1, in na vrsto vprašanja za razvrščanje, kjer je koda podvprašanj QCODE_1,QCODE_2 ....
  • nosq_X – kjer je X identifikator vrstice ali stolpca. Izbrana so samo podvprašanja, ki se ne ujemajo z vzorcem X. Upoštevajte, da se iskanje izvaja po celotnem identifikatorju kode, nato se ujema nosq_X in ne vključuje podvprašanj nX, X, Xn

Primeri:

  • Je bil kateri koli del vprašanja odgovorjen? {count(self.NAOK)>0}
  • Kakšna je ocena za to vprašanje? {sum(self.value)}

Te lahko uporabite tudi za pridobivanje skupnih vrednosti vrstic in stolpcev. Recimo, da imate niz števil z vrsticami AE in stolpci 1-5.

  • Kakšna je skupna vsota? {sum(self.NAOK)}
  • Kolikšna je vsota vrstice B? {sum(self.sq_B.NAOK)}
  • Kolikšna je vsota stolpca 3? {sum(self.sq_3.NAOK)}

Spremenljivka 'that' je podobna spremenljivki 'self', vendar vam omogoča, da se sklicujete na druga vprašanja. Njegova sintaksa je:

  • that.qname
  • that.qname.suffix
  • that.qname.pod-izbirnik' '
  • that.qname.podizbirnik.pripona

qname je ime vprašanja brez razširitev podvprašanja. Torej, recimo, da ustvarite vprašanje "q1", to je njegovo "qname"

Primeri:

  • Ali ste odgovorili na kateri koli del vprašanja q1? {count(that.q1.NAOK)>0}
  • Kakšna je ocena za q2? {sum(that.q2.NAOK)}
  • Kolikšna je skupna vsota q3? {sum(that.q3.NAOK)}
  • Kolikšna je vsota vrstice C v q4? {sum(that.q4.sq_C.NAOK)}
  • Kolikšna je vsota stolpca 2 v q4? {sum(that.q4.sq_2.NAOK)}

Spremenljivki 'jaz' in 'to' se lahko uporabita pri kateri koli ustreznosti, validaciji ali prilagajanju.

Eno opozorilo je, da ko uporabite funkcijo Pokaži logično datoteko, vam bo prikazala razširjeno vrednost 'sebe' in 'to'. To vam omogoča, da vidite dejansko enačbo, ki bo ustvarjena, tako da lahko vi (in upravitelj izrazov) preverite, ali spremenljivke obstajajo. To se morda zdi zmedeno, saj lahko vidite precej dolge enačbe. Vendar, če uredite vprašanje, boste videli prvotno enačbo z uporabo 'sebe' in/ali 'to'

Upoštevajte tudi, da teh spremenljivk ne smete uporabljati, če (a) želite izrecno poimenovati vsako spremenljivko, uporabljeno v enačbi, ali (b) uporabite spremenljivke, ki nimajo podvprašanj (npr. vprašanja z enim odgovorom). V teh primerih je predpona spremenljivke s 'to' pretirana in tvegate, da boste dobili nepričakovane rezultate.

Uporaba NAOK

NAOK --> "Ni primerno" (NA) je v redu (OK)

Uporaba NAOK pomeni, da so vse ali nekatere spremenljivke nepomembne (npr. "Ni uporabno" (NA) je v redu (OK)).

Ko vstavite neko spremenljivko iz vprašanja v katero koli enačbo: če je to vprašanje (ali podvprašanje) skrito zaradi pogoja: to onemogoči vse enačbe.

Na primer: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) poda vedno prazen niz, če je eno podvprašanje Q1 filtrirano. Število označenih podvprašanj v takem vprašanju lahko preštejete s count(Q1_SQ1.NAOK,Q1_SQ2.NAOK ,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Če je podvprašanje skrito :Upravitelj izrazov vrne prazen niz.

Brez NAOK : če je eno vprašanje ali eno podvprašanje skrito : Expression Manager vrne vedno prazen niz, enako kot false.

Prikazano .vedno uporablja sistem NAOK (prazen niz, če je skrit), če pa potrebujete kodo odgovora: vedno je dobro dodati .NAOK za kodo vprašanja. Razen če ga potrebujete in veste, kaj počnete.

Drug primer in informacije so na voljo na Preglasitev kaskadnih pogojev

Dostop do funkcij

Expression Manager omogoča dostop do matematičnih, nizovnih in uporabniško definiranih funkcij, kot je prikazano spodaj. Za te funkcije ima ekvivalente PHP in JavaScript, tako da delujejo enako na strani strežnika (PHP) in strani odjemalca (JavaScript). Dodajanje novih funkcij je preprosto.

Implementirane funkcije

Trenutno so na voljo naslednje funkcije:

Function Meaning Syntax
abs Absolute value number abs(number)
acos Arc cosine number acos(number)
addslashes Quote string with slashes string addslashes(string)
asin Arc sine number asin(number)
atan Arc tangent number atan(number)
atan2 Arc tangent of two variables number atan2(number, number)
ceil Round fractions up number ceil(number)
checkdate Returns true(1) if it is a valid date in gregorian calendar bool checkdate(month,day,year)
convert_value Convert a numerical value using a inputTable and outputTable of numerical values number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Cosine number cos(number)
count count the number of answered (non-blank) questions in the list number count(arg1, arg12, ..., argN)
countif Count the number of answered questions in the list equal to the first argument number countif(matches, arg1, arg2, ... argN)
countifop Count the number of answered questions in the list which pass the criteria (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Format a local date/time string date(format [, timestamp=time()])
exp Calculates the exponent of e number exp(number)
fixnum Display numbers with comma as radix separator, if needed string fixnum(number)
floor Round fractions down number floor(number)
gmdate Format a GMT date/time string gmdate(format [, timestamp=time()])
html_entity_decode Convert all HTML entities to their applicable characters (always uses ENT_QUOTES and UTF-8) string html_entity_decode(string)
htmlentities Convert all applicable characters to HTML entities (always uses ENT_QUOTES and UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Convert special characters to HTML entities (always uses ENT_QUOTES and UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Convert special HTML entities back to characters (always uses ENT_QUOTES and UTF-8) string htmlspecialchars_decode(string)
idate Format a local time/date as integer string idate(string [, timestamp=time()])
if (Updated in 3.0.2 ) Excel-style if(test,result_if_true[,result_if_false = ""]) if(test,result_if_true[,result_if_false = ""])
implode Join array elements with a string string implode(glue,arg1,arg2,...,argN)
intval Get the integer value of a variable int intval(number [, base=10])
is_empty Determine whether a variable is considered to be empty bool is_empty(var)
is_float Finds whether the type of a variable is float bool is_float(var)
is_int Find whether the type of a variable is integer bool is_int(var)
is_nan Finds whether a value is not a number bool is_nan(var)
is_null Finds whether a variable is NULL bool is_null(var)
is_numeric Finds whether a variable is a number or a numeric string bool is_numeric(var)
is_string Find whether the type of a variable is string bool is_string(var)
join (New in 2.0 build 130129) Join elements as a new string join(arg1, arg2, ... argN)
list Return comma-separated list of non-blank values string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Return a 'glue'-separated list of the specified question property (retProp) from questions in the list which pass the criteria (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log The logarithm of number to base, if given, or the natural logarithm. number log(number,base=e)
ltrim Strip whitespace (or other characters) from the beginning of a string string ltrim(string [, charlist])
max Find highest value number max(arg1, arg2, ... argN)
min Find lowest value number min(arg1, arg2, ... argN)
mktime Get UNIX timestamp for a date (each of the 6 arguments are optional) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function The modulo function is not supported yet. You can use the floor() function instead floor(x/y)==(x/y)
nl2br Inserts HTML line breaks before all newlines in a string string nl2br(string)
number_format Format a number with grouped thousands string number_format(number)
pi Get value of pi number pi()
pow Exponential expression number pow(base, exp)
quoted_printable_decode Convert a quoted-printable string to an 8 bit string string quoted_printable_decode(string)
quoted_printable_encode Convert a 8 bit string to a quoted-printable string string quoted_printable_encode(string)
quotemeta Quote meta characters string quotemeta(string)
rand Generate a random integer, see this example int rand() OR int rand(min, max)
regexMatch compare a string to a regular expression bool regexMatch(pattern,input)
round Rounds a number to an optional precision number round(val [, precision])
rtrim Strip whitespace (or other characters) from the end of a string string rtrim(string [, charlist])
sin Sine number sin(arg)
sprintf Return a formatted string string sprintf(format, arg1, arg2, ... argN)
sqrt Square root number sqrt(arg)
stddev Calculate the Sample Standard Deviation for the list of numbers number stddev(arg1, arg2, ... argN)
str_pad Pad a string to a certain length with another string string str_pad(input, pad_length [, pad_string])
str_repeat Repeat a string string str_repeat(input, multiplier)
str_replace Replace all occurrences of the search string with the replacement string string str_replace(search, replace, subject)
strcasecmp Binary safe case-insensitive string comparison int strcasecmp(str1, str2)
strcmp Binary safe string comparison int strcmp(str1, str2)
strip_tags Strip HTML and PHP tags from a string string strip_tags(str, allowable_tags)
stripos Find position of first occurrence of a case-insensitive unicode string (starting by 0, return false if not found) int stripos(haystack, needle [, offset=0])
stripslashes Un-quotes a quoted string string stripslashes(string)
stristr Case-insensitive strstr string stristr(haystack, needle [, before_needle=false])
strlen Get string length int strlen(string)
strpos Find position of first occurrence of an unicode string (starting by 0, return false if not found) int strpos(haystack, needle [ offset=0])
strrev Reverse a string string strrev(string)
strstr Find first occurrence of a string string strstr(haystack, needle[, before_needle=false])
strtolower Make a string lowercase string strtolower(string)
strtotime Parse about any English textual datetime description into a Unix timestamp int strtotime(string)
strtoupper Make a string uppercase string strtoupper(string)
substr Return part of an unicode string string substr(string, start [, length])
sum Calculate the sum of values in an array number sum(arg1, arg2, ... argN)
sumifop Sum the values of answered questions in the list which pass the criteria (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangent number tan(arg)
time Return current UNIX timestamp number time()
trim Strip whitespace (or other characters) from the beginning and end of a string string trim(string [, charlist])
ucwords Uppercase the first character of each word in a string string ucwords(string)
unique Returns true if all non-empty responses are unique boolean unique(arg1, ..., argN)

Funkcije, ki so načrtovane ali obravnavane

Druge funkcije, ki so načrtovane (ali se obravnavajo), vendar še niso izvedene, vključujejo naslednje. Nekateri od teh so namenjeni za nazaj združljivost z drugim raziskovalnim orodjem.

isSpecial(X)||vrne true, če je odgovor tipa *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* ali *HUH*||
Sintaksa Pomen Komentarji
e() vrne vrednost e
formatDate(X, PAT) vrni vrednost niza datuma X, oblikovano v skladu z vzorcem zapisa podatkov Java PAT
formatNumber(X,PAT) vrni vrednost niza števila X, oblikovano v skladu s številko Java vzorec formata PAT
getAnsOption(X) Osnovni vtičnik ExpressionAnswerOptions
getAnsOption(X,Y) Osnovni vtičnik ExpressionAnswerOptions
getRelevance(X) vrne enačbo pomembnosti za vprašanje X
getStartTime() vrne datum, ki ustreza sistemskemu času, ko se je intervju začel
getType(X) vrne ime niza podatkovnega tipa - npr. *NA*, če jeNA()
gotoFirst() skoči na prvi ustrezen niz vprašanj - to krši normalni tok sistema
gotoNext() skoči na naslednji niz vprašanj relevantna vprašanja - to krši običajni tok sistema
gotoPrevious() skoči na prejšnji niz relevantnih vprašanj - to krši normalen tok sistema - isAsked(X) vrne true, če odgovor ni niti *NA*, *INVALID*, niti *UNASKED*
isInvalid(X) vrne true, če odgovor je tipa *INVALID*
isNA(X) vrne true, če je odgovor tipa *NA*
isNotUnderstood(X) vrne true, če je odgovor tipa *HUH*
isRefused(X) vrne true, če je odgovor tipa *REFUSED*
isUnknown(X) vrne true, če je odgovor tipa *UNKNOWN*
jumpTo(X) skoči v skupino, ki vsebuje imenovano vprašanje -- to krši običajno tok sistema
jumpToFirstUnasked() skok na prvo nepostavljeno vprašanje in tako zaobide prejšnja odgovorjena vprašanja , kar krši normalni tok sistema
lastIndexOf(X,Y) vrne zadnji indeks (osnova 0) niza Y v nizu X. Vrne -1, če Y ni v X
list(X,.. .) niz, ki vsebuje z vejicami ločen seznam pozitivnih vrednosti z "in", ki ločuje zadnji dve
mean(X,...) vrne povprečje seznama vrednosti
numAnsOptions(X) vrne število možnosti odgovora, ki jih ima vprašanje X
orlist(X,...) niz, ki vsebuje seznam pozitivnih vrednosti, ločenih z vejicami, z "ali" loči zadnji dve
parseDate(X,PAT) vrne datumsko vrednost niza X, razčlenjeno z datumom Java vzorec formata PAT
parseNumber(X,PAT) vrne številsko vrednost niza X, razčlenjenega z vzorcem formata števila Java PAT
showAllResponsesExcept( questionList ,attributeList,attributeTitleList) questionList = s črto ločen seznam identifikatorjev vprašanj; attributeList = s črto ločen seznam atributov (kot je vprašanje #, naslov, besedilo, vrsta - tako da se lahko odločite, kaj želite prikazati); attributeTitleList = z navpičnimi črtami ločen seznam glav tabel, tako da lahko internacionalizirate poročilo.
showTheseResponses( questionList,attributeList,attributeTitleList) questionList = z navpičnimi črtami ločen seznam identifikatorjev vprašanj; attributeList = s črto ločen seznam atributov (kot je vprašanje #, naslov, besedilo, vrsta - tako da se lahko odločite, kaj želite prikazati); attributeTitleList = s črto ločen seznam glav tabel, tako da lahko internacionalizirate poročilo.

Upravitelj izrazov ve, katere spremenljivke so lokalne

Da pravilno zgradi JavaScript za stran, mora Expression Manager vedeti, katere spremenljivke so nastavljene na strani in kakšen je njihov ID JavaScript (npr. za document.getElementById(x)). Prav tako mora vedeti, katere spremenljivke so nastavljene na drugih straneh (da lahko zagotovi, da so potrebne<input type='hidden' value='x'> polja so prisotna in poseljena).

Kaskadni pogoji

Če je katera od spremenljivk nepomembna, bo celotna enačba nepomembna (napačna). Na primer, v naslednji tabeli N/A pomeni, da ena od spremenljivk ni bila ustrezna

Operator Primer a b Rezultat
+ (enarni) +a N/V false
! !a N/A false
== (ali eq) a == b N/A 5 false
== (ali eq) a == b N/A 0 false
== (ali eq) a == b N/A N/A false
!= (ali ne) a != b N/A 5 false
!= (ali ne) a != b N/A N/A false
!= (ali ne) a != b N/A 0 false
> (ali gt) a > b N/A 5 false
>= (ali ge) a >= b N/A 5 false
< (ali lt) a < b N/A 5 false
<= (ali le) a <= b N/A 5 false
in a in b N/A 5 false
in a in b N/A N/A - ali a ali b N/A N/A false
ali a ali b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
|(b + b) > (a && b) N/A 5 false
funkcija vsota(a,b,b) N/A 5 false
funkcija max(a,b) N/A 5 false
funkcija min(a,b) N/A 5 false
funkcija implode(', ',a,b,a,b) N/A 5 - funkcija if(a,a,b) N/A 5 false
funkcija je_prazna(a) N/ A false
funkcija je_prazna(a) 0 (ali prazno) true
funkcija !je_prazna(a) N/A false

Preglasitev kaskadnih pogojev

Recimo, da želite prikazati seštevek vseh ustreznih odgovorov. Lahko poskusite uporabiti enačbo {sum(q1,q2,q3,...,qN)}. Vendar se to interno prevede v LEMif(LEManyNA('q1','q2','q3',...,'qN'),,sum(LEMval('q1'),LEMval('q2') ,LEMval('q3'),...,LEMval('qN'))). Torej, če je katera od vrednosti q1-qN nepomembna, bo enačba vedno vrnila false. V tem primeru bo vsota () prikazovala 0, dokler ne odgovorite na vsa vprašanja.

Da bi se temu izognili, lahko vsaki spremenljivki dodamo pripono ".NAOK" (kar pomeni, da je Not Applicable OK). V takih primerih se pojavi naslednje vedenje. Recimo, da imate spremenljivko q1.NAOK

  1. q1 ni dodan členu LEManyNA()
  2. LEMval('q1') bo še naprej preverjal, ali je odgovor ustrezen, in vrnil '' če ni (zato bodo posamezni nepomembni odgovori prezrti, vendar ne bodo razveljavili celotnega izraza).

Torej je rešitev tekočega skupnega problema uporaba enačbe sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Uporaba pripone .NAOK avtorjem omogoča tudi oblikovanje anket, ki imajo več možnih poti, vendar se pozneje združijo na skupne poti. Recimo, da subjekti na anketo odgovorijo na način, ki je izven običajnega obsega odgovorov. Avtor bi lahko subjekte opozoril, da morda ne bodo dobili veljavnih rezultatov, in jih vprašal, ali res želijo nadaljevati z raziskavo. Če odgovorijo z Da, bodo prikazana preostala vprašanja. Pogoj za "preostala vprašanja" bi preverjal, ali je bil odgovor na začetne odgovore znotraj običajnega obsega ALI ali je preiskovanec rekel pritrdilno na vprašanje, ki je pomembno le, če je odgovoril zunaj običajnega obsega.

Kako Expression Manager podpira pogojno mikro krojenje?

Tukaj je primer mikrokrojenja (kjer Question Type=='expr' pomeni enačbo):

Koda vprašanja Ustreznost Vrsta vprašanja Vprašanje
ime 1 besedilo Kako ti je ime?
age 1 text Koliko si star?
značka !is_empty(age) expr {(starost<16) ali (starost>80)}
agestop značka sporočilo Oprosti, {name}, tudi ti si {if( (starost<16),'young',if( (starost>80), 'star','srednjih let') ) } za ta test.
otroci !značka dano Imate otroke?
starši 1 expr {!badage && kids=='Y'}
numKids starši text Koliko otrok imate?
kid1 starši && numKids >= 1 besedilo Koliko je star vaš prvi otrok?
kid2 starši && numKids >= 2 besedilo Koliko je star vaš drugi otrok?
kid3 starši && numKids >= 3 text Koliko je star vaš tretji otrok?
kid4 starši && numKids > = 4 text Koliko je star vaš četrti otrok?
kid5 starši && numKids >= 5 text Koliko je star vaš peti otrok?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
poročilo |yesno {name}, rekli ste, da ste stari {age} in da imate {numKids}. Vsota starosti vaših prvih {min(numKids,5)} otrok je {sumage}

Vsa ta vprašanja so lahko na eni strani (npr. v isti skupini), prikazana pa bodo le ustrezna vprašanja. Poleg tega, ko vnesete starost otrok, se izraz sum() v zadnjem vprašanju dinamično posodablja na strani.

<html>Upravitelj izrazov zagotavlja to funkcionalnost tako, da vsak izraz obda z imenovanim element. Vsakič, ko se vrednost spremeni, znova izračuna izraz, ki bi se moral pojaviti v njej element in regenerira zaslon. Na isti strani imate lahko na desetine ali celo stotine takšnih prilagojenih izrazov in stran jih bo ponovno prikazala vse ob eni sami osvežitvi zaslona.

Preslikava LimeSurvey 1.91+ v funkcijo Expression Manager

Stara funkcija Nova funkcija Komentarji
Pogoji Ustreznost - Ocene Enačba Vsak rezultat ocenjevanja je mogoče prestrukturirati v enačbo. To zagotavlja, da se rezultat zapiše v zbirko podatkov, poleg tega pa vam omogoča ogled dinamičnih sprememb vrednosti rezultata na trenutni strani
Zamenjave Upravitelj izrazov Jedrni mehanizem sprejme vhodni niz in vse v zavitih oklepajih obravnava kot izraz - tako obravnava vse vrste zgodovinskih zamenjav. Da ne bi pokvaril vdelanega JavaScripta, Expression Manager obdeluje samo vsebino med zavitimi oklepaji, če (a) v zavitih oklepajih ni presledka na začetku ali na koncu – npr. {expr} je izraz, vendar {expr}, {expr }, in {expr} nista izraza. Poleg tega Expression Manager ne obdeluje vsebine znotraj lastnih nizov (npr. {list('hi','there {braces}')} ustvari "hi there {braces}"). Prav tako ignorira ubežne zavite oklepaje (npr. \{to ni izraz\})
Preverjanje Upravitelj izrazov Načrt je, da vzamemo trenutne najmanjše/največje atribute vprašanja in imamo upravitelja izrazov jih obdelati. Tako so lahko najmanjše/maksimalne vrednosti same izrazi

Označevanje sintakse

Za pomoč pri vnosu in preverjanju izrazov EM zagotavlja označevanje sintakse z naslednjimi funkcijami:

Vrste in pomen označevanja sintakse

Barva Vzorec Pomen Namig Komentarji
rjavo ozadje Vzorec celotna enačba nič Vse, kar je v zavitih oklepajih, kar je prepoznano kot enačba (npr. ni uvodne ali končne črte), bo barvno kodirano s rjavim ozadjem, da se bo lažje razlikovalo od okoliškega besedila
krepko rdeče besedilo 'Vzorec Napaka Nekaj pojasnil o napaki Lahko je neznana spremenljivka ali napaka v funkciji, .... Anketa je lahko popolnoma pokvarjena, to ne ni prikazan javnemu uporabniku.
modro besedilo Vzorec ime funkcije pomen in dovoljena sintaksa imena funkcij ali stvari, ki bi morale biti funkcije, ker jim sledi začetni oklepaj, so predstavljene v krepkem modrem besedilu. Opisi orodij prikazujejo pomen in dovoljeno sintakso za funkcijo.
sivo besedilo Vzorec string brez nizi z enojnimi in dvojnimi narekovaji so prikazani v sivem besedilu
cyan text Vzorec nastavljena spremenljivka na isti strani, [ ime ali koda SGQA]: vprašanje; vrednost; Seznam odgovorov, ki prikazuje kode za vsako vrednost Katera koli spremenljivka, ki je nastavljena na isti strani kot trenutno vprašanje, je prikazana v cian besedilu, kar kaže, da jo je mogoče posodobiti v javascriptu. Opis orodja prikazuje njegovo ime (če ste uporabili INSERTANS:xxx) ali kodo SGQA (če ste uporabili nov sistem poimenovanja), dejansko vprašanje in njegovo trenutno vrednost (ali prazno, če ni nastavljeno). Če vrsta vprašanja pričakuje odgovore iz nabora oštevilčenih vrednosti, je preslikava kod v prikazane vrednosti prikazana.
zeleno besedilo Vzorec spremenljivke, nastavljene na prejšnji strani [ ime ali koda SGQA]: vprašanje; vrednost; Seznam odgovorov, ki prikazuje kode za vsako vrednost Katera koli spremenljivka, ki je nastavljena na prejšnji strani, je prikazana s krepkim zelenim besedilom. Opis orodja prikazuje njegovo ime (če ste uporabili INSERTANS:xxx) ali kodo SGQA (če ste uporabili nov sistem poimenovanja), dejansko vprašanje in njegovo trenutno vrednost (ali prazno, če ni nastavljeno). Če vrsta vprašanja pričakuje odgovore iz nabora oštevilčenih vrednosti, je preslikava kod v prikazane vrednosti prikazana.
krepko roza besedilo Vzorec nastavljena spremenljivka na poznejši strani na splošno: prazna na začetku ankete, lahko pa se zapolni z indeksom ali premakne prejšnjo [ ime ali koda SGQA]: vprašanje; vrednost; Seznam odgovorov, ki prikazuje kode za vsako vrednost Vsaka spremenljivka, ki je nastavljena na naslednji strani, je prikazana v krepkem rožnatem besedilu. Opis orodja prikazuje njegovo ime (če ste uporabili INSERTANS:xxx) ali kodo SGQA (če ste uporabili nov sistem poimenovanja), dejansko vprašanje in njegovo trenutno vrednost (ali prazno, če ni nastavljeno). Če vrsta vprašanja pričakuje odgovore iz nabora oštevilčenih vrednosti, je preslikava kod v prikazane vrednosti prikazana.
krepko rumeno besedilo Vzorec nadomestna vrednost limete vrednost Nizovi zamenjave apna (kot {TOKEN:xxx}, {PRIVACY_MESSAGE}) so prikazani v krepkem rjavem besedilu.
rdeče besedilo Vzorec operator dodelitve (=) opozorilno sporočilo Če uporabite enega od operatorjev dodelitve (=), bo ta operator prikazan v rdečem besedilu. To naj bi pomagalo preprečiti nenamerno ponovno dodelitev vrednosti, ko ste dejansko želeli preveriti, ali je a == b namesto nastavitve vrednosti a = b.
običajno črno besedilo Vzorec ločila brez Vsa druga ločila v izrazu so prikazana kot običajno črno besedilo.
besedilo v rdečem polju obkroža krepka rdeča črta napaka napaka v sintaksi opis napake Vse odkrite napake v sintaksi so prikazane tako, da napako obdajo z rdečim poljem. Opis orodja prikazuje napako. Primeri vključujejo neujemajoče se oklepaje, uporabo nedefiniranih funkcij, posredovanje napačnega števila argumentov funkcijam, slabo strukturirane izraze (npr. manjkajoči operatorji med spremenljivkami), poskus dodelitve nove vrednosti spremenljivki, ki je samo za branje, poskus dodelitve vrednosti ne- spremenljivk ali z uporabo nepodprte sintakse. Upoštevajte, da lahko sistem za odkrivanje napak v sintaksi sporoči samo eno napako v izrazu, tudi če je napak več; če pa so odkrite kakršne koli napake, bo prikazana vsaj ena napaka.

Dodatno branje

Vzorčne ankete Expression Manager

Use Cases and HowTos

Step-by-Step examples

Expression Manager statistic functions

Referenca za razvijalce

Casovni načrt/stanje/seznam opravil