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:ExpressionScript — prezentacja}}<languages /> __TOC__ <span id="Introduction"></span> =Wprowadzenie= <div class="mw-translate-fuzzy"> LimeSurvey korzysta z nowego modułu ExpressionScript (EM), który umożliwia LimeSurvey obsługę bardziej złożonych rozgałęzień, ocen, walidacji i dostosowywania. Zastępuje sposób, w jaki LimeSurvey zarządza Zastąpieniami, [[Ustawianie warunków | Warunki]] i [[Oceny]] na zapleczu. Przyspiesza także znacznie przetwarzanie, ponieważ eliminuje większość odczytów baz danych w czasie wykonywania. EM został opracowany przez dr Thomasa White'a (TMSWhite). </div> <span id="Key_definitions"></span> ==Kluczowe definicje== #'''Wyrażenie''': Wszystko otoczone nawiasami klamrowymi: #*Pod warunkiem, że bezpośrednio po nawiasie otwierającym lub przed zamykającym nawiasem klamrowym nie ma spacji. #*Zawartość wyrażenia jest oceniana firmy EM, więc może zawierać formuły matematyczne, funkcje oraz złożone przetwarzanie ciągów i dat. #'''Krawiectwo''': Czasami nazywane „rurociągami”. Jest to proces warunkowej modyfikacji tekstu: #*Masz dostęp do wszystkich „pól zastępczych”, danych uczestników i danych odpowiedzi. #*Masz także łatwiejszy dostęp do pytań, odpowiedzi i ich właściwości. #'''Relacja trafności'': Nowy atrybut pytania kontrolujący widoczność pytania: #*Jeśli istnieje równanie trafności, pytanie jest wyświetlane tylko wtedy, gdy trafność ma wartość true. # *Wewnętrznie wszystkie polecenia [[QS:Array_filter|array_filter]] i [[QS:Array_filter_exclude|array_filter_exclude]] stają się istotne na poziomie pytania podrzędnego. #'''SGQA''' (jak nazywano zmienne w przeszłości) : #*Skrót od Survey-Group-Question-Answer #*Nazwy zmiennych SGQA wyglądają jak 123X5X382X971 i mogą zawierać sufiksy pytań podrzędnych. #*Te nazwy zmiennych są specyficzne dla bazowego S/Q/ Kody bazy danych G/A, dlatego często trzeba je zmieniać #'''Równanie''' Typ pytania: [[Typ pytania - Równanie|Nowy typ pytania]], który zapisuje obliczenia lub raporty do bazy danych:! N!#*To przypomina pytanie standardowe, ale jego zawartość jest zapisywana w bazie danych, nawet jeśli ustawisz opcję „Zawsze ukrywaj to pytanie”. #'''Kod pytania''': To jest preferowana nazwa zmiennej dla EM: #*Może to być nazwa opisowa wskazująca cel pytania, ułatwiająca odczytanie złożonej logiki. #*Prawidłowe kody pytań NIE powinny zaczynać się od cyfry, zatem w przypadku używania kodu pytania do ponumeruj swoje pytania, po prostu użyj „q1”, „q1a” lub „g1q2”. #*To właśnie stanie się nazwą zmiennej, jeśli eksportujesz dane do SPSS lub R. Jeśli więc przeprowadzasz analizę statystyczną, potrzebujesz do tworzenia wyłącznie unikalnych kodów pytań. <span id="Do_I_have_to_use_Expression_Script?"></span> <div class="mw-translate-fuzzy"> ==Czy muszę używać EM?== </div> Krótka odpowiedź brzmi „nie”. Zależy to jednak w dużej mierze od złożoności ankiety, którą chcesz utworzyć. <div class="mw-translate-fuzzy"> Na przykład [[Ustawianie warunków|Edytor warunków]] obejmuje kilka podstawowych wyrażeń, które można zastosować do pytań w ankiecie. Edytor warunków jest jednak ograniczony. Dlatego zastosowano EM - poszerza on obszar [[Expression_Manager_to_be_updated#Quick_start_tutorial|możliwości personalizacji]]. </div> <span id="Can_I_mix_Conditions_and_Relevance_equations?"></span> ==Czy mogę łączyć równania warunków i istotności?== Tak. W przypadku niektórych pytań możesz użyć [[Ustawianie warunków|Edytor warunków]], a w przypadku innych [[QS:Istotność|Równania istotności]]. '''W tym samym pytaniu nie można ustawić jednocześnie warunków i wyrażeń!''' Po ustawieniu warunku zastępuje on dowolne wyrażenie zapisane w polu równania istotności. Co więcej, pola [[QS:Relevance|Równanie istotności]] nie można już edytować ręcznie. Istnieje jednak sposób użycia w pytaniu zarówno wyrażeń, jak i warunków. Jak wspomniano powyżej, warunek zastępuje pole równania istotności. Po zakończeniu sprawdź, jakie jest nowo utworzone równanie i skopiuj je do edytora tekstu. Usuń nowo utworzony warunek z [[Ustawienia warunków|Edytor warunków]], a następnie zmodyfikuj pytanie, dodając wyrażenia oparte na warunkach z pliku edytora tekstu obok pozostałych wyrażeń, których chcesz użyć. <span id="How_should_I_choose_between_Conditions_and_Relevance?"></span> ==Jak wybrać pomiędzy Warunkami a Trafnością?== Oto lista zalet i wad każdego stylu: {| class="wikitable" !Styl!!Zalety!!Wady |- |Warunki||1. Niezłe [[Ustawianie warunków|GUI]] do tworzenia prostych warunków.<br/> 2. GUI dobrze udokumentowane i zrozumiałe przez zespół wsparcia||1. Obsługuje tylko proste porównania i nie obsługuje dobrze warunków „AND” i „OR”.<br/> 2. Warunki kaskadowe działają nieprawidłowo<br/> 3. Powolny - intensywnie korzystający z bazy danych - może spowolnić długie ankiety.<br/> 4. Niektórzy zgłaszali problemy z warunkami przeładowania.<br/> 5. GUI nie skaluje się dobrze, gdy są dziesiątki, setki lub tysiące pytań.<br/> 6. Konwersja ankiet w formie papierowej może być powolna, ponieważ muszą one używać nazw [[SGQA Identyfikator|SGQA]].<br/> 7. Często potrzebny jest programista do tworzenia niestandardowego kodu logicznego potrzebnego do skomplikowanych rozgałęzień. |- |Trafność||1. Obsługuje bardzo złożoną logikę, w tym ponad 80 funkcji i operatorów matematycznych/łańcuchowych.<br/> 2. Doskonałe wsparcie dla [[ExpressionScript_-_Presentation#Cascading_Conditions|logiki kaskadowej]].<br/> 3. Szybko – bez dodatkowych połączeń z bazą danych, obsługując ankiety zawierające ponad 1000 pytań.<br/> 4. Nie ma problemów z przeładowaniem logiki, ponieważ nie wymaga ona kodów [[SGQA Identyfikator|SGQA]].<br/> 5. Skale podświetlania składni do ankiet zawierających ponad 1000 pytań.<br/> 6. Łatwy i szybki w użyciu dla grup chcących skomputeryzować istniejące ankiety w formie papierowej.<br/> 7. Z łatwością obsługuje częściowo ustrukturyzowane wywiady i badania epidemiologiczne bez konieczności korzystania z programisty.||1. Brak GUI dla prostych warunków — zamiast tego wykorzystuje [[Expression_Manager_to_be_updated#Syntax_Highlighting|podświetlanie składni]]. |} {{Uwaga| '''Uwaga:''' *Zalecamy użycie tego, co lepiej odpowiada Twoim potrzebom. *Aby uzyskać bardziej szczegółowe wyjaśnienie funkcji EM, kliknij następujący [[EM i jego funkcje|link] ]}} <span id="Getting_Started"></span> =Pierwsze kroki= Najlepszym sposobem na rozpoczęcie pracy z EM jest: *Zainstalowanie najnowszej stabilnej wersji z https://www.limesurvey.org/en/download. *Zaimportuj i przejrzyj niektóre [[przykładowe ankiety ExpressionScript|przykładowe ankiety]]. *Przejrzyj [[Poradniki ExpressionScript|przypadki użycia i instrukcje]] oraz [[Przykłady ExpressionScript|krok- przykłady krok po kroku]]. *Przejrzyj dokumentację EM (ta strona) **Testy jednostkowe izolowanych wyrażeń (zaawansowane) ***pokazuje przykłady użycia wszystkich funkcji i operatorów EM oraz Wyniki PHP i JavaScript; ***zauważ, że istnieje kilka funkcji, które generują różne wyniki w wersjach PHP i JavaScript, więc ta strona pozwala odpowiednio zaplanować logikę EM. <span id="Terminology"></span> =Terminologia= Te słowa są powszechnie używane do opisu możliwości EM: *'''Rozgałęzianie oparte na trafności''' - jeśli pytanie jest istotne, zadaj je, w przeciwnym razie nie (np. uczyń je niewidocznym i zaznacz ma wartość NULL w bazie danych). Pole [[QS:Istotność|Pola istotności]] możesz znaleźć w panelu edytora pytań, a także w panelu edytora grupy pytań. To drugie służy do zastosowania zestawu warunków do całej grupy bez konieczności kopiowania tego samego warunku do każdego pytania i/lub łączenia logiki warunkowej na poziomie grupy i pytania). *'''Krawiectwo''' - Kiedy już wiesz, jakie pytania należy zadać, krawiectwo (czasami nazywane „lamowaniem”) określa, w jaki sposób należy zadać pytanie. Dzięki temu możesz obsługiwać nie tylko proste zastępowanie (takie jak {TOKEN:FIRSTNAME}), ale także koniugację czasowników i deklinację rzeczowników w oparciu o płeć lub liczbę tematów. Umożliwia także zmianę wiadomości dostarczanej respondentowi ankiety w oparciu o to, czy odpowiedział (lub jak odpowiedział) na inne pytania. *'''Równania'' - EM dodaje nowy typ pytania o nazwie [[Typ pytania - Równanie|Równanie]], które przechowuje wynik wyrażenia. Wyniki równania są obliczane i zapisywane w bazie danych, nawet jeśli ukryjesz je na stronie. Służą zatem do ukrytych obliczeń scoringowych, nawigacji w oparciu o złożone równania, ocen i raportów, które będą generowane i przechowywane w bazie danych. <span id="Relevance_and_Cascading_Relevance"></span> ==Trafność i trafność kaskadowa== Każdy typ pytania ma teraz opcję [[QS:Istotność|Trafność]], która kontroluje, czy pytanie jest wyświetlane, czy nie. EM przetwarza każde równanie istotności w kolejności, w jakiej pojawiają się w ankiecie. Jeśli wyrażenie jest prawdziwe (lub brakuje go w celu obsługi starszych ankiet), pytanie zostanie wyświetlone. Jeśli nie jest to istotne, pytanie zostanie ukryte, a wartość w bazie danych będzie wynosić NULL. Jeżeli w danej grupie nie ma odpowiednich pytań, cała grupa zostanie pominięta. Co więcej, jeśli którakolwiek ze zmiennych w wyrażeniu jest nieistotna, wówczas wyrażenie zawsze ma wartość fałszywą. Umożliwia to „kaskadowe dopasowanie”, dzięki czemu nie trzeba pisać bardzo długich równań trafności dla każdego pytania. Załóżmy, że masz pięć pytań Q1-Q5 i chcesz wyświetlić tylko pytanie Q2, jeśli udzielono odpowiedzi na pytanie 1, i pytanie 3, jeśli udzielono odpowiedzi na pytanie 2 itd. Równania istotności mogą wyglądać następująco: {| class="wikitable" !Kod pytania!!Trafność!!Pytanie |- |Q1||1||Jak się nazywasz? |- |Q2||Q1 ||{Q1}, ile masz lat? |- |Q3||Q2||Więc masz {Q2} lat. Czy jesteś żonaty? |- |Q4||Q3 == "T"||{Q1}, jak długo jesteś żonaty? |- |Q5||Q4|| Ile masz dzieci, {Q1}? |} <span id="Group-level_Relevance"></span> ==Trafność na poziomie grupy== ExpressionScript obsługuje także trafność na poziomie grupy. Ułatwia to implementację pętli. Załóżmy, że chcesz zebrać informacje od maksymalnie 10 podmiotów (takich jak produkty lub osoby w gospodarstwie domowym), gdzie najpierw określasz, ile podmiotów wymaga dalszych działań (na przykład poprzez zapytanie, ile osób mieszka w gospodarstwie domowym lub sprawdzenie, które z nich ulubione produkty z długiej listy). Wiedząc, ile podmiotów wymaga dalszych działań, możesz zastosować trafność na poziomie grupy, np. {count >= 1}, {count >=2}, ... {count >= 10} dla każdej z 10 grup obserwacji zadać pytania. W każdej grupie można zastosować logikę warunkową na poziomie pytania (np. pytania uzupełniające dotyczące płci lub wieku dla każdego przedmiotu). Równania dotyczące pytania i istotności na poziomie grupy są poddawane operacji AND w celu ustalenia, które z nich powinny zostać pokazane. Aby sprawdzić taki przykład, zaimportuj następującą ankietę: [[Media:EM Survey - Cohabs.zip|Przykład ankiety Census]]. Na poniższym zrzucie ekranu można zauważyć, że grupa „Osoba 1” jest wyświetlana (lub istotna), jeśli respondent mieszka co najmniej z innym konkubentem: <center>[[File:Group-level relevance example screen.png]]</center> <span id="Tailoring/Piping"></span> ==Krawiectwo/Wyszywanie== Wszystko w nawiasach klamrowych jest teraz traktowane jako wyrażenie (z jednym wyjątkiem opisanym poniżej). Wyrażenia mają dostęp do wszystkich pól i zmiennych LimeReplacementField (poprzez kilka aliasów), wszystkich typowych operatorów równań (matematycznych, logicznych i porównawczych) oraz do dziesiątek funkcji (które działają nawet dynamicznie po stronie klienta). Korzystając z tych równań, możesz: #Warunkowo wyświetlać respondentom dostosowane wiadomości na podstawie wcześniejszych odpowiedzi; #Tworzyć oceny i wyświetlać wyniki ocen (lub warunkowo rozgałęziać lub wyświetlać wiadomości) na podstawie tych wyników , wszystko bez użycia samego [[Oceny|modułu ocen]]; #Odmieniaj czasowniki i odmieniaj rzeczowniki w pytaniach, odpowiedziach i raportach; #Pokazuj podsumowania odpowiedzi przed stroną „Pokaż swoje odpowiedzi” na stronie koniec ankiety. <span id="Equations"></span> ==Równania== Dostępny jest nowy typ pytania o nazwie [[Typ pytania - Równanie|Równanie]]. Pomyśl o tym jako o [[Typ pytania - Wyświetlanie tekstu|Typ pytania z wyświetlaniem tekstu]], z tą różnicą, że przechowuje wartość tego, co jest wyświetlane w bazie danych. Zatem jeśli tekst pytania dotyczącego równania zawiera obliczenie oceny, wartość ta będzie przechowywana w bazie danych w postaci zmiennej, która może być wyświetlana w statystykach publicznych lub prywatnych. <span id="Syntax"></span> =Składnia= Wszystko zawarte w nawiasach klamrowych jest teraz uważane za wyrażenie (z jednym wyjątkiem: „nie może być żadnych początkowych ani końcowych białych znaków” – jest to potrzebne, aby mieć pewność, że ExpressionScript nie będzie próbował przetwarzać osadzonego kodu JavaScript). Należy pamiętać, że wyrażenia mogą obejmować wiele linii, pod warunkiem że po otwierającym nawiasie klamrowym lub przed zamykającym nawiasem klamrowym nie ma białych znaków. Jest to szczególnie przydatne w przypadku zagnieżdżonych instrukcji „if()”, takich jak ta: <syntaxhighlight lang="java">{if(is_empty(PFTotals), '', if(PFTotals >= -5 && PFTotals <= -4, 'Bardzo miękkie', if(PFTotals >= -3 && PFTotals <= -2, 'Miękkie', if(PFTotals == -1, 'Nieco miękkie', if(PFTotals == 0, 'Umiarkowane',! N! if(PFTotals == 1, 'Dość trudne', if(PFTotals >= 2 && PFTotals <= 3, 'Trudne', if(PFTotals >= 4 && PFTotals <= 5, „Bardzo trudne”, '' ) ) ) ) ) ) ) )} </syntaxhighlight> ExpressionScript obsługuje następującą składnię: *Wszystkie standardowe operatory matematyczne (np. +,-,*,/,!); *Wszystkie standardowe operatory porównania (np. <,<=,==,!=,> ,>=, plus ich odpowiedniki: lt, le, eq, ne, gt, ge); *Nawiasy (dzięki czemu można grupować podwyrażenia); *Operatory warunkowe (np. &&,| | i ich odpowiedniki: i, lub); *Ciągi z pojedynczym i podwójnym cudzysłowem (z których każdy może osadzić ciągi znaków z innym typem cudzysłowu); *Operator przecinka (więc może mieć listę wyrażeń i po prostu zwrócić wynik końcowy ); *Operator przypisania (=); *Predefiniowane zmienne (odnoszące się do pytań, atrybutów pytań i odpowiedzi) - np. [[identyfikator SGQA|kody SGQA]]; * Predefiniowane funkcje (jest ich już ponad 80 i łatwo jest dodać kolejne). <span id="Operators"></span> ==Operatorzy== Składnia EM jest zgodna z normalnym pierwszeństwem operatora: {| class="wikitable" !Poziom!!Operator(y)!!Opis |- |1||()||nawiasy do grupowania lub wywoływania funkcji |- | 2||! - +||operatory jednoargumentowe: nie, negacja, jednoargumentowy plus |- |3||* /||razy, dzielenie |- |4||+ -||plus , minus |- |5||< <= > >= lt le gt ge||porównania względne |- |6||== != równanie ne||porównania równości |- |7||i||logiczne AND |- |8||lub||logiczne OR |- |9||=||przypisanie operator |- |10||,||operator przecinka |} {{Uwaga| Aby zapewnić spójność między JavaScriptem i PHP, operator plus (+) wykonuje dodawanie, jeśli oba operandy są numeryczne, ale dokonuje łączenia, jeśli obie części są ciągami nienumerycznymi. Zalecamy jednak użycie funkcji „join()” do łączenia, ponieważ dzięki temu intencja będzie bardziej jasna. Pozwala także uniknąć nieoczekiwanych wyników, jeśli spodziewałeś się ciągów, ale zamiast tego otrzymałeś liczby (lub odwrotnie).}} <span id="Warning_with_mismatch_number_and_string_and_alphabetical/numerical_comparison"></span> ==== Ostrzeżenie dotyczące niezgodności numeru i ciągu znaków oraz porównania alfabetycznego/numerycznego ==== Jeśli chcesz porównać wartość za pomocą porównań względnych lub równościowych, zwróć uwagę na niedopasowania. Wartość wprowadzona przez użytkownika (lub podana poprzez kod odpowiedzi) może zostać użyta jako liczba, „jeśli jest to wyraźnie liczba”. Jeśli otoczysz jedną z wartości znakiem <code>"</code> , nastąpi porównanie tekstu/ciągu znaków miejsce. Jeśli chcesz porównać jako liczbę, nigdy nie otaczaj liczby znakiem <code>"</code> . Na przykład <code>Q0.NAOK > "50"</code> jest prawdą, jeśli Q0.NAOK jest pytaniem numerycznym z wartością 9. Dzieje się tak, ponieważ operator <code>></code> przyjmie, że jest to porównanie <i>alfabetyczne</i> , a nie <i>numeryczne</i> . Aby mieć pewność, że porównujesz wartości całkowite, możesz użyć <code>[[Expression_Manager#Implemented_Functions|intval]](Q0.NAOK) > 50</code> . Pamiętaj tylko, jeśli Q0.NAOK nie jest liczbą (pustą lub ciągiem znaków), to intval(Q0.NAOK) === 0. Aby porównać wartości ciągów („A” < „B”) użyj [[Expression_Manager#Implemented_Functions|strcmp ]] bezpośrednio : <code>strcmp(Q0.NAOK,"B")</code> lub <code>strcmp(Q0.NAOK,"A5")</code> . <span id="Caution_about_using_Assignment_Operator_(=)"></span> ==Uwaga dotycząca używania operatora przypisania (=)== Powinieneś unikać używania operatorów przypisania, chyba że jest to absolutnie konieczne, ponieważ mogą one powodować nieoczekiwane skutki uboczne. Na przykład, jeśli zmienisz wartość poprzedniej odpowiedzi, kaskadowa trafność i logika walidacji między tym pytaniem a bieżącym pytaniem nie zostaną ponownie obliczone, więc możesz otrzymać wewnętrznie niespójne dane (np. pytania, na które nie udzielono odpowiedzi, ale należy mają wartość NULL lub pytania, które zostały pominięte, ale należało odpowiedzieć). Ogólnie rzecz biorąc, jeśli chcesz przypisać wartość zmiennej, powinieneś utworzyć pytanie typu Równanie i użyć wyrażenia, aby ustawić jego wartość. Jednak w rzadkich przypadkach ludzie naprawdę potrzebują tego operatora, dlatego udostępniliśmy go. Aby ostrzec Cię przed tym operatorem, w równaniach składniowych jest on pokazany czerwoną czcionką (aby nie pomylić go z „==”). <center>[[FIle:Example assignment operator.png]]</center> <span id="Using_assignment_operator"></span> ===Używanie operatora przypisania=== Główne powody, dla których możesz chcieć użyć operatora przypisania to: *Musisz ustawić wartość domyślną za pomocą równania dla pytania, które nie akceptuje wartości domyślnych (takich jak radio list, gdzie interfejs użytkownika pozwala wybrać jedną z opcje odpowiedzi, ale nie pozwala na wprowadzenie równania). Jednak bądź ostrożny, ponieważ LimeSurvey nie będzie w stanie sprawdzić, czy Twoje równanie generuje jedną z dopuszczalnych odpowiedzi na to pytanie; *Musisz na siłę zmienić odpowiedź na poprzednie pytanie w oparciu o późniejszą odpowiedź; * itd... {{Alert|title=Uwaga|text= Przypisanie odbywa się wyłącznie w języku PHP. Oznacza to, że wartość nie jest aktualizowana na tej samej stronie, ale tylko wtedy, gdy użytkownik przejdzie na następną stronę. Dlatego proszę zwrócić uwagę, kiedy operator przypisania jest używany na tej samej stronie z innymi wyrażeniami.}} Można w tym celu wykorzystać cały system zarządzania wyrażeniami. Lepiej jest użyć w tym celu [[Question_type_-_Equation|Equation]]. Kilka przykładów: * Ustaw odpowiedź na pytanie z krótkim tekstem małymi literami: <code>{QCODE=strtolower(QCODE.NAOK)}</code> ; * Ustaw domyślną odpowiedź na pytanie typu tablicowego na początku ankiety: <code>{Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}</code> ; * Ustaw domyślną odpowiedź na pytanie typu tablica tekstowa na początku ankiety: <code>{Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}</code> ; * Ustaw odpowiedź z warunkiem: <code>{QCODE=if(YesNo="Y","A1","")}</code> . <span id="XSS_security"></span> = Bezpieczeństwo XSS = Gdy [[Global_settings#Security|włączono XSS]], nie można używać niektórych części systemu menedżera wyrażeń: * rozpoczynanie znacznika HTML w wyrażeniu, ale kończące się na innym wyrażeniu; * używanie złożonego wyrażenia w adresie URL . {{Uwaga| Pamiętaj, że XSS jest domyślnie włączony w każdej instalacji LimeSurvey.}} <html>Przykłady i obejścia: * <code>{if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")}</code> jest uszkodzona przez zabezpieczenia XSS, tutaj możesz użyć <code>{if(1," ; <strong>information</strong>","information")}</code>; * <code><a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a></code> , here you can use an equation question because using a complete question code is OK : <code><a href="/script.php?value={EQUATION.NAOK}">next</a></code> .</code> <strong>information</strong>","information")}</code> <code>{if(1," ; * <code><a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a></code> , here you can use an equation question because using a complete question code is OK : <code><a href="/script.php?value={EQUATION.NAOK}">next</a></code> .</code> <span id="Access_to_variables"></span> =Dostęp do zmiennych= ExpressionScript zapewnia dostęp tylko do odczytu do dowolnych zmiennych, których możesz potrzebować. Dla kompatybilności wstecznej zapewnia dostęp do: *[[Survey_participants|TOKEN:xxx]] - wartość TOKENA (np. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (tylko dla '''nie'' ' [[Ustawienia_uczestnika|ankieta anonimowa]]). *[[Questions_-_introduction#Information_from_previous_answers|INSERTANS:SGQA]] - wartość wyświetlana odpowiedzi (np. "Tak") - podobnie jak przy użyciu {QCODE.showown }. *Wszystkie [[Theme_editor#Keywords|{XXX} wartości używane przez szablony]]. *W tekście pytania możesz użyć {QID} zastąpionego identyfikatorem pytania i {SGQ} zastąpionego przez SGQA pytania. Ponadto ExpressionScript umożliwia odwoływanie się do zmiennych za pomocą kodu pytania (kolumna „tytuł” w tabeli pytań w bazie danych). Jest to również etykieta zmiennej używana podczas eksportowania danych do SPSS, R lub SAS. Na przykład, jeśli masz pytania dotyczące imienia, wieku i płci, możesz nazwać te zmienne „imięm”, „wiek” i „płeć” zamiast „12345X13X22”, „12345X13X23”. ' i ''12345X13X24''. Ułatwia to każdemu odczytywanie i sprawdzanie logiki równań, a także umożliwia tasowanie pytań bez konieczności śledzenia numerów grup lub pytań. <div class='simplebox'> '''Ważne:''' Bezpieczniej jest odwoływać się do zmiennych, które występują na poprzednich stronach lub w pytaniach. </div> Ponadto ExpressionScript umożliwia dostęp do wielu właściwości pytania: {| class="wikitable" !Składnia!!Znaczenie!!Przykład!!Przykład Wynik |- |Qcode||alias dla Qcode.code||{implode(',',name,gender )}||'Tom','M' |- |Qcode.code||wybrany kod odpowiedzi na pytanie, jeśli jest istotne (w przeciwnym razie puste) lub wartość tekstowa, jeśli nie jest to zakodowane pytanie||{implode(',',name.code,gender.code)}||'Tom','M' |- |Qcode.NAOK||tak samo jak Qcode - zobacz dyskusję NAOK||{gender.NAOK}||'M' |- |Qcode.value||wartość oceny dla pytania, jeśli jest istotne (w przeciwnym razie puste) lub wartość tekstowa, jeśli nie jest zakodowane pytanie||{gender.value}||'1' |- |Qcode.valueNAOK||tak samo jak Qcode.value - zobacz dyskusję o NAOK||{gender.valueNAOK}||'1 ' |- |Qcode.shown||wyświetlana wartość pytania||{implode(',',imię.pokazana,płeć.pokazana)}||'Tomek','Mężczyzna'!N !|- |Qcode.question||tekst pytania||{gender.question}||'Jaka jest Twoja płeć?' |- |Qcode.mandatory||czy pytanie jest obowiązkowe (T/N)||{gender.mandatory}||'N' |- |Qcode.qid||wewnętrzny numer pytania (nie numer kolejny)||{gender.qid} ||337 |- |Qcode.type||typ pytania||{gender.type}||'G' |- |Qcode.jsName||poprawna nazwa JavaScript na pytanie, niezależnie od tego, czy zadeklarowano je na tej stronie, czy poza nią||{gender.jsName}||'java1827X3X337' |- |Qcode.gid||numer grupy wewnętrznej (nie numer kolejny)|| {gender.gid}||3 |- |Qcode.qseq||numer kolejny pytania, zaczynający się od 0||{gender.qseq}||5 |- |Qcode.gseq||numer kolejny grupy, zaczynając od 0||{gender.gseq}||1 |- |Qcode.relevanceStatus||czy pytanie jest aktualnie istotne (0 czy 1 )||{gender.relevanceStatus}||1 |- |Qcode.relevance||równanie trafności na poziomie pytania||{gender.relevance}||'!is_empty(name)' |- |Qcode.grelevance||równanie istotności na poziomie grupy||{gender.grelevance}||'num_children >= 5' |- |Qcode.sgqa||wartość SGQA dla to pytanie||{gender.sgqa}||'1827X3X337' |} <span id="HTML_editor_issue"></span> == Problem z edytorem HTML== Jeśli używasz edytora HTML, niektóre znaki są zastępowane przez elementy HTML. * & przez & * < przez < * > przez > Jeśli używasz edytora HTML, musisz użyć : * i for & * lt for < * le for <= * gt for > * ge dla >= Zaleca się wyczyszczenie wyrażenia z kodu HTML występującego w wyrażeniu. Jeśli korzystasz z edytora HTML LimeSurvey, kliknij przycisk „Źródło” (znajdujący się w lewej górnej części edytora) i usuń wszystkie znaki niezwiązane z Twoim wyrażeniem (np.<p> ,</br> , i tak dalej). <span id="Qcode_variable_naming"></span> =Nazewnictwo zmiennych Qcode= Oto szczegóły dotyczące tworzenia Qcode (i uzyskiwania dostępu do niektórych właściwości) według typu pytania. Ogólnie rzecz biorąc, kody Q są zbudowane jako: Kod pytania. „_” . Identyfikator podpytania . „_” . Identyfikator skali W przypadku „komentarza” i „innego” odpowiednimi kodami pytań są odpowiednio: „QuestionCode_comment” i „QuestionCode_other”. {| class="wikitable" !Typ!!Opis!!Kod!!SubQs!!Opcje odpowiedzi!!Skale!!Kod odpowiedzi!!Wyświetlona odpowiedź!!Trafność |- |5||5 Przyciski opcji wyboru punktu||Q1|| ||1-5|| ||{Q1}||{Q1.pokazane}||{Q1==3} |- |B||Tablica (wybór 10 punktów) Przyciski opcji||Q2||L1-L6| |1-10|| ||{Q2_L2}||{Q2_L2.pokazane}||{Q2_L2==7} |- |A||Przyciski opcji Tablica (wybór 5 punktów)||Q3||1-5| |1-5|| ||{Q3_1}||{Q3_1.pokazane}||{Q3_1>=3} |- |1||Tablica (Elastyczne etykiety) Podwójna skala||Q4||sq1-sq5||0 :a1-a3||1:b1-b3||{Q4_sq1_0}||{Q4_sq1_1.pokazane}||{Q4_sq1_1=='b2'} |- |H||Tablica (elastyczna) - Format kolumny||Q5||1-5||s,m,t|| ||{Q5_1}||{Q5_1.pokazane}||{Q5_1=='} |- |F||Tablica (elastyczna) - format wierszy||Q6||F1-F5| |1-5|| ||{Q6_F3}||{Q6_F3.pokazane}||{Q6_F3==4} |- |E||Tablica (Zwiększ/Tak samo/Zmniejsz) Przyciski opcji||Q7||1- 7||I,S,D|| ||{Q7_4}||{Q7_4.pokazane}||{Q7_4=='D'} |- |:||Tablica (Multi Flexi) 1 do 10||Q8||ls1,do zrobienia ,ls2||min,maks.,średnia|| ||{Q8_ls1_max}||{Q8_ls2_avg.show}||{Q8_ls2_min==7} |- |;||Tablica (Multi Flexi) Tekst||Q9||hp,st,sw|| 1., 2., 3.|| ||{Q9_hp_3rd}||{Q9_hp_3rd.pokazane}||{Q9_hp_3rd=='Peter'} |- |C||Tablica (Tak/Niepewne/Nie) Przyciski opcji||Q10|| 1-5||T,N,U|| ||{Q10_1}||{Q10_1.pokazane}||{Q10_3=='Y'} |- |X||Pytanie standardowe||Q11|| || || || ||{Pokazane Q11}|| |- |D||Data||Q12|| || || ||{Q12}||{Q12.pokazane}|| |- |*||Równanie||Q13|| || || ||{Q13}||{Q13.pokazane}||{Q13>5} |- |~124~||Przesłanie pliku (rejestruje liczbę przesłanych plików)||Q14|| || || ||{Q14}|| ||{Q14>0} |- |G||Lista rozwijana płci||Q15|| ||M,F|| ||{Q15}||{Q15.pokazany}||{Q15=='M'} |- |U||Duży dowolny tekst||Q16|| || || ||{Q16}||{Q16.pokazane}||{strlen(Q16)>100} |- |I||Pytanie dotyczące języka||Q17|| || || ||{Q17}||{Q17.pokazane}||{Q17=='en'} |- |!||Lista - menu rozwijane||Q18|| ||1-5|| ||{Q18}||{Q18.pokazane}||{Q18==3} |- |L||Lista rozwijana/lista przycisków radiowych||Q19|| ||AZ|| ||{Q19}||{Q19.show}||{Q19=='X'} |- |O||Lista z rozwijanym menu komentarzy/listą przycisków radiowych + obszar tekstowy||Q20 || ||AF|| ||{Q20},{Q20comment}||{Q20.pokazane}||{Q20=='B'} |- |T||Długi tekst dowolny||Q21|| || || ||{Q21}||{Q21.pokazane}||{strstr(Q21,'witaj')>0} |- |M||Pole wyboru wielokrotnego wyboru||Q22||AF, inne| | || ||{Q22_E}, {Q22_other}||{Q22_E.pokazane}, {Q22_other.pokazane}||{Q22_E=='Y'} |- |P||Wielokrotny wybór z komentarzami Pole wyboru + Tekst||Q23||AF|| || ||{Q23_D}, {Q23_Dcomment}||{Q23_D.pokazane}||{!is_empty(Q23)} |- |K||Pytanie z wieloma liczbami||Q24||ja, mama, tata || || ||{Q24_self}||{Q24_self.show}||{Q24_self>30} |- |Q||Kilka krótkich tekstów||Q25||AF|| || ||{Q25_B}||{Q25_B.pokazane}||{substr(Q25_B,1,1)=='Q'} |- |N||Numeryczny typ pytania||Q26|| || || ||{Q26}||{Q26.pokazane}||{Q26 > 30} |- |R||Styl rankingu||Q27||1-4|| || ||{Q27_1}||{Q27_1.pokazane}||{Q27_1==3} |- |S||Krótki tekst dowolny||Q28|| || || ||{Q28}||{Q28.pokazane}||{Q28=='moje'} |- |T||Przyciski opcji Tak/Nie||Q29|| || || ||{Q29}||{Q29.pokazane}||{Q29=='T'} |} <span id="Usage_of_NAOK"></span> =Wykorzystanie NAOK= NAOK --> „Nie dotyczy” (NA) jest w porządku (OK) Użycie NAOK oznacza, że wszystkie lub niektóre zmienne są nieistotne (np. „Nie dotyczy” (NA) jest w porządku (OK)). Na przykład: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) podaj zawsze pusty ciąg znaków, jeśli filtrowane jest jedno pytanie podrzędne Q1. Aby policzyć liczbę sprawdzanych podpytań w takim pytaniu można liczyć(Q1_SQ1.NAOK,Q1_SQ2.NAOK ,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Jeśli pytanie podrzędne jest ukryte, EM zwraca pusty ciąg znaków. Bez NAOK, jeśli jedno pytanie lub jedno pytanie podrzędne jest ukryte, EM zwraca zawsze pusty ciąg znaków (tak samo, jak zwracanie fałszu). .pokazane zawsze używają systemu NAOK (pusty ciąg znaków, jeśli jest ukryty), ale jeśli potrzebujesz kodu odpowiedzi: zawsze dobrze jest dodać .NAOK po kodzie pytania (z wyjątkiem sytuacji, gdy jest to potrzebne i wiesz, co robisz). Więcej informacji można znaleźć w podsekcji [[#Overriding_Cascading_Conditions|Przesłanianie warunków kaskadowych]]. <span id="The_reserved_"this",_"self",_and_"that"_variables"></span> =Zarezerwowane zmienne „to”, „ja” i „tamto”= Dość często chcesz ocenić wszystkie części pytania, na przykład policzyć, na ile pytań podrzędnych udzielono odpowiedzi lub podsumować wyniki. Innym razem chcesz przetworzyć tylko określone wiersze lub kolumny pytania (np. uzyskać sumy wierszy lub kolumn i zapisać je w bazie danych). Te zarezerwowane zmienne sprawiają, że proces ten jest stosunkowo bezbolesny. <span id=""This"_variable"></span> =="Ta" zmienna== Zmienna „to” jest używana wyłącznie w opcjach „[[QS:Relevance|Równanie walidacji całego pytania]]” i „[[QS:Em_validation_sq|Równanie walidacji podpytania]]” (ta ostatnia nie jest możliwe z GUI). Rozwija się do nazw zmiennych każdej komórki w tych pytaniach. Jeśli więc chcesz mieć pewność, że każdy wpis jest większy niż trzy, ustaw „Równanie sprawdzania poprawności podpytania” na (to > 3). <span id=""Self"_variable"></span> =="Zmienna własna"== Zmienne „ja” i „to” mają większe możliwości i służą jako makra, które są rozwijane przed przetwarzaniem równań. Możliwości składni zmiennej „self” są następujące: *self *self.''sufiks'' *self.''podselektor'' *self.''sub- selektor''.''przyrostek'' #''sufiks'' to dowolny z normalnych przyrostków qcode (np. NAOK, wartość, pokazana) #''podselektor'' może być jedną z następujących opcji: *komentarze - tylko pytania podrzędne będące komentarzami (np. [[Typ pytania - wielokrotny wybór z komentarzami|wielokrotny wybór z komentarzem]] i [[Typ pytania - Lista z komentarzem|lista z komentarzem]]); *nocomments - tylko pytania podrzędne, które nie są komentarzami; *sq_X - gdzie X jest identyfikatorem wiersza lub kolumny. Wybierane są tylko pytania podrzędne pasujące do wzorca X. Zauważ, że wyszukiwanie odbywa się na podstawie pełnego identyfikatora kodu, następnie sq_X dopasowuje i uwzględnia podpytania nX, X, Xn (np. jeśli używasz sq_1, uwzględniono podpytania a1, 1a, 1, 11 lub 001). Zwróć uwagę na typ pytania o podwójnej skali, gdzie kody pytań podrzędnych to QCODE_SQCODE_1 i QCODE_SQCODE_1 oraz na typ pytania rankingowego, gdzie kody pytań podrzędnych to QCODE_1, QCODE_2 .... '''Przykłady:''' *Czy udzielono odpowiedzi na jakąkolwiek część pytania? -> {count(self.NAOK)>0} *Jaki jest wynik oceny tego pytania? -> {suma(wartość własna)} Można ich także użyć do uzyskania sumy wierszy i kolumn. Załóżmy, że masz tablicę liczb z wierszami AE i kolumnami 1–5. *Jaka jest suma całkowita? -> {sum(self.NAOK)} *Jaka jest suma wiersza B? -> {sum(self.sq_B.NAOK)} *Jaka jest suma kolumny 3? -> {suma(self.sq_3.NAOK)} <span id=""That"_variable"></span> =="Ta" zmienna== Zmienna „to” jest podobna do zmiennej „ja”, ale pozwala na odniesienie się do innych pytań. Jego składnia jest następująca: *to.''qnazwa'' *tam.''qnazwa''.''przyrostek'' *to.''qnazwa''.''podselektor' ' *to.''qname''.''podselektor''.''sufiks'' „qname” to nazwa pytania bez żadnych rozszerzeń podpytań. Stwórzmy więc pytanie „q1”, „q” reprezentujące również jego „qname”. Przykłady: *Czy udzielono odpowiedzi na jakąkolwiek część pytania q1? -> {count(that.q1.NAOK)>0} *Jaki jest wynik oceny za q2? -> {sum(that.q2.NAOK)} *Jaka jest całkowita suma q3? -> {sum(that.q3.NAOK)} *Jaka jest suma wiersza C w q4? -> {sum(that.q4.sq_C.NAOK)} *Jaka jest suma kolumny 2 w q4? -> {suma(to.q4.sq_2.NAOK)} Zmienne „ja” i „to” można wykorzystać w dowolnym kontekście, walidacji lub dostosowaniu. Jedynym zastrzeżeniem jest to, że jeśli użyjesz funkcji [[Pokaż plik logiczny|Pokaż plik logiczny]], wyświetli ona rozszerzoną wartość „self” i „that”. Dzięki temu zobaczysz rzeczywiste równanie, które zostanie wygenerowane, dzięki czemu Ty (i EM) będziecie mogli sprawdzić, czy zmienne istnieją, czy nie. Może się to wydawać mylące, ponieważ możesz zobaczyć dość długie równania. Jeśli jednak edytujesz pytanie, zobaczysz oryginalne równanie zawierające „ja” i/lub „to”. {{Uwaga| Nie powinieneś używać tych zmiennych, jeśli *chcesz jawnie nazwać każdą zmienną używaną w równaniu, lub * używasz zmiennych, które nie mają pytań podrzędnych (np. pytania z pojedynczą odpowiedzią). W takich przypadkach poprzedzanie zmiennej słowem „that” jest przesadą i wiąże się z ryzykiem uzyskania nieoczekiwanych wyników.}} <span id="Access_to_functions"></span> =Dostęp do funkcji= ExpressionScript zapewnia dostęp do funkcji matematycznych, łańcuchowych i zdefiniowanych przez użytkownika, jak pokazano poniżej. Posiada odpowiedniki tych funkcji w PHP i JavaScript, dzięki czemu działają identycznie po stronie serwera (PHP) i po stronie klienta (JavaScript). Dodawanie nowych funkcji jest łatwe. <span id="Implemented_functions"></span> ==Zaimplementowane funkcje== Aktualnie dostępne są następujące funkcje: {| 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||Excel-style if(test,result_if_true,result_if_false)||if(test,result_if_true,result_if_false) |- |[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 [[ExpressionScript 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) |} {{Uwaga| Kliknij [[Funkcje, które są planowane lub rozważane|tutaj]], jeśli chcesz dowiedzieć się więcej o planowanych (lub ograniczonych) funkcjach.}} <span id="Create_new_expression_functions_with_plugin_{{NewIn|4.0.0}}"></span> ==Utwórz nowe funkcje wyrażeń za pomocą wtyczki {{NewIn|4.0.0}}== Jeśli potrzebujesz nowej funkcji, która nie istnieje w rdzeniu, możesz ją utworzyć za pomocą wtyczki. Taka nowa funkcja jest tworzona za pomocą zdarzenia [[expressionManagerStart]]. <span id="ExpressionScript_knows_which_variables_are_local"></span> =ExpressionScript wie, które zmienne są lokalne= Aby poprawnie zbudować JavaScript dla strony, EM musi wiedzieć, jakie zmienne są ustawione na stronie i jaki jest ich identyfikator JavaScript (np. dla document.getElementById(x)). Musi także wiedzieć, jakie zmienne są ustawione na innych stronach (aby mieć pewność, że potrzebne<input type='hidden' value='x'> pola są obecne i wypełnione). <span id="Cascading_Conditions"></span> ==Warunki kaskadowe== Jeśli którakolwiek ze zmiennych będzie nieistotna, całe równanie będzie nieistotne (fałszywe). Na przykład w poniższej tabeli „nie dotyczy” oznacza, że jedna ze zmiennych nie była istotna: {| class="wikitable" !Operator!!Przykład!!a!!b!!Wynik |- |<nowiki> + (jednoargumentowy)</nowiki> ||<nowiki> +a</nowiki> ||Nie dotyczy|| ||fałsz |- |- (jednoargumentowy)||-a||nie dotyczy|| ||fałsz |- |!||!a||nie dotyczy|| ||false |- |== (lub równ.)||a == b||N/A||5||false |- |== (lub równ.) ||a == b||Nie dotyczy||0||fałsz |- |== (lub równoważnik)||a == b||Nie dotyczy||Nie dotyczy|| fałsz |- |!= (lub ne)||a != b||nie dotyczy||5|| fałsz |- |!= (lub ne)||a != b||nie dotyczy||nie dotyczy|| false |- |!= (lub ne)||a != b||N/A||0||false |- |> (lub gt)||a > b||nie dotyczy||5|| fałsz |- |>= (lub ge)||a >= b||N/A||5||false |- |< (lub lt)||a < b||Nie dotyczy||5||fałsz |- |<= (lub le)||a <= b||nie dotyczy||5||fałsz |- |i||a i b||N/A||5||fałsz |- |i||a i b||nie dotyczy||nie dotyczy||fałsz! N!|- |lub||a lub b||Nie dotyczy||Nie dotyczy||fałsz |- |lub||a lub b||Nie dotyczy||5 ||fałsz |- |<nowiki> +</nowiki> ||a + b||Nie dotyczy||5||fałsz |- |-||a - b||nie dotyczy||5||fałsz |- |*||a * b||nie dotyczy||5||fałsz |- |/||a / b||5||nie dotyczy||fałsz |-! Nie!|()||(a)||Nie dotyczy|| ||false |- |(exp)||(a && b)||N/A||5||false |- |(exp) op (exp)| |(b + b) > (a && b)||Nie dotyczy||5||fałsz |- |funkcja||suma(a,b,b)||nie dotyczy|| 5||fałsz |- |funkcja||max(a,b)||nie dotyczy||5||fałsz |- |funkcja||min(a,b )||nie dotyczy||5||fałsz |- |funkcja||implode(', ',a,b,a,b)||nie dotyczy||5||fałsz! N!|- |funkcja||if(a,a,b)||N/A||5||false |- |funkcja||jest_pusty(a)||N/ A|| ||false |- |funkcja||is_empty(a)||0 (lub puste)|| ||true |- |funkcja||!is_empty(a)||nie dotyczy|| ||fałsz |} <span id="Overriding_Cascading_Conditions"></span> ==Zastępowanie warunków kaskadowych== Załóżmy, że chcesz wyświetlić sumę wszystkich odpowiednich odpowiedzi. Możesz spróbować użyć równania {suma(q1,q2,q3,...,qN)}. Jednak jest to tłumaczone wewnętrznie na LEMif(LEManyNA("q1","q2","q3",..."qN"),",",sum(LEMval("q1"),LEMval("q2") ,LEMval("q3"),...,LEMval("qN"))). Zatem jeśli którakolwiek z wartości q1-qN jest nieistotna, równanie zawsze zwróci wartość false. W tym przypadku sum() będzie pokazywać „0”, dopóki nie zostaną udzielone odpowiedzi na wszystkie pytania. Aby obejść ten problem, do każdej zmiennej można dodać przyrostek „.NAOK” (co oznacza, że „Nie dotyczy” jest OK). W takich przypadkach ma miejsce następujące zachowanie. Załóżmy, że masz zmienną q1.NAOK: #q1 nie została dodana do klauzuli LEManyNA() #LEMval('q1') będzie kontynuować sprawdzanie, czy odpowiedź jest istotna i zwróci<nowiki> „”</nowiki> jeśli tak nie jest (w związku z tym pojedyncze, nieistotne odpowiedzi zostaną zignorowane, ale nie unieważnią całego wyrażenia). Zatem rozwiązaniem bieżącego problemu całkowitego jest użycie równania „suma(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK)””. Użycie przyrostka .NAOK pozwala także autorom projektować ankiety, które mają kilka możliwych ścieżek, ale później zbiegają się wspólnymi ścieżkami. Załóżmy na przykład, że badani odpowiadają na ankietę w sposób wykraczający poza normalny zakres odpowiedzi. Autor może ostrzec osoby badane, że mogą nie uzyskać prawidłowych wyników i zapytać, czy naprawdę chcą kontynuować badanie. Jeśli odpowiedzą „Tak”, wyświetli się reszta pytań. Warunek „pozostałe pytania” sprawdzałby, czy odpowiedzi na początkowe odpowiedzi mieściły się w normalnym zakresie LUB czy osoba badana odpowiedziała „Tak” na pytanie, które jest istotne tylko wtedy, gdy odpowiedziała poza normalnym zakresem. <span id="How_does_ExpressionScript_support_conditional_micro-tailoring?"></span> =W jaki sposób ExpressionScript obsługuje warunkowe mikrodopasowywanie?= Oto przykład mikrokrawiectwa (gdzie typ pytania=='wyrażenie' oznacza równanie): {| class="wikitable" !Kod pytania!!Trafność!!Typ pytania!!Pytanie |- |imię||1||tekst||Jak się nazywasz? |-! N!|wiek||1||tekst||Ile masz lat? |- |badage||!is_empty(wiek)||expr||{(wiek<16) lub (wiek>80 )} |- |agestop||badage||message||Przykro mi, {name}, ty też jesteś {if( (wiek<16),'młody',if( (wiek>80), „stary”, „w średnim wieku”) ) } do tego testu. |- |dzieci||!badage||tak||Czy masz dzieci? |- |rodzice ||1||expr||{!badage && kids=='Y'} |- |numKids||rodzice||text||Ile masz dzieci? |-! N!|kid1||parents && numKids >= 1||text||Ile lat ma Twoje pierwsze dziecko? |- |kid2||parents && numKids >= 2||text||Ile lat ma Twoje pierwsze dziecko Twoje drugie dziecko? |- |kid3||parents && numKids >= 3||text||Ile lat ma Twoje trzecie dziecko? |- |kid4||parents && numKids > = 4||text||Ile lat ma Twoje czwarte dziecko? |- |kid5||rodzice && numKids >= 5||text||Ile lat ma Twoje piąte dziecko? |-! N!|suma||1||wyrażenie||{suma(dziecko1.NAOK,dziecko2.NAOK,dziecko3.NAOK,dziecko4.NAOK,dziecko5.NAOK)} |- |raport||rodzice| |text||{name}, powiedziałeś, że masz {wiek} i że masz {numKids}. Suma wieku Twoich pierwszych {min(numKids,5)} dzieci wynosi {sumage} |} Aby pobrać powyższy przykład ankiety, kliknij poniższy link: [[Media:No_of_kids_-_Micro_Tailoring.zip|Przykład ankiety dotyczącej liczby dzieci]]. Wszystkie te pytania mogą znajdować się na jednej stronie (np. w tej samej grupie) i zostaną wyświetlone tylko istotne pytania. Co więcej, gdy podasz wiek dzieci, wyrażenie sum() w ostatnim pytaniu będzie dynamicznie aktualizowane. <html>ExpressionScript zapewnia tę funkcjonalność, otaczając każde wyrażenie nazwaną<nowiki></nowiki> <span>element. Za każdym razem, gdy wartość się zmienia, ponownie oblicza wyrażenie, które powinno się w niej pojawić</span><nowiki></nowiki> <span><span>element i regeneruje wyświetlacz. Na tej samej stronie możesz mieć dziesiątki, a nawet setki takich dostosowanych wyrażeń.</span></span> <span id="Syntax_highlighting"></span> =Podświetlanie składni= Aby ułatwić wprowadzanie i sprawdzanie wyrażeń, EM udostępnia podświetlanie składni za pomocą następujących funkcji: <span id="Types_and_Meanings_of_Syntax_Highlighting"></span> ==Typy i znaczenie podświetlania składni== {| class="wikitable" !Kolor!!Próbka!!Znaczenie!!Podpowiedź!!Komentarze |- |brązowe tło||style='kolor-tła: #eee8aa'|Próbka||the całe równanie||brak||Wszystko w nawiasach klamrowych, które jest rozpoznawane jako równanie (np. nie ma odstępu początkowego ani końcowego) zostanie oznaczone kolorem z brązowym tłem, aby ułatwić odróżnienie tego od otaczającego tekstu |-! N!|pogrubiony czerwony tekst||style='color:#ff0000; kolor tła:#eee8aa'|'''Próbka'''||Błąd||Wyjaśnienie błędu||Może to być nieznana zmienna lub błąd w funkcji. Ankieta jest uszkodzona i pytania oparte na danym wyrażeniu nie będą pokazywane respondentom. |- |niebieski tekst||style='color:#0000ff; kolor tła:#eee8aa'|Przykład||nazwa funkcji||znaczenie i dopuszczalna składnia||Odnosi się do nazw funkcji lub rzeczy, które powinny być funkcjami, ponieważ następuje po nich nawias otwierający. Są one wyświetlane pogrubionym niebieskim tekstem. Etykietki narzędzi pokazują znaczenie i dopuszczalną składnię funkcji. |- |szary tekst||style='color:#808080; kolor tła:#eee8aa'|Próbka||string||brak||Ciągi z pojedynczym i podwójnym cudzysłowem są wyświetlane w kolorze szarym. |- |cyjan tekst||style='color:#4169e1; kolor tła:#eee8aa'|Przykładowy||zestaw zmiennych na tej samej stronie,||<nowiki> [</nowiki> imię i nazwisko lub kod SGQA]: pytanie; wartość; lista odpowiedzi pokazująca kody dla każdej wartości||Każda zmienna ustawiona na tej samej stronie, co aktualnie edytowane pytanie, jest wyświetlana w kolorze cyjan (można ją aktualizować w javascript). Podpowiedź pokazuje jego nazwę (jeśli użyłeś INSERTANS:xxx) lub kod SGQA (jeśli użyłeś nowego systemu nazewnictwa), aktualne pytanie i jego aktualną wartość (lub pustą, jeśli nie ustawiono). Jeśli typ pytania oczekuje odpowiedzi z wyliczeniowego zestawu wartości, pokazane jest mapowanie kodów na wyświetlane wartości. |- |zielony tekst||style='color:#008000; kolor tła:#eee8aa'|Przykładowy||zestaw zmiennych na poprzedniej stronie||<nowiki> [</nowiki> imię i nazwisko lub kod SGQA]: pytanie; wartość; lista odpowiedzi pokazująca kody dla każdej wartości||Każda zmienna ustawiona na poprzedniej stronie jest wyświetlona pogrubionym zielonym tekstem. Podpowiedź pokazuje jego nazwę (jeśli użyłeś INSERTANS:xxx) lub kod SGQA (jeśli użyłeś nowego systemu nazewnictwa), aktualne pytanie i jego aktualną wartość (lub pustą, jeśli nie ustawiono). Jeśli typ pytania oczekuje odpowiedzi z wyliczeniowego zestawu wartości, pokazane jest mapowanie kodów na wyświetlane wartości. |- |pogrubiony różowy tekst||style='color:#9370db; kolor tła:#eee8aa'|Przykład||ustawienie zmiennych <sup>ogólnie na dalszej stronie: puste na początku ankiety, ale można je wypełnić indeksem lub przenieść poprzednio</sup> ||<nowiki> [</nowiki> imię i nazwisko lub kod SGQA]: pytanie; wartość; lista odpowiedzi pokazująca kody dla każdej wartości||Każda zmienna ustawiona na poprzedniej stronie jest oznaczona pogrubionym różowym tekstem. Podpowiedź pokazuje jego nazwę (jeśli użyłeś INSERTANS:xxx) lub kod SGQA (jeśli użyłeś nowego systemu nazewnictwa), aktualne pytanie i jego aktualną wartość (lub pustą, jeśli nie ustawiono). Jeśli typ pytania oczekuje odpowiedzi z wyliczeniowego zestawu wartości, wyświetlane jest mapowanie kodów na wyświetlane wartości. |- |pogrubiony jasnobrązowy tekst||style='color:#a0522d; kolor tła:#eee8aa'|Próbka||wartość zastępująca limonkę||wartość||Ciągi zastępujące limonkę (takie jak {TOKEN:xxx}, {PRIVACY_MESSAGE}) są wyświetlane pogrubioną, brązową czcionką. |- |czerwony tekst||style='color:#ff4500; kolor tła:#eee8aa'|Przykład||operator przypisania (=) ||komunikat ostrzegawczy||Jeśli użyjesz jednego z operatorów przypisania (=), operator ten zostanie wyświetlony w kolorze czerwonym. Ma to na celu zapobieganie przypadkowemu ponownemu przypisaniu wartości, gdy naprawdę chcesz sprawdzić, czy a == b zamiast ustawiać wartość a = b. |- |zwykły czarny tekst||style=' czarny kolor; kolor tła:#eee8aa'|Próbka||interpunkcja||brak||Wszystkie inne znaki interpunkcyjne w wyrażeniu są wyświetlane jako zwykły czarny tekst. |- |tekst w czerwonej ramce||pogrubiona czerwona linia otacza błąd||błąd składni||opis błędu||Wszelkie wykryte błędy składniowe są wyświetlane w czerwonych ramkach. Etykietka narzędzia pokazuje błąd. Przykłady obejmują niedopasowane nawiasy, użycie niezdefiniowanych funkcji, przekazywanie niewłaściwej liczby argumentów do funkcji, źle skonstruowane wyrażenia (np. brakujące operatory pomiędzy zmiennymi), próby przypisania nowej wartości do zmiennej tylko do odczytu, próby przypisania wartości do -zmiennych lub przy użyciu nieobsługiwanej składni. Należy pamiętać, że system wykrywania błędów składniowych może zgłosić tylko jeden błąd w wyrażeniu, nawet jeśli błędów jest wiele; jeśli jednak zostaną wykryte jakiekolwiek błędy, zostanie wyświetlony co najmniej jeden błąd. |} {{Uwaga| Przez podpowiedzi rozumiemy wyskakujący komunikat wyświetlany po najechaniu kursorem na określone funkcje i zmienne.}} <span id="Additional_reading"></span> =Dodatkowa lektura= <span id="ExpressionScript_sample_surveys"></span> ==[[Przykładowe ankiety ExpressionScript|Przykładowe ankiety ExpressionScript]]== <span id="Use_cases_and_how-tos"></span> ==[[Poradniki ExpressionScript|Przypadki użycia i porady]]== <span id="Step-by-step_examples"></span> ==[[Przykłady ExpressionScript|Przykłady krok po kroku]]== <span id="Reference_for_Developers"></span> ==[[ExpressionScript dla programistów|Materiały informacyjne dla programistów]]== <span id="RoadMap,_status,_ToDo_List"></span> ==[[Mapa drogowa silnika ExpressionScript|Mapa drogowa, stan, lista zadań do wykonania]]==