LimeSurvey Manual
Menu
Navigation
Main page
Recent changes
Random page
Help
Search
Special pages
Printable version
Recent changes
Help
English
Log in
Actions
Translate
Language statistics
Message group statistics
Export
Special
Export translations
Settings
Group
Activating a survey
Adding answers or subquestions
Administering LimeSurvey
Alternatives to the LimeSurvey import function
Assessments
Backup entire database
Batch deletion
Category:Advanced Question Settings
Category:General Question Options
Category:Question Settings
Central Participant Database
Changing an active survey
Check data integrity
Check question logic
Check survey logic - Advanced
Closing a survey
ComfortUpdate
Copy question
Data encryption
Data entry
Data policy settings
DateFunctions
Default answers
Delete question
Delete survey
Display/Export survey
Edit question
Email bounce tracking system
Email templates
Export question
Export responses
Exporting results
Expression Manager
Expression Manager sample surveys
ExpressionScript - Presentation
ExpressionScript Engine - Quick start guide
ExpressionScript examples
ExpressionScript How-tos
ExpressionScript sample surveys
Extension compatibility
Failed email notifications
First login - your user preferences
General FAQ
General settings
Getting started
Global settings
Google API howto
Home page settings
How to design a good survey (guide)
Import responses
Importing a survey
Installation - LimeSurvey CE
Installation FAQ
Installation of the LimeSurvey XAMPP package
Installation security hints
Installation using a command line interface (CLI)
Installation Version 1.92 or older
Iterate survey
Label sets
LDAP settings
License
LimeSurvey Manual
LimeSurvey PRO vs LimeSurvey CE
LimeSurvey Users
LimeSurvey Video-Tutorial
LimeSurvey-compatible hosting companies
List question groups
List questions
Localization
Major version upgrade
Make your plugin compatible with LS4
Manage user groups
Manage users
Menu configuration
Menu entries configuration
Multilingual survey
New Template System in LS3.x
Not categorized and advanced features
Notifications & data
Optional settings
Overview
Panel integration
Participant settings
Plugin manager
Plugin menu
Plugins - advanced
Presentation
Preview function
Problems & solutions
Publication & access
QS:Allowed filetypes
QS:Alphasort
QS:Answer width
QS:Array filter
QS:Array filter exclude
QS:Array filter style
QS:Assessment value
QS:Autocheck exclusive option
QS:Category separator
QS:Chart type
QS:Choice column width
QS:Choice header
QS:Code filter
QS:Commented checkbox
QS:CSS Class
QS:Date max
QS:Date min
QS:Date time format
QS:Display chart
QS:Display columns
QS:Display map
QS:Display rows
QS:Display type
QS:Dropdown dates
QS:Dropdown dates year max
QS:Dropdown dates year min
QS:Dropdown prefix
QS:Dropdown prepostfix
QS:Dropdown separators
QS:Dropdown size
QS:Dualscale headerA
QS:Dualscale headerB
QS:Em validation q
QS:Em validation q tip
QS:Em validation sq
QS:Em validation sq tip
QS:Encryption
QS:Equals num value
QS:Equation
QS:Exclusive option
QS:Get order previous q
QS:Hidden
QS:Hide tip
QS:Input box size
QS:Input boxes
QS:Input max characters
QS:Label column width
QS:Location city
QS:Location country
QS:Location defaultcoordinates
QS:Location mapheight
QS:Location mapservice
QS:Location mapwidth
QS:Location mapzoom
QS:Location nodefaultfromip
QS:Location postal
QS:Location state
QS:Mandatory
QS:Max answers
QS:Max filesize
QS:Max num value
QS:Max num value n
QS:Max num value sgqa
QS:Max subquestions
QS:Maximum chars
QS:Maximum number of files
QS:Min answers
QS:Min num value
QS:Min num value n
QS:Minimum number of files
QS:Minute step interval
QS:Month display style
QS:Multiflexible checkbox
QS:Multiflexible max
QS:Multiflexible min
QS:Multiflexible step
QS:Num value int only
QS:Numbers only
QS:Other
QS:Other comment mandatory
QS:Other numbers only
QS:Other Position
QS:Other replace text
QS:Page break
QS:Prefix
QS:Preg validation
QS:Printable survey relevance help
QS:Public statistics
QS:Question theme
QS:Random group
QS:Random order
QS:Rank header
QS:Relevance
QS:Remove text or uncheck checkbox
QS:Repeat headers
QS:Reverse
QS:Samechoiceheight
QS:Samelistheight
QS:Scale export
QS:Show comment
QS:Show grand total
QS:Show title
QS:Show totals
QS:Showpopups
QS:Slider accuracy
QS:Slider default
QS:Slider handle shape
QS:Slider handle Unicode shape
QS:Slider initial value
QS:Slider layout
QS:Slider max
QS:Slider middlestart
QS:Slider min
QS:Slider orientation
QS:Slider rating
QS:Slider reset
QS:Slider reverse
QS:Slider separator
QS:Slider showminmax
QS:Subquestion width
QS:Suffix
QS:Text input width
QS:Theme editor - advanced options
QS:Time limit
QS:Time limit action
QS:Time limit countdown message
QS:Time limit disable next
QS:Time limit disable prev
QS:Time limit message
QS:Time limit message delay
QS:Time limit message style
QS:Time limit timer style
QS:Time limit warning
QS:Time limit warning display time
QS:Time limit warning message
QS:Time limit warning style
QS:Use dropdown
QS:Value range allows missing
Question groups - introduction
Question toolbar options
Question type - 5 point choice
Question type - Array
Question type - Array (10 point choice)
Question type - Array (5 point choice)
Question type - Array (Increase-Same-Decrease)
Question type - Array (Numbers)
Question type - Array (Texts)
Question type - Array (Yes-No-Uncertain)
Question type - Array by column
Question type - Array dual scale
Question type - Date
Question type - Equation
Question type - File upload
Question type - Gender
Question type - Huge free text
Question type - Language switch
Question type - List (Dropdown)
Question type - List (Radio)
Question type - List with comment
Question type - Long free text
Question type - Multiple choice
Question type - Multiple choice with comments
Question type - Multiple numerical input
Question type - Multiple short text
Question type - Numerical input
Question type - Ranking
Question type - Short free text
Question type - Text display
Question type - Yes-No
Question types
Questions - introduction
QueXML PDF Export
Quick start guide - LimeSurvey 2.50+
Quick start guide - LimeSurvey 3.0+
Quick-translation
Regenerate question codes
Reorder questions and question groups
Reset conditions
Resources
Responses & statistics
Responses (survey results)
Running a survey safely
Setting conditions
SGQA identifier
Statistics
Survey group permissions
Survey menu
Survey participants
Survey permissions
Survey quotas
Survey settings
Survey settings version 2
Survey structure
Survey toolbar options
Surveys - introduction
Surveys - management
Tab Separated Value survey structure
Template:Deprecated
Template:DeprecatedIn
Template:Example
Template:FeatureChange
Template:FeatureStarting
Template:Hint
Template:NewIn
Template:UpdatedIn
Testing a survey
Text elements
Theme editor
Theme options
Themes
Timing statistics
Tools
Transferring an installation
Translating LimeSurvey
Troubleshooting
TwoFactorAdminLogin
Upgrading from a previous version
URL fields
Using regular expressions
Version change log
Version guide
View saved but not submitted responses
Workarounds
Language
aa - Afar
ab - Abkhazian
abs - Ambonese Malay
ace - Achinese
acm - Iraqi Arabic
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
ann - Obolo
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - Balinese (Balinese script)
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
bdr - West Coast Bajau
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bew - Betawi
bg - Bulgarian
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cpx - Pu-Xian Min
cpx-hans - Pu-Xian Min (Simplified Han script)
cpx-hant - Pu-Xian Min (Traditional Han script)
cpx-latn - Pu-Xian Min (Latin script)
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
crh-ro - Crimean Tatar (Romania)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
dga - Dagaare
din - Dinka
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fula
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan Chinese
gan-hans - Gan (Simplified)
gan-hant - Gan (Traditional)
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Alemannic
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
hno - Northern Hindko
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang Chinese
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
igl - Igala
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kai - Karekare
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjh - Khakas
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kus - Kʋsaal
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mag - Magahi
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Māori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mnc - Manchu
mnc-latn - Manchu (Latin script)
mnc-mong - Manchu (Mongolian script)
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nog - Nogai
nov - Novial
nqo - N’Ko
nrm - Norman
nso - Northern Sotho
nv - Navajo
ny - Nyanja
nyn - Nyankole
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwa
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rki - Arakanese
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Yakut
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - Northern Sami (Finland)
se-no - Northern Sami (Norway)
se-se - Northern Sami (Sweden)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
sh-cyrl - Serbo-Croatian (Cyrillic script)
sh-latn - Serbo-Croatian (Latin script)
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - Sylheti
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Tayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - Talysh (Cyrillic script)
tn - Tswana
to - Tongan
tok - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
wal - Wolaytta
war - Waray
wls - Wallisian
wo - Wolof
wuu - Wu Chinese
wuu-hans - Wu Chinese (Simplified)
wuu-hant - Wu Chinese (Traditional)
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yue - Cantonese
yue-hans - Cantonese (Simplified)
yue-hant - Cantonese (Traditional)
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
{{DISPLAYTITLE:Gestore Espressioni}}<languages /> __TOC__ <div class="simplebox"> Nota: questa funzionalità è disponibile solo a partire dalla versione 1.92 di LimeSurvey 1.92.</div> =Quick Start Tutorial= <span id="Overview"></span> =Introduzione= Nella gestione dei sondaggi, spesso è necessario utilizzare alcune delle seguenti caratteristiche: #'''Navigazione/Ramificazione''' - fare in modo che le risposte inserite precedentemente condizionino l'ordine in cui le domande sono mostrate. #'''Personalizzazione e incatenamento degli eventi (Tailoring & Piping)''' - fare in modo che le domande siano declinate in base a risposte fornite precedente, ad esempio coniugando i verbi in base al numero o al genere dei sostantivi; oppure generazione di report personalizzati come ad esempio valutazioni con punteggio o suggerimenti mirati. #'''Convalida''' - imporre il rispetto di determinati criteri per le risposte inserite: ad esempio valore massimo e minimo, oppure il rispetto di un certo formato. Il Gestore delle Espressioni o GE (in Inglese, Expression Manager o EM) fornisce una modalità intuitiva per specificare la logica delle funzionalità descritte. È possibile costruire espressioni valide per praticamente ogni equazione matematica standard, anche contenente funzioni. Il Gestore Espressioni consente l'utilizzo di 80 funzioni e può anche essere esteso per includerne di ulteriori. Le variabili possono essere chiamate con nomi facilmente leggibili e non solo con i codici SGQA. Le sezioni seguenti mostrano i vari posti nei quali si può utilizzare il Gestore Espressioni <span id="Relevance_(Controlling_Navigation/Branching)"></span> ==Rilevanza (Controllo della navigazione/Ramificazione)== Alcuni sistemi di gestione per sondaggi utilizzano una logica di tipo "GoTo": ad esempio, se si sceglie l'opzione C per la Domanda 1, allora vai alla Domanda 5. Questo approccio è piuttosto limitato, perché implica difficoltà di convalida e soprattutto perché la struttura logica si rompe se le domande vengono riordinate. Il GE utilizza una equazione di rilevanza booleana, con la quale sono specificate tutte le condizioni che una domanda deve rispettare per essere valida. Se la domanda ha "rilevanza", allora essa viene mostrata; altrimenti, è "non applicabile" e il valore NULL è salvato nel database delle risposte. Si tratta di qualcosa di simile a quanto può essere fatto dall'editor delle condizioni ma il GE permette di specificare facilmente criteri molto più complessi e potenti - e, inoltre, permette di usare il nome della variabile invece dei codici SGQA. L'immagine seguente mostra un modo di sfruttare la logica di rilevanza in un sondaggio. il sondaggio dell'esempio calcola l'Indice di Massa Corporea, in inglese "Body Mass Index" o BMI. L'esempio è in inglese. L'equazione di rilevanza è mostrata in parentesi quadrate, subito dopo il nome della variabile (che è scritto in verde). Quindi, la rilevanza di weight, weight_units, height and height_units vale in tutti i casi 1, pertanto tutte queste domande sono sempre mostrate. L'equazione di rilevanza per il BMI, invece, è {!is_empty(height) and !is_empty(weight)}: questo significa che il BMI sarà calcolato solo se chi risponde al sondaggio ha inserito un valore sia per height ("altezza") che per weight ("peso"); in tal modo si evita di eseguire una divisione per zero con conseguente messaggio di errore. Anche la domanda Report è mostrata solo se sono state fornite a tutte e quattro le domande principali (height, height_units, weight, weight_units). [[File:tutorial1.jpg]] La pertinenza è mostrata e modificabile nei seguenti punti: <span id="Viewing_/_Editing_Question-Level_Relevance"></span> ===Visualizzazione/modifica della pertinenza a livello di domanda=== Questa equazione calcola l'indice di massa corporea (BMI). Viene chiesto solo se la persona inserisce prima altezza e peso. [[File:tutorial2.jpg]] Questa è la schermata di modifica per la domanda BMI. [[File:tutorial3.jpg]] Si noti che non si utilizzano le parentesi graffe quando si immette un'equazione di rilevanza. <span id="Viewing_/_Editing_Group-Level_Relevance"></span> ===Visualizzazione/modifica della pertinenza a livello di gruppo=== Questo è un campione di censimento. La prima pagina chiede quante persone vivono con te e le memorizza nella variabile "cohabs". Questa pagina viene mostrata solo se hai più di un convivente (quindi viene mostrata per la seconda persona che convive con te), e mostra anche solo se hai specificato in che modo la Persona Uno è imparentata con te (p1_rel). [[File:tutorial4.jpg]] Come puoi vedere, il gruppo ha anche criteri di pertinenza a livello di domanda, in modo tale che ogni domanda appaia solo dopo che hai risposto alla domanda precedente (es. {!is_empty(p1_sex)}). EM combina per te la pertinenza a livello di gruppo e di domanda. Le domande in un gruppo vengono poste solo se il gruppo nel suo insieme è rilevante. Quindi, viene chiesto solo il sottoinsieme di domande pertinenti all'interno del gruppo. Ecco la schermata per modificare la pertinenza a livello di gruppo per quella domanda: [[File:tutorial5.jpg]] Si noti che non si utilizzano le parentesi graffe quando si immette un'equazione di rilevanza. <span id="Tailoring/Piping"></span> ==Sartoria/Piping== EM ti consente di eseguire facilmente adattamenti condizionali semplici e complessi delle tue domande. A volte hai solo bisogno di una semplice sostituzione, come dire: "Hai detto di aver acquistato<nowiki> [</nowiki> Prodotto]. Cosa ti è piaciuto di più?". A volte hai bisogno di una sostituzione condizionale come "<nowiki> [</nowiki> Signor signora.]<nowiki> [</nowiki> Cognome], saresti disposto a completare il nostro sondaggio?". In questo caso, vuoi usare Mr. o Mrs. in base al sesso della persona. Altre volte hai bisogno di sostituzioni ancora più complesse (come basate su un calcolo matematico) EM supporta ciascuno di questi tipi di sartoria/piping. <span id="Conditional_Equations"></span> ===Equazioni condizionali=== L'esempio dell'indice di massa corporea mostra la capacità di calcolare l'indice di massa corporea di una persona, anche lasciandole inserire altezza e peso in unità metriche o non metriche. [[File:sartoria7.jpg]] Qui peso_kg è {if(weight_units == 'kg', peso, peso * .453592)}. Questa funzione if() significa che se il soggetto ha inserito il peso usando i chilogrammi, usa quel valore, altrimenti moltiplica il valore inserito (che era in libbre) per .453592 per convertirlo in chilogrammi. La variabile height_m usa un approccio simile per calcolare l'altezza della persona in metri, anche se ha inserito la sua altezza in pollici. BMI calcola la formula del peso come {peso_kg / (altezza_m * altezza_m)}. Infine, il rapporto adatta in modo condizionale il messaggio al soggetto, dicendogli cosa ha inserito. ("Hai detto che sei alto 2 metri e pesi 70 kg.") Anche se non ben mostrato nell'immagine sopra, weight_status utilizza istruzioni if() nidificate per classificare la persona da sottopeso a gravemente obesa. Puoi vedere la sua equazione nella vista Mostra logica [[File:sartoria8.jpg]] Dalla finestra di modifica per questa domanda, puoi vedere due cose: #Tailoring deve circondare le espressioni con parentesi graffe #Le espressioni possono estendersi su più righe se, come in questo caso, vuoi rendere più facile la lettura del logica condizionale annidata. [[File:sartoria9.jpg]] <span id="Tailored_Questions,_Answers,_and_Reports"></span> ===Domande, risposte e rapporti su misura=== <div class="simplebox">Nota: la personalizzazione dinamica potrebbe non funzionare se le opzioni di risposta sono rese disponibili in caselle selezionate nella stessa pagina della domanda. Ciò deriva dal fatto che la sartoria inserisce a<nowiki></nowiki> <span>tag che non è valido all'interno delle opzioni selezionate.</span> Questo esempio mostra il rapporto BMI. [[File:tailoring10.jpg]] Ecco la finestra di modifica per la stessa domanda. [[File:tailoring11.jpg]] Come puoi vedere, qualsiasi cosa tra parentesi graffe viene trattata come un'espressione, quindi viene evidenziata la sintassi (con codice colore) nell'immagine precedente. In caso di errori di battitura (come nomi di variabili o funzioni con errori di ortografia o non definiti), EM mostrerebbe un errore, come questo, che mostra che height_unit è un nome di variabile non definito (in realtà è height_units) e rnd() è una funzione non definita (il nome corretto della funzione è round()). In entrambi i casi, gli errori sono circondati da un riquadro rosso per facilitarne l'individuazione e la correzione. [[File:tailoring12.jpg]] Puoi anche vedere che puoi creare rapidamente report complessi, come una tabella di valori inseriti o consigli personalizzati. Ricorda che tutte le personalizzazioni devono circondare le espressioni con parentesi graffe, in modo che LimeSurvey sappia quali parti della domanda sono testo libero e quali devono essere analizzate tramite Expression Manager. <span id="Validation"></span> ==Convalida== EM controlla il funzionamento della maggior parte delle opzioni di domande avanzate. Questi controllano aspetti come il numero minimo/massimo di risposte; valori individuali min/max; valori somma min/max; e controllando che i valori immessi corrispondano ai modelli di stringa specificati. Continui a inserire quelle opzioni di domande avanzate come al solito. Tuttavia, ora qualsiasi valore in uno di questi campi è considerato un'espressione, quindi puoi avere criteri min/max con relazioni condizionali complesse con altre domande. In tutti questi casi, poiché l'opzione della domanda avanzata è sempre considerata un'espressione, non si usano le parentesi graffe quando la si specifica. Le pagine [[Sondaggi di esempio di Expression Manager|Sondaggi di esempio]] mostrano molti esempi funzionanti dell'utilizzo delle espressioni per le convalide. <span id="Introduction"></span> =Introduzione= LimeSurvey utilizza il nuovo modulo Expression Manager (EM) che consentirà a LimeSurvey di supportare branching, valutazioni, convalida e personalizzazione più complessi. Sostituirà il modo in cui LimeSurvey gestisce le sostituzioni, le condizioni e le valutazioni nel back-end. Inoltre, accelererà notevolmente l'elaborazione poiché elimina la maggior parte delle letture del database in fase di esecuzione. EM è stato sviluppato dal Dr. Thomas White (TMSWhite). Questa pagina wiki è il riferimento definitivo per la sintassi e la funzionalità di Expression Manager. ==Definizioni chiave== #'''Espressione''': Qualsiasi cosa racchiusa tra parentesi graffe #*Sempre che non vi siano spazi bianchi immediatamente dopo la parentesi graffa di apertura o prima della parentesi graffa di chiusura #*I contenuti delle espressioni sono valutati da EM, quindi possono contenere formule matematiche, funzioni ed elaborazioni complesse di stringhe e date. #'''Adattamento''': a volte chiamato "piping", questo è il processo di modifica condizionale del testo #*Hai accesso a tutti i "campi sostitutivi", ai dati dei partecipanti e ai dati delle risposte. #*Hai anche un accesso più facile a domande, risposte e alle loro proprietà. #'' 'Rilevanza''' Equazione: un nuovo attributo della domanda che controlla la visibilità della domanda #*Se esiste un'equazione di rilevanza, la domanda viene mostrata solo se la pertinenza risulta vera. #*Internamente, tutti array_filter e array_filter_exclude i comandi diventano rilevanti a livello di sottodomanda #'''Equazione''' Tipo di domanda: un nuovo tipo di domanda che salva calcoli o report nel database #*È come una domanda Boilerplate, ma il suo contenuto viene salvato in il database anche se imposti "Nascondi sempre questa domanda" #'''Codice domanda''': questo è il nome di variabile preferito per EM #*Questo può essere un nome descrittivo che indica lo scopo della domanda , facilitando la lettura di logiche complesse #*I codici domanda validi NON devono iniziare con un numero, quindi quando si utilizza il codice domanda per numerare le domande, utilizzare semplicemente "q1", o "q1a" o "g1q2".! N!#*Questo è ciò che attualmente diventa il nome della variabile se esporti i dati in SPSS o R, quindi se esegui un'analisi statistica, probabilmente l'hai già reso univoco. <span id="Do_I_have_to_use_EM?"></span> ==Devo usare EM?== La risposta breve è No (ma anche sì). EM è completamente retrocompatibile con i sondaggi esistenti. Quindi, se sei felice di utilizzare Condizioni e Valutazioni nello stile utilizzato da LimeSurvey nelle versioni <= 1.91+, puoi continuare a farlo. Tuttavia, EM sostituisce completamente il modo in cui LimeSurvey gestisce internamente le condizioni. Sebbene tu possa ancora utilizzare l'editor delle condizioni per creare e gestire le condizioni, LimeSurvey 1.92 le convertirà nelle equazioni di pertinenza equivalenti. Come parte dell'aggiornamento, LimeSurvey 1.92 convertirà automaticamente tutte le condizioni esistenti in equazioni di rilevanza. Questo dovrebbe darti il meglio di entrambi i mondi: puoi continuare a utilizzare LimeSurvey come sei abituato, ma vedrai l'equivalente di Equazione di pertinenza in modo da poter migrare gradualmente a Equazioni di pertinenza direttamente ogni volta che lo ritieni opportuno. <span id="Can_I_mix_use_of_Conditions_and_Relevance?"></span> ==Posso combinare l'uso di Condizioni e Rilevanza?== SÌ. Puoi utilizzare l'editor delle condizioni per alcune domande e l'editor della pertinenza per altre. Le condizioni vengono convertite automaticamente in Rilevanza quando salvi la domanda. Nota, supponiamo che se stai utilizzando l'editor delle condizioni, desideri che tali condizioni sovrascrivano qualsiasi equazione di rilevanza inserita manualmente. Pertanto, se disponi di Condizioni esistenti e desideri modificare manualmente la Rilevanza, elimina prima le Condizioni per quella domanda. Nello specifico, copia l'equazione di pertinenza generata in un editor di testo, utilizza il menu Condizioni per eliminare tutte le condizioni per quella domanda (che eliminerà anche la pertinenza), quindi modifica la domanda e incolla nuovamente l'equazione di pertinenza generata dall'editor di testo in il campo di pertinenza per quella domanda (e salva la domanda). Se c'è una domanda sufficiente per eliminare le condizioni senza eliminare l'equazione di pertinenza generata, potremmo aggiungere un processo di conversione in blocco. <span id="How_should_I_choose_between_Conditions_and_Relevance?"></span> ==Come devo scegliere tra Condizioni e Rilevanza?== Ecco un elenco di pro e contro di ogni stile: {| class="wikitable" !Stile!!Pro!!Svantaggi |- |Condizioni||1. Bella GUI per la creazione di condizioni semplici<br/> 2. GUI ben documentata e compresa dal team di supporto||1. Supporta solo semplici confronti e non AND/OR condiziona bene<br/> 2. Le condizioni a cascata funzionano in modo irregolare<br/> 3. Lento: database intensivo, quindi può rallentare lunghi sondaggi<br/> 4. Alcuni problemi segnalati con le condizioni di ricaricamento<br/> 5. La GUI non si adatta bene quando ci sono dozzine, centinaia o migliaia di domande<br/> 6. Potrebbe essere lento convertire i sondaggi cartacei poiché devono utilizzare i nomi SGQA<br/> 7. Spesso è necessario un programmatore per codificare in modo personalizzato la logica necessaria per ramificazioni complesse |- |Rilevanza||1. Supporta logiche molto complesse, incluse oltre 80 funzioni e operatori matematici/stringa<br/> 2. Supporto perfetto per la logica a cascata<br/> 3. Veloce: nessuna chiamata aggiuntiva al database, quindi supporta oltre 1000 sondaggi di domande<br/> 4. Nessun problema con la logica di ricarica poiché non richiede codici SGQA<br/> 5. L'evidenziazione della sintassi scala fino a oltre 1000 sondaggi di domande<br/> 6. Facile e veloce da usare per i gruppi che vogliono informatizzare i sondaggi cartacei esistenti.<br/> 7. Supporta facilmente interviste semi-strutturate e indagini epidemiologiche senza bisogno di programmatori||1. Nessuna GUI per condizioni semplici: usa invece l'evidenziazione della sintassi<br/> 2. Nuovo, quindi i team di supporto non hanno ancora acquisito padronanza di EM. |} Il fondo è che se sei soddisfatto di come funziona LimeSurvey 1.91+, non c'è motivo di cambiare ciò che fai. <span id="What_are_some_other_benefits_of_using_EM?"></span> ==Quali sono gli altri vantaggi dell'utilizzo di EM?== Ecco alcuni degli altri motivi per cui potresti voler utilizzare EM. #Calcoli: puoi creare qualsiasi calcolo ti venga in mente: #*Hai accesso a tutti i comuni operatori e funzioni matematiche #* Hai accesso a oltre 70 funzioni matematiche, di data e di elaborazione di stringhe #*È abbastanza facile per gli sviluppatori aggiungere nuove funzioni se gli utenti ne hanno bisogno #Memorizzazione dei calcoli nel database #*Ora puoi calcolare calcoli semplici e complessi e/o punteggi di scala E li hai memorizzati nel database senza bisogno di JavaScript. #*Usa il tipo di domanda Equazione per eseguire questa operazione. #Valutazioni #*Ora puoi creare valutazioni o ridimensionare i punteggi di qualsiasi tipo di domanda, non solo del sottoinsieme che era supportato #*Puoi utilizzare Tailoring per mostrare i punteggi delle valutazioni correnti o totali ovunque sia necessario, anche sulla stessa pagina #*Hai più controllo sui report generati in base a tali punteggi di valutazione #*Puoi memorizzare i punteggi di valutazione nel database senza bisogno di JavaScript #*Puoi nascondere i punteggi di valutazione senza bisogno di JavaScript o CSS #Campi sostitutivi # *Invece di utilizzare {INSERTANS:SGQA}, puoi semplicemente utilizzare il codice domanda: questo semplifica la lettura e la convalida. #*Questo evita anche la necessità comune di modificare le domande per cambiare il codice SGQA per far funzionare tutto . #Tailoring - puoi visualizzare in modo condizionale il testo basato su altri valori #*Usa il titolo appropriato per un oggetto, come (es. "Ciao<nowiki> [</nowiki> Mr./Mrs.] Smith") #*Produce frasi grammaticalmente corrette in base al singolare/plurale: (ad es. "You have 1 child" vs. "You have 2 children") #*Coniugazione appropriata dei verbi e rifiuta i nomi in base al genere e alla pluralità del soggetto. #Nuovi attributi variabili: puoi accedere a quanto segue per personalizzare: #* (nessun suffisso) - un alias per qcode.code #*. code - il codice di risposta selezionato per la domanda se è rilevante (altrimenti vuoto), o il valore del testo se non è una domanda codificata #*.NAOK - uguale a .code, ma può far parte di calcoli o elenchi anche se irrilevante #*.value - il valore di valutazione per la domanda se è rilevante (altrimenti vuoto), o il valore di testo se non è una domanda codificata -- disponibile se le valutazioni sono abilitate per il sondaggio, altrimenti sempre zero #*.valueNAOK - uguale a .value, ma può far parte di calcoli o liste anche se irrilevante #*.shown - la risposta mostrata all'utente (questo è ciò che fa {INSERTANS:xxx} ) #*.qid - l'ID domanda #*.gid - l'ID gruppo #*.sgqa - il valore SGQA per la domanda #*.jsName - il nome corretto della variabile javascript per la domanda, indipendentemente dal fatto che sia definita in questa pagina o in un'altra #*.qseq - la sequenza della domanda (a partire da 0) #*.gseq - la sequenza del gruppo (a partire da 0) #*. obbligatori - se la domanda è obbligatoria (S/N) #*.question - il testo della domanda #*.relevance - l'equazione di rilevanza per la domanda #*.grelevance - l'equazione di rilevanza per il gruppo #*.relevanceStatus - se la domanda è attualmente pertinente o meno (booleano (può essere diverso in PHP e JS)) #*.type - il tipo di domanda (il codice di un carattere)!N !#Modifiche dinamiche sulla pagina #*Tutte le pertinenze, i calcoli e la personalizzazione funzionano in modo dinamico su una pagina, quindi le modifiche ai valori aggiornano istantaneamente la pagina #*Quindi, le domande appaiono/scompaiono dinamicamente a seconda che sono pertinenti #*Anche le domande sono adattate dinamicamente in base alle risposte sulla pagina, quindi puoi vedere i totali parziali, le frasi personalizzate e i rapporti personalizzati. #Nuova schermata di immissione dati #*Oltre a utilizzare l'attuale sistema di inserimento dati, puoi semplicemente utilizzare Survey-All-In-One. #*Questo supporta la pertinenza e la personalizzazione della pagina, quindi gli addetti all'inserimento dati possono scorrere rapidamente e dovranno solo inserire il risposte pertinenti #*Questo può essere fondamentale se la persona che inserisce i dati ha bisogno di vedere la personalizzazione, che è anche dinamica. #Elimina la necessità della maggior parte dei JavaScript personalizzati #*EM supporta facilmente calcoli complicati, punteggio , sartoria e logica condizionale. #*Alcune cose avranno ancora bisogno di JavaScript (come layout personalizzati e sotto-elementi delle domande nascosti in modo condizionale), ma il tuo JavaScript può utilizzare le funzioni EM in modo che tu possa accedere alle domande tramite il loro Qcode invece di SGQA e accedere a qualsiasi proprietà della domanda sopra elencata. <span id="What_are_some_other_helpful_new_features_enabled_by_EM?"></span> ==Quali sono altre utili nuove funzionalità abilitate da EM?== Indipendentemente dal fatto che tu continui a utilizzare l'editor delle condizioni o a comporre manualmente le equazioni di pertinenza, ottieni questi vantaggi aggiuntivi: #Puoi creare criteri di convalida più complessi #*Tutti gli attributi delle domande avanzate (come max_answers, min_num_value_n, max_num_value) può utilizzare le espressioni. Pertanto, i criteri min/max possono essere facilmente regolati in base alle risposte precedenti, anche se si trovano sulla stessa pagina. #*EM gestisce anche tutte le convalide basate sulle espressioni regolari, in modo da poter combinare in modo affidabile preg ed equazione- basati sugli attributi delle domande. #Facile riordinamento (o eliminazione) di domande e gruppi #*Prima della versione 1.92, non era possibile riordinare domande o gruppi se LimeSurvey riteneva che tale riordinamento potesse interrompersi condizioni in cui sono stati utilizzati. Allo stesso modo, non è possibile eliminare le domande se qualsiasi altra domanda dipende da esse. #*Con l'evidenziazione della sintassi di EM, è facile vedere e convalidare se si tenta di utilizzare le domande prima che vengano dichiarate. Quindi, ora ti consentiamo di riordinare o eliminare domande e gruppi quando vuoi. EM aggiornerà tutta l'evidenziazione della sintassi per mostrarti potenziali errori. #*La visualizzazione delle domande di riordino è stata migliorata per facilitare tale revisione. Ora mostra l'equazione di pertinenza e l'adattamento della domanda, in modo da poter vedere immediatamente se le variabili diventano rosa (nel senso che vengono utilizzate prima di essere dichiarate). #L'indice di navigazione della domanda/gruppo è sempre disponibile e accurato #* Prima della versione 1.92, questi indici non erano disponibili in presenza di condizioni complesse #*Con EM, possiamo garantire che siano accurati. #*I soggetti possono persino tornare indietro, a una domanda precedente, modificare la risposta , quindi salta in avanti (o invia) #**Quando salti in avanti, EM convaliderà nuovamente tutte le domande/gruppi intervenuti. #**Se qualsiasi domanda diventa irrilevante, verrà NULLATA nel database in modo che i tuoi dati siano internamente coerenti #**Se qualsiasi domanda diventa pertinente o non rispetta le regole obbligatorie o di convalida, EM si fermerà su quella pagina e obbligherà l'utente a rispondere a tali domande prima di passare alla destinazione finale. #Conversione automatica delle condizioni in pertinenza #*Quando aggiorni il tuo database, tutte le indagini esistenti che hanno condizioni avranno equazioni di pertinenza generate per esse #*Ogni volta che importi un'indagine, le equazioni di pertinenza verranno create secondo necessità #*Ogni volta che aggiungi, elimini o modifichi condizioni, EM genererà l'equazione di rilevanza appropriata. #Evidenziazione della sintassi conveniente #*Quando EM mostra l'equazione di rilevanza, mostrerà il Qcode, anche se hai inserito un codice SGQA, poiché presumiamo che sarà più facile da leggere. #*Tutte le variabili sono codificate a colori per mostrare se sono state dichiarate prima o dopo la domanda corrente (o prima o dopo il gruppo corrente). Ciò ti consente di rilevare e correggere rapidamente i casi in cui provi a utilizzare le variabili per la pertinenza (incluso array_filter), la personalizzazione o le equazioni di convalida prima di dichiararle. #*Inoltre, se passi il mouse sopra la variabile con codice colore , vedrai i metadati più importanti relativi a quella domanda. Ciò include la sequenza di gruppo n., la sequenza di domande n., il Qcode, il testo della domanda e tutte le scelte di risposta disponibili (se si tratta di un tipo di domanda con scelte di risposta enumerate). #**L'elenco delle scelte di risposta utilizza questa sintassi : 'risposte':{key:val, ... }. #**''key'' ha la sintassi ''''scale~code'''' dove ''scale'' è la scala della risposta (es. per doppia scala), e ''code'' è il codice di risposta. #**''val'' ha la sintassi ''''value~shown'''' dove ''value'' è il valore della valutazione (se si utilizzano le valutazioni, altrimenti ''code'')(es. Qcode.value), e ''shown'' è il valore visualizzato dal soggetto (es. Qcode.shown) #**Questo significa che molti sondaggi possono utilizzare i calcoli senza bisogno della modalità di valutazione. Se hai enumerato opzioni di risposta univoche, non decimali e non negative, puoi semplicemente eseguire calcoli sui valori Qcode.code. #Facile revisione dell'intera logica e contenuto del sondaggio #*C'è una nuova funzione Mostra logica sondaggio che ti consente di vedere tutto ciò che riguarda il sondaggio (o gruppo o domanda) su una singola pagina. #*Mostra i dettagli a livello di gruppo, domanda, sotto-domanda e risposta per l'ambito selezionato (sondaggio vs. gruppo vs. domanda) #*Mostra anche la pertinenza, la pertinenza a livello di sottodomanda (per array_filter e array_filter_exclude) e l'equazione di validazione generata (per preg e qualsiasi regola di validazione come min/max sum/number of valori) e tutti gli attributi delle domande non vuote. #*Tutto è evidenziato in sintassi in modo da poter vedere potenziali errori di sintassi (come parentesi non bilanciate o uso di variabili prima che fossero dichiarate) #*La sintassi- l'evidenziazione supporta la navigazione e la modifica rapide del sondaggio. #**Se fai clic sul nome di una variabile, si apre una finestra del browser (o scheda) che mostra quella domanda e ti consente di modificarla. #** Se fai clic sul nome di un gruppo, si apre una finestra del browser (o scheda) che mostra la vista di riordino del gruppo in modo da poter spostare facilmente le domande. #**Tutti gli attributi della domanda sono anche evidenziati nella sintassi. Ciò ti consente di impostare e visualizzare le espressioni all'interno delle opzioni di domanda avanzate (come basare il numero massimo/minimo/la somma dei valori su un'espressione) #*L'autore di EM ha utilizzato una visualizzazione simile (un po' più chiara) per consentire ai suoi collaboratori epidemiologi e istituzionali Review Board convalida e autorizza sondaggi con migliaia di domande in interviste strutturate altamente ramificate e personalizzate <span id="Getting_Started"></span> =Per iniziare= Il modo migliore per iniziare con EM è: *Installare l'ultima versione stabile da http://www.limesurvey.org/en/download *Importare ed esplorare i [[Sondaggi di esempio ExpressionScript|sondaggi di esempio ]]. *Esplora [[ExpressionScript How-tos|casi d'uso e HowTo]] e [[Esempi ExpressionScript|esempi passo-passo]]. *Esplora la documentazione EM (questa pagina)! N!*Esamina la suite di test EM integrata **Da qualsiasi sondaggio, in Strumenti, seleziona l'opzione EM **Funzioni disponibili elenca le oltre 70 funzioni e la sintassi **Test unitari di test isolati Expressions ***mostra esempi di utilizzo di tutte le funzioni e gli operatori EM e i risultati PHP e JavaScript ***nota che ci sono poche funzioni che generano risultati diversi nelle versioni PHP e JavaScript, quindi questa pagina ti consente pianifica la tua logica EM di conseguenza. <span id="What_Functionality_does_Expression_Manager_Extend/Replace?_(LimeSurvey_<=_1.91+)"></span> =Quali funzionalità vengono estese/sostituite da Expression Manager? (LimeSurvey <= 1.91+)= <span id="Conditions_=>_Relevance"></span> ==Condizioni => Rilevanza== Le condizioni controllano quali domande sono visibili. La sintassi generale era ''SGQA operator Value'', come ''111X2X3 == "Y"''. Le condizioni potevano essere combinate in AND o OR insieme, ma mescolare AND e OR era difficile. Le condizioni stesse erano memorizzate in una tabella separata e gran parte del codice di LimeSurvey era dedicato alla gestione delle condizioni. A causa dell'ampio accesso al database, l'elaborazione di un numero elevato di condizioni potrebbe causare notevoli problemi di prestazioni. Inoltre, una volta assegnate le condizioni alle domande o ai gruppi, spesso non era consentito riordinarli o eliminarli. <span id="Assessments_=>_Equations_and_Micro-Tailoring"></span> ==Valutazioni => Equazioni e Micro-Adattamento== Le valutazioni consentono agli utenti di creare punteggi di scala da una raccolta di domande. Tuttavia, non potevano cambiare dinamicamente nella pagina corrente e i loro valori non venivano archiviati nel database. <span id="Replacements_=>_Micro-Tailoring"></span> ==Sostituzioni => Micro-Sartoria== Gli utenti possono personalizzare alcuni messaggi e domande in base alle risposte precedenti. Ad esempio, una domanda potrebbe essere ''{TOKEN:FIRSTNAME}, hai detto che {INSERTANS:111X3X4} era il tuo sport preferito''. Tuttavia, non era possibile adattare le condizioni (come dire "Mr." o "Mrs." a seconda del genere della persona), o coniugare verbi o rifiutare sostantivi senza JavaScript di fantasia. Gli autori potevano implementare sondaggi che sembravano adattare le domande, ma richiedevano domande separate per ogni permutazione e condizioni complesse per decidere quali domande visualizzare. <span id="Validation"></span> ==Convalida== La domanda può essere convalidata con espressioni regolari o valori minimo/massimo oppure lasciare che una risposta SGQA serva come valore minimo o massimo. Tuttavia, le convalide non possono essere basate su calcoli di altre variabili senza JavaScript di fantasia. <span id="Equations"></span> ==Equazioni== Le equazioni non erano supportate senza JavaScript di fantasia. <span id="Equation_Question_Type"></span> ==Tipo di domanda equazione== Le equazioni non possono essere salvate nel database (ad es. il punteggio finale per una valutazione) senza JavaScript sofisticato. <span id="How_Will_Expression_Manager_Replace/Extend_That_Functionality?"></span> =In che modo Expression Manager sostituirà/estenderà tale funzionalità?= Expression Manager è un nuovo modulo principale all'interno di LimeSurvey che rende molto più semplice supportare il tipo di funzionalità complesse che prima richiedevano JavaScript personalizzato. Sta anche sostituendo il modo in cui LimeSurvey attualmente gestisce Condizioni e Valutazioni. <span id="New_Terminology_When_Referring_to_Expression_Manager_(EM)"></span> ==Nuova terminologia quando si fa riferimento a Expression Manager (EM)== EM "pensa" alla sua funzionalità nei seguenti termini: *'''Branching basato sulla pertinenza''' - se una domanda è rilevante, allora ponila, altrimenti non farlo (ad es. rendila invisibile e contrassegnala come NULL nel database). C'è un nuovo campo Rilevanza per tutti i tipi di domanda e anche per ogni gruppo (quindi puoi applicare una serie di condizioni a un intero gruppo senza dover copiare la stessa condizione a ogni domanda e/o combinare condizioni di gruppo e a livello di domanda logica). *'''Tailoring''' - Una volta che sai quali domande dovrebbero essere poste, il tailoring (a volte chiamato ''piping'') specifica come la domanda dovrebbe essere posta. Ciò ti consente di supportare non solo la semplice sostituzione (come {TOKEN:FIRSTNAME}), ma anche la coniugazione dei verbi e la declinazione dei sostantivi in base al genere o al numero dei tuoi soggetti. Ti consente anche di modificare il messaggio che invii a un soggetto in base al fatto che abbia risposto (o come abbia risposto) ad altre domande. *'''Equazioni''' - EM aggiunge un nuovo tipo di domanda chiamato Equazione che memorizza il risultato di un'Espressione. I risultati di queste equazioni vengono calcolati e scritti nel database, anche se li nascondi nella pagina. Pertanto, sono utili per calcoli di punteggio nascosti, navigazione basata su equazioni complesse, valutazioni e report che dovrebbero essere generati e facilmente disponibili all'interno del database. <span id="Relevance_and_Cascading_Relevance"></span> ===Pertinenza e pertinenza a cascata=== Ogni tipo di domanda ora ha un'opzione Rilevanza che controlla se la domanda viene visualizzata. EM elabora ciascuna delle equazioni di rilevanza nell'ordine in cui dovrebbe apparire nel sondaggio. Se l'espressione è vera (o mancante - per supportare i sondaggi precedenti), verrà visualizzata la domanda. Se non è rilevante, la domanda verrà nascosta e il valore verrà annullato nel database. Se non ci sono domande pertinenti in un gruppo, l'intero gruppo verrà saltato. Inoltre, se una qualsiasi delle variabili all'interno di un'espressione è irrilevante, l'espressione restituisce sempre false. Ciò abilita la pertinenza a cascata in modo da non dover scrivere equazioni di pertinenza molto lunghe per ogni domanda. Supponiamo che tu abbia 5 domande Q1-Q5 e desideri solo mostrare Q2 se è stata data risposta a Q1 e Q3 se è stata data risposta a Q2, ecc. Le equazioni di rilevanza potrebbero essere: {| class="wikitable" !Codice domanda!!Rilevanza!!Domanda |- |Q1||1||Come ti chiami? |- |Q2||Q1 ||{Q1}, quanti anni hai? |- |Q3||Q2||Allora, hai {Q2} anni. Sei sposato? |- |Q4||Q3 == "S"||{Q1}, da quanto tempo sei sposato? |- |Q5||Q4|| Quanti figli hai, {Q1}? |} I calcoli di pertinenza funzionano anche in JavaScript, quindi puoi inserire tutte le domande di cui sopra su una pagina e funzionerebbe comunque come previsto. In effetti, EM sostituisce totalmente il modo in cui EM elabora i formati di indagine Survey vs. Group vs. Question-at-a-time. Ora utilizzano tutti esattamente lo stesso motore di navigazione, quindi funzionano in modo identico indipendentemente dallo stile del sondaggio. Finché ti trovi sulla stessa pagina, tutti i dati che hai inserito saranno ancora lì, solo nascosti. Quindi, se inserisci alcune informazioni, quindi scegli un'opzione che le rende irrilevanti, quindi rendile nuovamente rilevanti, le tue risposte saranno ancora disponibili. Tuttavia, non appena si passa a una pagina diversa, tutte le risposte irrilevanti andranno perse per l'integrità del set di dati. <span id="Group-Level_Relevance"></span> ===Rilevanza a livello di gruppo=== Expression Manager supporta anche la pertinenza a livello di gruppo. Ciò semplifica l'implementazione del looping. Supponiamo che tu voglia raccogliere informazioni su un massimo di 10 entità (come prodotti o persone in una famiglia), dove prima determini quante entità necessitano di follow-up (ad esempio chiedendo quante persone vivono in una famiglia o chiedendo alle persone di controllare quali prodotti preferiscono da un lungo elenco). Dopo aver saputo quante entità necessitano di follow-up, puoi utilizzare la pertinenza a livello di gruppo come {count >= 1}, {count >=2}, ... {count >= 10} per ciascuno dei 10 gruppi di follow- domande. All'interno di ogni gruppo, puoi avere una logica condizionale a livello di domanda (ad es. domande di follow-up specifiche per sesso o età per ogni materia). La domanda e le equazioni di rilevanza a livello di gruppo vengono combinate in AND insieme per determinare quale deve essere mostrato. <span id="Tailoring_/_Piping"></span> ===Sartoria / Tubazioni=== Tutto ciò che si trova all'interno delle parentesi graffe viene ora trattato come un'espressione (con un'eccezione descritta di seguito). Le espressioni hanno accesso a tutti i LimeReplacementFields, a tutte le variabili (tramite diversi alias), a tutti i tipici operatori di equazioni (matematici, logici e di confronto) e a dozzine di funzioni (che funzionano anche dinamicamente sul lato client). Usando queste equazioni, puoi fare cose come: #Mostrare in modo condizionale messaggi personalizzati agli intervistati in base alle risposte precedenti #Creare Valutazioni e mostrare i risultati della Valutazione (o diramare in modo condizionale o mostrare messaggi) in base a tali risultati, tutti senza utilizzare il modulo Valutazioni stesso #Coniuga i verbi e rifiuta i nomi all'interno di domande, risposte e rapporti. #Mostra i riepiloghi delle risposte prima della pagina "Mostra le tue risposte" alla fine del sondaggio <span id="Equations"></span> ===Equazioni=== C'è un nuovo tipo di domanda chiamato Equazione. È come una domanda Boilerplate, tranne per il fatto che memorizza il valore di ciò che viene visualizzato nel database. Pertanto, se il testo della domanda sull'equazione contiene un calcolo di valutazione, tale valore verrà archiviato nel database in una variabile che può essere visualizzata all'interno di statistiche pubbliche o private. Questo risolve una richiesta comune per l'archiviazione dei punteggi di valutazione all'interno del database <span id="Syntax"></span> ==Sintassi== Tutto ciò che è contenuto all'interno delle parentesi graffe è ora considerato un'espressione (con un'eccezione: non devono essere presenti spazi bianchi iniziali o finali, necessari per garantire che Expression Manager non tenti di elaborare JavaScript incorporato). Nota, è OK che le espressioni si estendano su più righe, purché non ci siano spazi bianchi dopo la parentesi graffa di apertura o prima della parentesi graffa di chiusura. Ciò è particolarmente utile per istruzioni if() annidate come questa: <syntaxhighlight lang="java">{if(is_empty(PFTotals), '', if(PFTotals >= -5 && PFTotals <= -4, 'Very Soft', if(PFTotals >= -3 && PFTotals <= -2, 'Morbido', if(PFTotals == -1, 'Un po' debole', if(PFTotals == 0, 'Moderato',! N! if(PFTotals == 1, 'Un po' difficile', if(PFTotals >= 2 && PFTotals <= 3, 'Difficile', if(PFTotals >= 4 && PFTotals <= 5, 'Molto difficile', '' ) ) ) ) ) ) ) )} </syntaxhighlight> <div id="EMsyntax">Expression Manager supporta la seguente sintassi:</div> *Tutti gli operatori matematici standard (ad es. +,-,*,/,!) *Tutti gli operatori di confronto standard (ad es. <,<=,==,!=,>,>=, più questi equivalenti: lt,le,eq,ne,gt,ge) *Parentesi (così puoi raggruppare le sottoespressioni) *Operatori condizionali (es. &&,| | e questi equivalenti: and,or) * Stringhe con virgolette singole e doppie (ognuna delle quali può incorporare stringhe con l'altro tipo di virgolette) *Operatore virgola (quindi può avere un elenco di espressioni e restituire solo il risultato finale) *Operatore di assegnazione (=)!N !*Variabili predefinite (per fare riferimento a domande, attributi delle domande e risposte) - ad es. tutti i codici SGQA *Funzioni predefinite (ce ne sono già più di 70 ed è facile aggiungerne altre) <span id="Operators"></span> === Operatori === La sintassi EM segue la normale precedenza degli operatori: {| class="wikitable" !Livello!!Operatore(i)!!Descrizione |- |1||()||parentesi per raggruppare o chiamare funzioni |- | 2||! - +||operatori unari: non, negazione, unario-più |- |3||* /||volte, dividere |- |4||+ -||più , minus |- |5||< <= > >= lt le gt ge||confronti relativi |- |6||== != eq ne||confronti di uguaglianza |- |7||e||AND logico |- |8||o||OR logico |- |9||=||assegnazione operatore |- |10||,||operatore virgola |} <span id="Warning_with_plus_operator_(+)"></span> ==== Avviso con operatore più (+) ==== Per coerenza tra JavaScript e PHP, l'operatore più (+) esegue l'addizione se entrambi gli operandi sono numerici, ma esegue la concatenazione se entrambe le parti sono stringhe non numeriche. Tuttavia, '''ti consigliamo di utilizzare la funzione join() per la concatenazione e la funzione sum() per l'addizione''', in quanto ciò rende più chiaro il tuo intento ed evita risultati imprevisti se ti aspettavi delle stringhe ma hai invece dei numeri (o viceversa versa). <span id="Warning_with_mismatch_between_number_and_string_and_alphabetic_comparison"></span> ==== Avviso con mancata corrispondenza tra numero e stringa e confronto alfabetico ==== Quando si desidera confrontare il valore con confronti relativi o di uguaglianza, prestare attenzione alla mancata corrispondenza del tipo. Il valore inserito dall'utente o il codice di risposta selezionato può essere utilizzato come numero se è chiaramente un numero. Se racchiudi uno dei valori tra <code>"</code> , verrà forzato il confronto come testo (confronto alfabetico). Se desideri confrontare numericamente, non racchiudere mai il numero tra virgolette, <code>"</code> . Ad esempio <code>Q0.NAOK > "50"</code> è vero se Q0.NAOK è una domanda numerica con 9 come valore. Questo perché l'operatore <code>></code> assumerà che sia un confronto alfabetico e non numerico. <div class="mw-translate-fuzzy"> Per essere sicuri di confrontare il valore intero, puoi usare <code>[[Expression_Manager#Implemented_Functions|intval]](Q0.NAOK) > 50</code> , ricorda solo che se Q0.NAOK non è un numero (vuoto o una stringa), allora intval(Q0. NAOK) === 0. Per confrontare il valore stringa ("A" < "B") utilizzare [[Expression_Manager#Implemented_Functions|strcmp]] direttamente: <code>strcmp(Q0.NAOK,"B")</code> o <code>strcmp(Q0.NAOK,"A5")</code> . </div> <span id="Caution_about_using_Assignment_Operator_(=)"></span> ===Attenzione sull'uso dell'operatore di assegnazione (=)=== Nota, dovresti evitare di utilizzare gli operatori di assegnazione a meno che non sia assolutamente necessario, poiché potrebbero causare effetti collaterali imprevisti. Ad esempio, se modifichi il valore di una risposta precedente, la pertinenza a cascata e la logica di convalida tra quella domanda e la domanda corrente non vengono ricalcolate, quindi potresti ritrovarti con dati internamente incoerenti (ad es. stato annullato NULL o domande che sono state saltate ma avrebbero dovuto avere una risposta). In generale, se si desidera assegnare un valore a una variabile, è necessario creare un tipo di domanda Equazione e utilizzare un'espressione per impostarne il valore. Tuttavia, ci sono alcune rare volte in cui le persone hanno davvero bisogno di questo operatore, quindi l'abbiamo reso disponibile. Per aiutarti a metterti in guardia su questo operatore, è mostrato in carattere rosso all'interno delle equazioni di sintassi (in modo da non confonderlo con "==") ===Utilizzo dell'operatore di assegnazione=== I motivi principali per cui potresti voler utilizzare l'assegnazione sono: * Devi impostare il valore predefinito per una domanda che non accetta i valori predefiniti tramite equazione (come list radio, dove l'interfaccia utente ti consente di scegliere una delle opzioni di risposta, ma non ti consente di inserire un'equazione). Tuttavia, fai attenzione, poiché LimeSurvey non sarà in grado di convalidare che la tua equazione generi una delle risposte consentite per quella domanda. * Devi forzare la modifica della risposta a una domanda precedente basata su una risposta successiva * Hai bisogno di una quota complessa: usa una singola scelta nascosta per la quota e impostala usando l'assegnazione! N! * ecc ... È possibile utilizzare tutti i sistemi di gestione delle espressioni per questo scopo. {{Alert|L'assegnazione viene eseguita solo in PHP. Questo non aggiorna alcun valore sulla stessa pagina, ma solo quando l'utente naviga con next, previous, save ….}} {{Alert|Se non si utilizza un tipo di [[Question_type_-_Equation|equazione domanda]] per questo scopo: l'assegnazione viene eseguita solo dopo che la logica della pagina corrente è terminata. Il metodo consigliato è utilizzare sempre una [[Question_type_-_Equation|domanda sull'equazione]].}} Alcuni esempi: * Imposta la risposta a una breve domanda di testo in minuscolo: <code>{QCODE=strtolower(QCODE.NAOK)}</code> * Imposta una risposta predefinita a un tipo di domanda array all'inizio di un sondaggio: <code>{Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}</code> * Imposta una risposta predefinita a un tipo di domanda di tipo array all'inizio di un sondaggio: <code>{Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}</code> * Imposta una risposta con condizione: <code>{QCODE=if(YesNo="Y","A1","")}</code> <span id="XSS_security"></span> == Sicurezza XSS == Con XSS abilitato, alcuni sistemi di gestione delle espressioni non possono essere utilizzati: * inizia un tag HTML nell'espressione ma termina con un'altra espressione * utilizza un'espressione complessa nell'URL. Esempio e soluzione alternativa * <code>{if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")}</code> funzionanti con la sicurezza XSS, qui puoi utilizzare <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> * <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> <span id="Access_to_Variables"></span> ==Accesso alle variabili== Expression Manager fornisce l'accesso in sola lettura a qualsiasi variabile di cui potremmo aver bisogno. Per retrocompatibilità, fornisce l'accesso a quanto segue: *TOKEN:xxx - il valore di un TOKEN (ad es. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (solo per sondaggi NON anonimi). *[[Aggiunta di un question#Information_from_previous_answers|INSERTANS:SGQA]] - il valore visualizzato di una risposta (es. "Sì"). Per Expression Manager è lo stesso che usando {QCODE.shown}. *Tutti [[The_template_editor#Keywords|{XXX} valori usati dai modelli]]. *Nel testo della domanda, puoi usare {QID} sostituito dall'id della domanda e {SGQ} sostituiti dall'SGQA della domanda Inoltre, Expression Manager consente di fare riferimento alle variabili tramite il codice domanda (la colonna "titolo" nella tabella delle domande all'interno del database). Questa è anche l'etichetta della variabile utilizzata quando si esportano i dati in SPSS, R o SAS. Ad esempio, se hai domande su nome, età e sesso, puoi chiamare queste variabili ''nome'', ''età'' e ''sesso'' invece di ''12345X13X22'', ''12345X13X23' ', e ''12345X13X24''. Ciò semplifica la lettura delle equazioni e la convalida della logica da parte di tutti, inoltre consente di mescolare le domande senza dover tenere traccia dei numeri di gruppo o delle domande. <div class='simplebox'> '''Importante:''' È sicuro fare riferimento solo a variabili che si verificano nelle pagine o domande precedenti. </div> Inoltre, Expression Manager ti consente di accedere a molte proprietà della Domanda: {| class="wikitable" !Sintassi!!Significato!!Esempio!!Esempio Risultato |- |Qcode||un alias per Qcode.code||{implode(',',name,gender )}||'Tom','M' |- |Qcode.code||il codice di risposta selezionato per la domanda se è rilevante (altrimenti vuoto), o il valore del testo se non è un domanda in codice||{implode(',',name.code,gender.code)}||'Tom','M' |- |Qcode.NAOK||uguale a Qcode - vedi discussione su NAOK||{gender.NAOK}||'M' |- |Qcode.value||il valore di valutazione per la domanda se è rilevante (altrimenti vuoto), o il valore del testo se non lo è una domanda in codice||{gender.value}||'1' |- |Qcode.valueNAOK||uguale a Qcode.value - vedi discussione su NAOK||{gender.valueNAOK}||'1 ' |- |Qcode.shown||il valore visualizzato per la domanda||{implode(',',name.shown,gender.shown)}||'Tom','Male'!N !|- |Qcode.question||il testo della domanda||{gender.question}||'Qual è il tuo genere?' |- |Qcode.mandatory||se la domanda è obbligatorio (S/N)||{gender.mandatory}||'N' |- |Qcode.qid||il numero della domanda interna (non il numero progressivo)||{gender.qid} ||337 |- |Qcode.type||il tipo di domanda||{gender.type}||'G' |- |Qcode.jsName||il nome javascript corretto per la domanda, indipendentemente dal fatto che sia dichiarato all'interno o all'esterno di questa pagina||{gender.jsName}||'java1827X3X337' |- |Qcode.gid||il numero di gruppo interno (non il numero sequenziale)|| {gender.gid}||3 |- |Qcode.qseq||il numero progressivo della domanda, partendo da 0||{gender.qseq}||5 |- |Qcode.gseq||il numero sequenziale del gruppo, a partire da 0||{gender.gseq}||1 |- |Qcode.relevanceStatus||se la domanda è attualmente pertinente (0 o 1 )||{gender.relevanceStatus}||1 |- |Qcode.relevance||l'equazione di rilevanza a livello di domanda||{gender.relevance}||'!is_empty(name)' |- |Qcode.grelevance||l'equazione di rilevanza a livello di gruppo||{gender.grelevance}||'num_children >= 5' |- |Qcode.sgqa||il valore SGQA per questa domanda||{gender.sgqa}||'1827X3X337' |} <span id="HTML_editor_issue"></span> === Problema con l'editor HTML=== {{Avviso|Questo problema è stato risolto dopo la build 2.05 140803}} Se utilizzi l'editor HTML, alcuni caratteri vengono sostituiti da entità HTML. * & da & * < da < * > da > Se usi un editor HTML devi usare : * e for & * lt for < * le for <= * gt for > * ge per >= <span id="Qcode_Variable_Naming"></span> ==Denominazione variabile Qcode== Ecco i dettagli su come costruire un Qcode (e accedere ad alcune proprietà) per tipo di domanda. In generale, i Qcode sono costruiti come: DomandaCodice . '_'. ID domanda secondaria . '_'. ID scala Per '''comment''' e '''other''', il codice della domanda è QuestionCode_comment e QuestionCode_other {| class="wikitable" !Tipo!!Descrizione!!Codice!!SubQs!!Opzioni di risposta!!Scale!!Codice di risposta!!Risposta mostrata!!Pertinenza |- |5||5 Pulsanti radio Point Choice||Q1|| ||1-5|| ||{Q1}||{Q1.mostrato}||{Q1==3} |- |B||Array (10 punti di scelta) Pulsanti radio||Q2||L1-L6| |1-10|| ||{Q2_L2}||{Q2_L2.mostrato}||{Q2_L2==7} |- |A||Array (scelta a 5 punti) Pulsanti radio||Q3||1-5| |1-5|| ||{Q3_1}||{Q3_1.mostrato}||{Q3_1>=3} |- |1||Array (etichette flessibili) Doppia scala||Q4||sq1-sq5||0 :a1-a3||1:b1-b3||{Q4_sq1_0}||{Q4_sq1_1.mostrato}||{Q4_sq1_1=='b2'} |- |H||Array (flessibile) - Formato colonna||Q5||1-5||s,m,t|| ||{Q5_1}||{Q5_1.mostrato}||{Q5_1=='s'} |- |F||Array (flessibile) - Formato riga||Q6||F1-F5| |1-5|| ||{Q6_F3}||{Q6_F3.mostrato}||{Q6_F3==4} |- |E||Array (Aumenta/Uguale/Diminuisci) Pulsanti Radio||Q7||1- 7||I,S,D|| ||{Q7_4}||{Q7_4.mostrato}||{Q7_4=='D'} |- |:||Array (Multi Flexi) da 1 a 10||Q8||ls1,todo ,ls2||min,max,media|| ||{Q8_ls1_max}||{Q8_ls2_avg.shown}||{Q8_ls2_min==7} |- |;||Array (Multi Flexi) Testo||Q9||hp,st,sw|| 1°,2°,3°|| ||{Q9_hp_3rd}||{Q9_hp_3rd.shown}||{Q9_hp_3rd=='Peter'} |- |C||Array (Sì/Incerto/No) Pulsanti radio||Q10|| 1-5||Y,N,U|| ||{Q10_1}||{Q10_1.mostrato}||{Q10_3=='Y'} |- |X||Domanda standard||Q11|| || || || ||{Q11.mostrato}|| |- |G||Data||Q12|| || || ||{Q12}||{Q12.mostrato}|| |- |*||Equazione||Q13|| || || ||{Q13}||{Q13.mostrato}||{Q13>5} |- |~124~||File Upload (registra il numero di file caricati)||Q14|| || || ||{Q14}|| ||{Q14>0} |- |G||Elenco a discesa Sesso||Q15|| ||M,F|| ||{Q15}||{Q15.mostrato}||{Q15=='M'} |- |U||Testo libero enorme||Q16|| || || ||{Q16}||{Q16.mostrato}||{strlen(Q16)>100} |- |I||Domanda Lingua||Q17|| || || ||{Q17}||{Q17.mostrato}||{Q17=='it'} |- |!||Lista - Dropdown||Q18|| ||1-5|| ||{Q18}||{Q18.mostrato}||{Q18==3} |- |L||Elenco a discesa/Elenco pulsanti radio||Q19|| ||AZ|| ||{Q19}||{Q19.mostrato}||{Q19=='X'} |- |O||Elenco con menu a tendina commenti/Elenco pulsanti radio + Area di testo||Q20 || ||AF|| ||{Q20},{Q20comment}||{Q20.shown}||{Q20=='B'} |- |T||Testo libero lungo||Q21|| || || ||{Q21}||{Q21.mostrato}||{strstr(Q21,'hello')>0} |- |M||Casella di scelta multipla||Q22||AF, altro| | || ||{Q22_E}, {Q22_other}||{Q22_E.shown}, {Q22_other.shown}||{Q22_E=='Y'} |- |P||Scelta multipla con commenti Casella di controllo + Testo||Q23||AF|| || ||{Q23_D}, {Q23_Dcomment}||{Q23_D.mostrato}||{!is_empty(Q23)} |- |K||Domanda numerica multipla||Q24||se stesso, mamma, papà || || ||{Q24_self}||{Q24_self.mostrato}||{Q24_self>30} |- |Q||Testo breve multiplo||Q25||AF|| || ||{Q25_B}||{Q25_B.mostrato}||{substr(Q25_B,1,1)=='Q'} |- |N||Tipo di domanda numerica||Q26|| || || ||{Q26}||{Q26.mostrato}||{Q26 > 30} |- |R||Stile classifica||Q27||1-4|| || ||{Q27_1}||{Q27_1.mostrato}||{Q27_1==3} |- |S||Testo libero breve||Q28|| || || ||{Q28}||{Q28.mostrato}||{Q28=='mio'} |- |Y||Pulsanti radio Sì/No||Q29|| || || ||{Q29}||{Q29.mostrato}||{Q29=='S'} |} <span id="The_reserved_'this',_'self',_and_'that'_variables"></span> ==Le variabili riservate 'this', 'self' e 'that'== Molto spesso, si desidera valutare tutte le parti di una domanda, ad esempio contando quante sottodomande hanno ricevuto risposta o sommando i punteggi. Altre volte, vuoi elaborare solo determinate righe o colonne di una domanda (come ottenere le somme di righe o colonne e memorizzarle nel database). Queste variabili riservate rendono tale processo relativamente indolore. La variabile "questa" viene utilizzata esclusivamente all'interno delle opzioni di domanda avanzata "Equazione di convalida dell'intera domanda" e "Equazione di convalida della sottodomanda". Si espande ai nomi delle variabili di ciascuna delle celle all'interno di tali domande. Quindi, se vuoi assicurarti che ogni voce sia maggiore di tre, devi impostare "Equazione di convalida della sottodomanda" su (this > 3). Le variabili "sé" e "quella" sono più potenti e fungono da macro che vengono espanse prima dell'elaborazione delle equazioni. Le scelte di sintassi sono: *self *self.''suffix'' *self.''sub-selector'' *self.''sub-selector''.'' suffisso'' ''suffisso'' è uno qualsiasi dei normali suffissi qcode (es. NAOK, valore, mostrato) ''sub-selector'' è uno di: *comments - solo sottodomande che sono commenti (ad esempio, da scelta multipla con commento ed elenco con commento) *nocomments - solo sottodomande che non sono commenti *sq_X - dove X è un identificatore di riga o colonna. Vengono selezionate solo le sottodomande che corrispondono al modello X. Si noti che la ricerca viene eseguita sull'identificatore di codice completo, quindi sq_X corrisponde e include le sottodomande nX, X, Xn (ad esempio, se si utilizza sq_1, le sottodomande a1, 1a, 1, 11 o 001 sono state incluse). Prestare attenzione al tipo di domanda a doppia scala in cui il codice delle domande secondarie è QCODE_SQCODE_1 e QCODE_SQCODE_1 e al tipo di domanda di classificazione in cui il codice delle domande secondarie è QCODE_1,QCODE_2 .... *nosq_X - dove X è un identificatore di riga o colonna. Vengono selezionate solo le domande secondarie che non corrispondono al modello X. Si noti che la ricerca viene eseguita sull'identificatore di codice completo, quindi nosq_X corrisponde e non include le sottodomande nX, X, Xn Esempi: *È stata data risposta a qualche parte di una domanda? {count(self.NAOK)>0} *Qual è il punteggio di valutazione per questa domanda? {somma(self.valore)} Puoi anche usarli per ottenere i totali di righe e colonne. Supponi di avere un array di numeri con righe AE e colonne 1-5. *Qual è il totale complessivo? {sum(self.NAOK)} *Qual è il totale della riga B? {sum(self.sq_B.NAOK)} *Qual è il totale della colonna 3? {sum(self.sq_3.NAOK)} La variabile "quella" è come la variabile "self", ma ti consente di fare riferimento ad altre domande. La sua sintassi è: *that.''qname'' *that.''qname''.''suffix'' *that.''qname''.''sub-selector' ' *quello.''qname''.''sottoselettore''.''suffisso'' ''qname'' è il nome della domanda senza alcuna estensione della sottodomanda. Quindi, diciamo che crei una domanda 'q1', che è il suo ''qname'' Esempi: *È stata data risposta a qualche parte della domanda q1? {count(that.q1.NAOK)>0} *Qual è il punteggio di valutazione per q2? {sum(that.q2.NAOK)} *Qual è il totale complessivo di q3? {sum(that.q3.NAOK)} *Qual è il totale della riga C in q4? {sum(that.q4.sq_C.NAOK)} *Qual è il totale della colonna 2 in q4? {sum(that.q4.sq_2.NAOK)} Le variabili "self" e "that" possono essere utilizzate in qualsiasi rilevanza, convalida o personalizzazione. L'unica avvertenza è che quando usi la funzione [[Mostra file logico|Mostra file logico]], ti mostrerà il valore espanso di 'self' e 'that'. In questo modo è possibile visualizzare l'equazione effettiva che verrà generata in modo che l'utente (e Expression Manager) possa convalidare l'esistenza delle variabili. Questo può sembrare confuso poiché potresti vedere equazioni piuttosto lunghe. Tuttavia, se modifichi la domanda, vedrai l'equazione originale usando 'self' e/o 'that' Si noti inoltre che non si dovrebbero utilizzare queste variabili se (a) si desidera nominare esplicitamente ciascuna variabile utilizzata in un'equazione, o (b) utilizzare variabili che non hanno sottodomande (ad esempio domande a risposta singola). In questi casi, prefissare una variabile con "quello" è eccessivo e si corre il rischio di ottenere risultati inaspettati. <span id="Usage_of_NAOK"></span> ==Utilizzo di NAOK== NAOK --> "Non applicabile" (NA) va bene (OK) L'uso di NAOK significa che tutte o alcune delle variabili sono irrilevanti (ad esempio "Non applicabile" (NA) va bene (OK)). Quando metti una variabile dalla domanda in qualsiasi equazione: se questa domanda (o sottodomanda) è nascosta dalla condizione: disabilita tutte le equazioni. Ad esempio: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) fornisce sempre una stringa vuota se una sottodomanda di Q1 è filtrata. Per contare il numero di sottodomanda controllate in tale domanda può essere count(Q1_SQ1.NAOK,Q1_SQ2.NAOK ,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Se la sottodomanda è nascosta :Expression manager restituisce una stringa vuota. Senza NAOK: se una domanda o una sottodomanda è nascosta: Expression Manager restituisce sempre una stringa vuota, lo stesso per restituire false. I .mostrati usano sempre il sistema NAOK (stringa vuota se nascosta) ma se hai bisogno del codice della risposta: è sempre una buona idea aggiungere .NAOK dopo il codice della domanda. Tranne se ne hai bisogno e sai cosa fai. Un altro esempio e informazioni sono forniti in [[#Overriding_Cascading_Conditions|Sostituzione delle condizioni a cascata]] <span id="Access_to_Functions"></span> ==Accesso alle funzioni== Expression Manager fornisce l'accesso a funzioni matematiche, stringhe e definite dall'utente, come illustrato di seguito. Ha equivalenti PHP e JavaScript per queste funzioni in modo che funzionino in modo identico sul lato server (PHP) e sul lato client (JavaScript). È facile aggiungere nuove funzioni. <span id="Implemented_Functions"></span> ===Funzioni implementate=== Attualmente sono disponibili le seguenti funzioni: {| class="wikitable" !Function!!Meaning!!Syntax |- |[http://www.php.net/manual/en/function.abs.php abs]||Absolute value||number abs(number) |- |[http://www.php.net/manual/en/function.acos.php acos]||Arc cosine||number acos(number) |- |[http://www.php.net/manual/en/function.addslashes.php addslashes]||Quote string with slashes||string addslashes(string) |- |[http://www.php.net/manual/en/function.asin.php asin]||Arc sine||number asin(number) |- |[http://www.php.net/manual/en/function.atan.php atan]||Arc tangent||number atan(number) |- |[http://www.php.net/manual/en/function.atan2.php atan2]||Arc tangent of two variables||number atan2(number, number) |- |[http://www.php.net/manual/en/function.ceil.php ceil]||Round fractions up||number ceil(number) |- |[http://www.php.net/manual/en/function.checkdate.php 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) |- |[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) |- |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) |- |[http://www.php.net/manual/en/function.date.php date]||Format a local date/time||string date(format <nowiki>[</nowiki>, timestamp=time()]) |- |[http://www.php.net/manual/en/function.exp.php exp]||Calculates the exponent of e||number exp(number) |- |fixnum||Display numbers with comma as radix separator, if needed||string fixnum(number) |- |[http://www.php.net/manual/en/function.floor.php floor]||Round fractions down||number floor(number) |- |[http://www.php.net/manual/en/function.gmdate.php gmdate]||Format a GMT date/time||string gmdate(format <nowiki>[</nowiki>, timestamp=time()]) |- |[http://www.php.net/manual/en/function.html-entity-decode.php html_entity_decode]||Convert all HTML entities to their applicable characters (always uses ENT_QUOTES and UTF-8)||string html_entity_decode(string) |- |[http://www.php.net/manual/en/function.htmlentities.php htmlentities]||Convert all applicable characters to HTML entities (always uses ENT_QUOTES and UTF-8)||string htmlentities(string) |- |[http://www.php.net/manual/en/function.htmlspecialchars.php expr_mgr_htmlspecialchars]||Convert special characters to HTML entities (always uses ENT_QUOTES and UTF-8)||string htmlspecialchars(string) |- |[http://www.php.net/manual/en/function.htmlspecialchars-decode.php expr_mgr_htmlspecialchars_decode]||Convert special HTML entities back to characters (always uses ENT_QUOTES and UTF-8)||string htmlspecialchars_decode(string) |- |[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{{UpdatedIn|3.0.2}}||Excel-style if(test,result_if_true<nowiki>[</nowiki>,result_if_false = ""<nowiki>]</nowiki>)||if(test,result_if_true<nowiki>[</nowiki>,result_if_false = ""<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.intval.php intval]||Get the integer value of a variable||int intval(number <nowiki>[</nowiki>, base=10]) |- |[http://www.php.net/manual/en/function.empty.php is_empty]||Determine whether a variable is considered to be empty||bool is_empty(var) |- |[http://www.php.net/manual/en/function.is-float.php is_float]||Finds whether the type of a variable is float||bool is_float(var) |- |[http://www.php.net/manual/en/function.is-int.php is_int]||Find whether the type of a variable is integer||bool is_int(var) |- |[http://www.php.net/manual/en/function.is-nan.php is_nan]||Finds whether a value is not a number||bool is_nan(var) |- |[http://www.php.net/manual/en/function.is-null.php is_null]||Finds whether a variable is NULL||bool is_null(var) |- |[http://www.php.net/manual/en/function.is-numeric.php is_numeric]||Finds whether a variable is a number or a numeric string||bool is_numeric(var) |- |[http://www.php.net/manual/en/function.is-string.php is_string]||Find whether the type of a variable is string||bool is_string(var) |- |join{{NewIn|2.0|b=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{{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.ltrim.php ltrim]||Strip whitespace (or other characters) from the beginning of a string||string ltrim(string <nowiki>[</nowiki>, charlist]) |- |[http://www.php.net/manual/en/function.max.php max]||Find highest value||number max(arg1, arg2, ... argN) |- |[http://www.php.net/manual/en/function.min.php min]||Find lowest value||number min(arg1, arg2, ... argN) |- |[http://www.php.net/manual/en/function.mktime.php 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) |- |[http://www.php.net/manual/en/function.nl2br.php nl2br]||Inserts HTML line breaks before all newlines in a string||string nl2br(string) |- |[http://www.php.net/manual/en/function.number-format.php number_format]||Format a number with grouped thousands||string number_format(number) |- |pi||Get value of pi||number pi() |- |[http://www.php.net/manual/en/function.pow.php pow]||Exponential expression||number pow(base, exp) |- |[http://www.php.net/manual/en/function.quoted-printable-decode.php quoted_printable_decode]||Convert a quoted-printable string to an 8 bit string||string quoted_printable_decode(string) |- |[http://www.php.net/manual/en/function.quoted-printable-encode.php quoted_printable_encode]||Convert a 8 bit string to a quoted-printable string||string quoted_printable_encode(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 [[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) |- |[http://www.php.net/manual/en/function.round.php round]||Rounds a number to an optional precision||number round(val <nowiki>[</nowiki>, precision]) |- |[http://www.php.net/manual/en/function.rtrim.php rtrim]||Strip whitespace (or other characters) from the end of a string||string rtrim(string <nowiki>[</nowiki>, charlist]) |- |[http://www.php.net/manual/en/function.sin.php sin]||Sine||number sin(arg) |- |[http://www.php.net/manual/en/function.sprintf.php sprintf]||Return a formatted string||string sprintf(format, arg1, arg2, ... argN) |- |[http://www.php.net/manual/en/function.sqrt.php sqrt]||Square root||number sqrt(arg) |- |stddev||Calculate the Sample Standard Deviation for the list of numbers||number stddev(arg1, arg2, ... argN) |- |[http://www.php.net/manual/en/function.str-pad.php str_pad]||Pad a string to a certain length with another string||string str_pad(input, pad_length <nowiki>[</nowiki>, pad_string]) |- |[http://www.php.net/manual/en/function.str-repeat.php str_repeat]||Repeat a string||string str_repeat(input, multiplier) |- |[http://www.php.net/manual/en/function.str-replace.php str_replace]||Replace all occurrences of the search string with the replacement string||string str_replace(search, replace, subject) |- |[http://www.php.net/manual/en/function.strcasecmp.php strcasecmp]||Binary safe case-insensitive string comparison||int strcasecmp(str1, str2) |- |[http://www.php.net/manual/en/function.strcmp.php strcmp]||Binary safe string comparison||int strcmp(str1, str2) |- |[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 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.stristr.php stristr]||Case-insensitive strstr||string stristr(haystack, needle <nowiki>[</nowiki>, before_needle=false]) |- |[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 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.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.strtotime.php strtotime]||Parse about any English textual datetime description into a Unix timestamp||int strtotime(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 an unicode string||string substr(string, start <nowiki>[</nowiki>, 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) |- |[http://www.php.net/manual/en/function.tan.php tan]||Tangent||number tan(arg) |- |[http://www.php.net/manual/en/function.time.php time]||Return current UNIX timestamp||number time() |- |[http://www.php.net/manual/en/function.trim.php trim]||Strip whitespace (or other characters) from the beginning and end of a string||string trim(string <nowiki>[</nowiki>, charlist]) |- |[http://www.php.net/manual/en/function.ucwords.php 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) |} <span id="Functions_that_are_Planned_or_Being_Considered"></span> ===Funzioni pianificate o prese in considerazione=== Altre funzioni pianificate (o prese in considerazione) ma non ancora implementate includono quanto segue. Alcuni di questi sono compatibili con le versioni precedenti con un altro strumento di indagine. {| class="wikitable" !Sintassi!!Significato!!Commenti |- |e()||restituisce il valore di e|| |- |formatDate(X, PAT)||restituisce il valore stringa della data X formattato secondo il modello di formato dati Java PAT|| |- |formatNumber(X,PAT)||restituisce il valore stringa del numero X formattato secondo il numero Java modello di formato PAT|| |- |getAnsOption(X)|| [[ExpressionAnswerOptions|Plugin principale ExpressionAnswerOptions ]] || |- |getAnsOption(X,Y)|| [[ExpressionAnswerOptions|Core plugin ExpressionAnswerOptions ]] || |- |getRelevance(X)||restituisce l'equazione di rilevanza per la domanda X|| |- |getStartTime()||restituisce la data corrispondente all'ora di sistema in cui è iniziata l'intervista|| |- |getType(X)||restituisce il nome stringa del tipo di dato - es. *NA* se isNA()|| |- |gotoFirst()||salta alla prima serie di domande rilevanti - questo viola il normale flusso del sistema|| |- |gotoNext()||salta alla serie successiva di domande rilevanti - questo viola il normale flusso del sistema|| |- |gotoPrevious()||salta alla serie precedente di domande rilevanti - questo viola il normale flusso del sistema|| | - |isAsked(X)||restituisce true se la risposta non è né *NA*, *INVALID*, né *UNASKED*|| |- |isInvalid(X)||restituisce true se la risposta è di tipo *INVALID*|| |- |isNA(X)||restituisce true se la risposta è di tipo *NA*|| |- |isNotUnderstood(X )||restituisce true se la risposta è di tipo *HUH*|| |- |isRefused(X)||restituisce true se la risposta è di tipo *REFUSED*|| |-! N!|isSpecial(X)||restituisce true se la risposta è di tipo *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* o *HUH*|| |-!N !|isUnknown(X)||restituisce vero se la risposta è di tipo *UNKNOWN*|| |- |jumpTo(X)||salta al gruppo contenente la domanda nominata -- questo viola il normale flusso del sistema|| |- |jumpToFirstUnasked()||salta alla prima domanda non posta <strike>ignorando così le precedenti domande con risposta</strike> questo viola il normale flusso del sistema|| |- | lastIndexOf(X,Y)||restituisce l'ultimo indice (base 0) della stringa Y nella stringa X. Restituisce -1 se Y non è contenuta all'interno di X|| |- |list(X,.. .)||una stringa contenente un elenco separato da virgole dei valori positivi con "e" che separa gli ultimi due|| |- |mean(X,...)||restituisce la media di un elenco of values|| |- |numAnsOptions(X)||restituisce il numero di opzioni di risposta che la domanda X ha|| |- |olist(X,...)|| una stringa contenente un elenco separato da virgole dei valori positivi, con "o" che separa gli ultimi due|| |- |parseDate(X,PAT)||restituisce il valore della data della stringa X analizzata con data Java format pattern PAT|| |- |parseNumber(X,PAT)||restituisce il valore numerico della stringa X analizzata con Java number format pattern PAT|| |- |showAllResponsesExcept( questionList ,attributeList,attributeTitleList)||questionList = elenco delimitato da barre verticali di identificatori di domande; attributeList = elenco di attributi delimitato da barre verticali (come domanda#, titolo, testo, tipo - così puoi decidere cosa mostrare); attributeTitleList = elenco delimitato da barra verticale delle intestazioni della tabella, in modo da poter internazionalizzare il rapporto.|| |- |showTheseResponses( questionList,attributeList,attributeTitleList)||questionList = elenco delimitato da barra verticale degli identificatori di domanda; attributeList = elenco di attributi delimitato da barre verticali (come domanda#, titolo, testo, tipo - così puoi decidere cosa mostrare); attributeTitleList = elenco di intestazioni di tabella delimitato da barra verticale, quindi può internazionalizzare il report.|| |} <span id="Expression_Manager_Knows_Which_Variables_are_Local"></span> ==Expression Manager sa quali variabili sono locali== Per creare correttamente il JavaScript per la pagina, Expression Manager deve sapere quali variabili sono impostate sulla pagina e qual è il loro ID JavaScript (ad esempio per document.getElementById(x)). Deve anche sapere quali variabili sono impostate su altre pagine (in modo da poter garantire che i file necessari<input type='hidden' value='x'> i campi sono presenti e popolati). <span id="Cascading_Conditions"></span> ==Condizioni a cascata== Se una qualsiasi delle variabili è irrilevante, l'intera equazione sarà irrilevante (falso). Ad esempio, nella tabella seguente, N/A significa che una delle variabili non era rilevante {| class="wikitable" !Operatore!!Esempio!!a!!b!!Risultato |- |<nowiki> + (unario)</nowiki> ||<nowiki> +a</nowiki> ||N/D|| ||falso |- |- (unario)||-a||N/A|| ||falso |- |!||!a||N/A|| ||false |- |== (o eq)||a == b||N/A||5||false |- |== (o eq) ||a == b||N/A||0||false |- |== (o eq)||a == b||N/A||N/A|| false |- |!= (o ne)||a != b||N/A||5|| false |- |!= (o ne)||a != b||N/A||N/A|| false |- |!= (o ne)||a != b||N/A||0||false |- |> (o gt)||a > b||N/A||5|| false |- |>= (o ge)||a >= b||N/A||5||false |- |< (o lt)||a < b||N/A||5||false |- |<= (o le)||a <= b||N/A||5||false |- |e||a e b||N/A||5||falso |- |e||a e b||N/A||N/A||falso! N!|- |o||a o b||N/A||N/A||falso |- |o||a o b||N/A||5 ||falso |- |<nowiki> +</nowiki> ||a + b||N/A||5||falso |- |-||a - b||N/A||5||falso |- |*||a * b||N/A||5||falso |- |/||a / b||5||N/A||falso |-! N!|()||(a)||N/A|| ||false |- |(exp)||(a && b)||N/A||5||false |- |(exp) op (exp)| |(b + b) > (a && b)||N/A||5||false |- |funzione||sum(a,b,b)||N/A|| 5||falso |- |funzione||max(a,b)||N/A||5||falso |- |funzione||min(a,b )||N/A||5||false |- |funzione||implode(', ',a,b,a,b)||N/A||5||false! N!|- |funzione||if(a,a,b)||N/A||5||false |- |funzione||è_vuoto(a)||N/ A|| ||false |- |funzione||è_vuoto(a)||0 (o vuoto)|| ||vero |- |funzione||!è_vuoto(a)||N/A|| ||falso |} <span id="Overriding_Cascading_Conditions"></span> ===Sovrascrivere le condizioni a cascata=== Supponi di voler mostrare un totale parziale di tutte le risposte pertinenti. Potresti provare a usare l'equazione {sum(q1,q2,q3,...,qN)}. Tuttavia, questo viene tradotto internamente in LEMif(LEManyNA('q1','q2','q3',...,'qN'),'',sum(LEMval('q1'),LEMval('q2') ,LEMval('q3'),...,LEMval('qN'))). Quindi, se uno qualsiasi dei valori q1-qN è irrilevante, l'equazione restituirà sempre false. In questo caso, sum() mostrerà 0 fino a quando non verrà data risposta a tutte le domande. Per aggirare questo problema, a ogni variabile può essere aggiunto un suffisso ".NAOK" (che significa che non applicabile è OK). In tali casi, si verifica il seguente comportamento. Supponi di avere una variabile q1.NAOK #q1 non aggiunta alla clausola LEManyNA() #LEMval('q1') continuerà a verificare se la risposta è rilevante e restituirà<nowiki> ''</nowiki> in caso contrario (quindi le singole risposte irrilevanti verranno ignorate, ma non annulleranno l'intera espressione). Quindi, la soluzione al problema del totale parziale è usare l'equazione sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK). L'uso del suffisso .NAOK consente inoltre agli autori di progettare sondaggi che hanno diversi percorsi possibili ma poi convergono su percorsi comuni in un secondo momento. Ad esempio, diciamo che i soggetti rispondono a un sondaggio in un modo che è al di fuori del normale intervallo di risposte. L'autore potrebbe avvisare i soggetti che potrebbero non ottenere risultati validi e chiedere loro se vogliono davvero continuare con il sondaggio. Se rispondono Sì, verranno mostrate le altre domande. La condizione per il "resto delle domande" verificherebbe se le risposte iniziali hanno ricevuto una risposta entro l'intervallo normale OPPURE se il soggetto ha detto Sì alla domanda che è rilevante solo se ha risposto al di fuori dell'intervallo normale. <span id="How_does_Expression_Manager_Support_Conditional_Micro-Tailoring?"></span> ==In che modo Expression Manager supporta il microadattamento condizionale?== Ecco un esempio di micro-sartoria (dove Question Type=='expr' indica un'equazione): {| class="wikitable" !Codice domanda!!Rilevanza!!Tipo di domanda!!Domanda |- |nome||1||testo||Come ti chiami? |-! N!|età||1||testo||Quanti anni hai? |- |badage||!is_empty(età)||expr||{(età<16) o (età>80 )} |- |agestop||badage||messaggio||Spiacente, {nome}, anche tu sei {if( (età<16),'giovane',if( (età>80), 'vecchio','di mezza età') ) } per questo test. |- |bambini||!badage||sìno||Hai figli? |- |genitori ||1||expr||{!badage && kids=='Y'} |- |numKids||parents||text||Quanti figli hai? |-! N!|kid1||parents && numKids >= 1||text||Quanti anni ha il tuo primo figlio? |- |kid2||parents && numKids >= 2||text||Quanti anni ha il tuo secondo figlio? |- |kid3||parents && numKids >= 3||text||Quanti anni ha il tuo terzo figlio? |- |kid4||parents && numKids > = 4||testo||Quanti anni ha il tuo quarto figlio? |- |kid5||genitori && numRagazzi >= 5||testo||Quanti anni ha il tuo quinto figlio? |-! N!|sumage||1||expr||{sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)} |- |report||genitori| |yesno||{name}, hai detto che sei {age} e che hai {numKids}. La somma delle età dei tuoi primi {min(numKids,5)} figli è {sumage} |} Tutte queste domande possono trovarsi su un'unica pagina (ad es. nello stesso gruppo) e verranno visualizzate solo le domande pertinenti. Inoltre, quando inserisci l'età dei bambini, l'espressione sum() nell'ultima domanda si aggiornerà dinamicamente sulla pagina. <html>Expression Manager fornisce questa funzionalità circondando ogni espressione con un named<nowiki></nowiki> <span>elemento. Ogni volta che un valore cambia, ricalcola l'espressione che dovrebbe apparire in quello</span><nowiki></nowiki> <span><span>elemento e rigenera il display. Puoi avere dozzine, o addirittura centinaia, di tali espressioni personalizzate sulla stessa pagina e la pagina le visualizzerà nuovamente tutte in un singolo aggiornamento dello schermo.</span></span> <span id="Mapping_of_LimeSurvey_1.91+_to_Expression_Manager_Functionality"></span> ==Mappatura di LimeSurvey 1.91+ alla funzionalità Expression Manager== {| class="wikitable" !Vecchia funzionalità!!Nuova funzionalità!!Commenti |- |Condizioni||Rilevanza||Puoi utilizzare equazioni condizionali molto complesse e accedere a una gamma più ampia di variabili!N !|- |Valutazioni||Equazione||Qualsiasi punteggio di valutazione può essere riorganizzato in un'equazione. Questo assicura che il punteggio sia scritto nel database e ti consente anche di vedere le modifiche dinamiche al valore del punteggio nella pagina corrente |- |Sostituzioni||Expression Manager||Il motore principale accetta la stringa di input e tratta tutto ciò che è racchiuso tra parentesi graffe come un'espressione, quindi gestisce tutti i tipi di sostituzioni storiche. Per evitare di incasinare JavaScript incorporato, Expression Manager elabora solo il contenuto tra parentesi graffe purché (a) non ci siano spazi bianchi iniziali o finali all'interno delle parentesi graffe - ad esempio {expr} è un'espressione, ma { expr}, {expr}, e { expr } non sono espressioni. Inoltre, Expression Manager non elabora il contenuto all'interno delle proprie stringhe (ad es. {list('hi','there {braces}')} genera "hi there {braces}"). Ignora anche le parentesi graffe con escape (ad es. \{questa non è un'espressione\}) |- |Convalida||Expression Manager||Il piano è prendere gli attributi domanda min/max correnti e avere Expression Manager elaborarli. In questo modo i valori min/max possono essere essi stessi espressioni |} <span id="Syntax_Highlighting"></span> =Evidenziazione della sintassi= Per facilitare l'immissione e la convalida delle espressioni, EM fornisce l'evidenziazione della sintassi con le seguenti funzionalità: <span id="Types_and_Meanings_of_Syntax_Highlighting"></span> ==Tipi e significati dell'evidenziazione della sintassi== {| class="wikitable" !Colore!!Esempio!!Significato!!Descrizione comandi!!Commenti |- |tan background||style='background-color: #eee8aa'|Esempio||il equazione intera||nessuno||Qualsiasi elemento all'interno delle parentesi graffe riconosciuto come equazione (ad es. non ci sono spazi bianchi all'inizio o alla fine) sarà codificato a colori con uno sfondo marrone chiaro per distinguerlo dal testo circostante |-!N !|testo in grassetto rosso||style='color:#ff0000; background-color:#eee8aa'|'''Campione'''||Un errore||Qualche spiegazione sull'errore||Può essere una variabile sconosciuta o un errore nella funzione, .... Il sondaggio può essere completamente interrotto, questo don 'non mostrare all'utente pubblico. |- |blue text||style='color:#0000ff; background-color:#eee8aa'|Esempio||nome funzione||significato e sintassi consentita||i nomi delle funzioni, o cose che dovrebbero essere funzioni poiché sono seguite da una parentesi di apertura, sono presentati in grassetto blu. I tooltip mostrano il significato e la sintassi consentita per la funzione. |- |grey text||style='color:#808080; background-color:#eee8aa'|Sample||string||none||le stringhe tra virgolette singole e doppie sono mostrate in testo grigio |- |testo ciano||style='color:#4169e1; background-color:#eee8aa'|Campione||variabile impostata sulla stessa pagina,||<nowiki> [</nowiki> nome o codice SGQA]: domanda; valore; answerList che mostra i codici per ogni valore||Qualsiasi variabile impostata sulla stessa pagina della domanda corrente viene mostrata in testo ciano, a indicare che può essere aggiornata in javascript. Il tooltip mostra il suo nome (se hai utilizzato INSERTANS:xxx) o il codice SGQA (se hai utilizzato il nuovo sistema di denominazione), la domanda effettiva e il suo valore corrente (o vuoto se non impostato). Se il tipo di domanda prevede risposte da un insieme di valori enumerati, la mappatura dei codici per visualizzare i valori è show. |- |green text||style='color:#008000; background-color:#eee8aa'|Esempio||variabile impostata su una pagina precedente||<nowiki> [</nowiki> nome o codice SGQA]: domanda; valore; answerList che mostra i codici per ogni valore||Qualsiasi variabile impostata su una pagina precedente è mostrata in grassetto verde. Il tooltip mostra il suo nome (se hai utilizzato INSERTANS:xxx) o il codice SGQA (se hai utilizzato il nuovo sistema di denominazione), la domanda effettiva e il suo valore corrente (o vuoto se non impostato). Se il tipo di domanda prevede risposte da un set di valori enumerati, la mappatura dei codici per visualizzare i valori è show. |- |bold pink text||style='color:#9370db; background-color:#eee8aa'|Sample||variabile impostata in una pagina successiva <sup>in generale : vuota all'inizio del sondaggio, ma può essere riempita con indice o sposta precedente</sup> ||<nowiki> [</nowiki> nome o codice SGQA]: domanda; valore; answerList che mostra i codici per ogni valore||Qualsiasi variabile impostata su una pagina successiva viene mostrata in grassetto rosa. Il tooltip mostra il suo nome (se hai utilizzato INSERTANS:xxx) o il codice SGQA (se hai utilizzato il nuovo sistema di denominazione), la domanda effettiva e il suo valore corrente (o vuoto se non impostato). Se il tipo di domanda prevede risposte da un set di valori enumerati, la mappatura dei codici per visualizzare i valori è show. |- |bold tan text||style='color:#a0522d; background-color:#eee8aa'|Campione||un valore di sostituzione del lime||il valore||Le stringhe di sostituzione del lime (come {TOKEN:xxx}, {PRIVACY_MESSAGE}) sono mostrate in grassetto marrone chiaro. |- |testo rosso||style='color:#ff4500; background-color:#eee8aa'|Esempio||operatore di assegnazione (=) ||messaggio di avviso||Se usi uno degli operatori di assegnazione (=) quell'operatore verrà visualizzato in rosso. Questo ha lo scopo di aiutare a prevenire la riassegnazione accidentale di valori quando volevi davvero verificare se a == b invece di impostare il valore di a = b. |- |testo nero normale||style=' colore nero; background-color:#eee8aa'|Esempio||punteggiatura||none||Tutti gli altri segni di punteggiatura all'interno dell'espressione vengono mostrati come normale testo nero. |- |testo con riquadro rosso||una linea rossa in grassetto circonda l'errore||errore di sintassi||descrizione dell'errore||Eventuali errori di sintassi rilevati vengono mostrati circondando l'errore con una casella rossa. Il tooltip mostra l'errore. Gli esempi includono parentesi non corrispondenti, uso di funzioni non definite, passaggio di un numero errato di argomenti alle funzioni, espressioni mal strutturate (ad es. operatori mancanti tra variabili), tentativi di assegnare un nuovo valore a una variabile di sola lettura, tentativi di assegnare valori a variabili non variabili o utilizzando una sintassi non supportata. Si noti che il sistema di rilevamento degli errori di sintassi può segnalare solo un errore in un'espressione anche se sono presenti più errori; tuttavia, se vengono rilevati errori, verrà mostrato almeno un errore. |} <span id="Additional_Reading"></span> =Lettura aggiuntiva= <span id="Expression_Manager_sample_surveys"></span> ==[[Sondaggi campione di Expression Manager|Sondaggi campione di Expression Manager]]== <span id="Use_Cases_and_HowTos"></span> ==[[ExpressionScript How-tos|Casi d'uso e How-To]]== <span id="Step-by-Step_examples"></span> ==[[Esempi ExpressionScript|Esempi passo-passo]]== ==[[StatFunctions|Expression Manager statistic functions]]== <span id="Reference_for_Developers"></span> ==[[Expression Manager per sviluppatori|Riferimento per sviluppatori]]== <span id="RoadMap/Status/ToDo_List"></span> ==[[Roadmap di Expression Manager|RoadMap/Stato/Elenco cose da fare]]==