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
Custom translation
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:Ví dụ về ExpressionScript}}<languages /> __TOC__ {{Lưu ý| '''Xin hãy giúp mở rộng bài viết này''' bằng cách thêm các ví dụ của riêng bạn. Điều này sẽ giúp những người khác bắt đầu sử dụng Tập lệnh biểu thức.}} <span id="Structure"></span> =Cấu trúc= Phần đầu tiên của bài viết sẽ mô tả Biểu thức có thể được sử dụng để làm gì và nơi tìm/thêm Biểu thức. Phần thứ hai cung cấp các ví dụ về cách sử dụng Biểu thức. <span id="Categories_of_Expressions"></span> =Các loại biểu thức= LimeSurvey sử dụng Biểu thức cho các mục đích sau: * [[ExpressionScript_examples#Relevance|Relevance]] * [[ExpressionScript_examples#Validation|Validation]] * [[ExpressionScript_examples#Text đầu ra|Đầu ra văn bản]] * [[ExpressionScript_examples#Lưu trữ câu trả lời|Lưu trữ câu trả lời]] <span id="Relevance"></span> ==Mức độ liên quan== '''Mục đích: Ẩn nhóm câu hỏi/câu hỏi''' Mức độ liên quan kiểm soát việc một nhóm câu hỏi hoặc câu hỏi được hiển thị hay ẩn. Nếu kết quả của Biểu thức là "true" (tức là 1) thì phần tử sẽ được hiển thị. Ngược lại (nếu kết quả của Biểu thức là "false" (tức là 0)), phần tử sẽ bị ẩn. {|class="wikitable" !Type!!Hiển thị/ẩn!!Tìm ở đâu!!Ảnh chụp màn hình |- |Mức độ liên quan của nhóm câu hỏi||nhóm câu hỏi||Tạo/Chỉnh sửa nhóm câu hỏi -> "Phương trình liên quan:"||[[Tập tin:Phương trình liên quan của nhóm ảnh chụp màn hình.png|30px]] |- |Câu hỏi Mức độ liên quan||câu hỏi||Tạo/Chỉnh sửa câu hỏi -> "Phương trình liên quan:"|| [[Tập tin:Ảnh chụp màn hình phương trình liên quan của câu hỏi.png|30px]] |- |Độ liên quan của câu hỏi con||câu hỏi phụ||Chỉnh sửa câu hỏi phụ -> "Phương trình liên quan:"||[[Tập tin:Ảnh chụp màn hình phương trình liên quan đến câu hỏi con. png|30px]] |- |} <span id="Validation"></span> ==Xác thực== '''Mục đích: Xác thực dữ liệu đầu vào/hành động đối với câu hỏi/câu hỏi phụ/câu trả lời''' Xác thực kiểm soát xem thông tin đầu vào của người trả lời vào câu hỏi hoặc hành động có hợp lệ hay không. Nếu kết quả của biểu thức là "true" (tức là 1), lớp "tốt" sẽ được áp dụng cho phần tử và thông báo xác thực. Mặt khác, nếu kết quả của biểu thức là "false" (tức là 0)), lớp "lỗi" sẽ được áp dụng cho phần tử và thông báo xác thực. Bạn có thể khai báo kiểu cho các lớp này trong '''template.css'''. {|class="wikitable" !Type!!Xác thực!!Tìm ở đâu!!Ảnh chụp màn hình |- |Xác thực câu hỏi||câu hỏi||Tạo/Chỉnh sửa câu hỏi -> "tab logic" - > "Phương trình xác thực câu hỏi"||[[FFile:Question validation equation.png|30px]] |- |Xác thực câu hỏi con||câu hỏi con||Tạo/Chỉnh sửa câu hỏi -> "tab Logic" -> " Phương trình xác thực câu hỏi con"||[[File:Subquestion validation screenshot.png|30px]] |} <span id="Text_output"></span> ==Xuất văn bản== '''Mục đích: (Làm gì đó) và viết ra một số văn bản''' Một biểu thức có thể được sử dụng để viết ra một số văn bản. Ví dụ: bạn có thể kiểm tra hoặc tính toán một cái gì đó và chỉ định kết quả đầu ra tùy thuộc vào kết quả kiểm tra hoặc tính toán. Nó cũng có thể được sử dụng để chèn nội dung câu hỏi, câu trả lời, loại câu hỏi, ... của câu hỏi được sử dụng trước khi sử dụng Biểu thức. Đầu ra văn bản có thể được sử dụng ở mọi nơi có văn bản được hiển thị và có thể trả về mọi loại kết quả. {|class="wikitable" !Trường hợp sử dụng!!Description |- |Micro may đo||Điều chỉnh văn bản, ví dụ: viết "Mr" hoặc "Mrs" tùy theo câu hỏi về giới tính được hỏi trước đó |- |Tính toán||Tính một giá trị và viết nó ra, ví dụ: "Thu nhập của gia đình bạn là xxx" |- |Reference||Chèn văn bản từ một phần tử, ví dụ: "Tên bạn là xxx. Bạn bao nhiêu tuổi?" |} <span id="Answers_storing"></span> ==Lưu trữ câu trả lời== '''Mục đích: (Làm gì đó,) (viết một số văn bản) và lưu trữ một cái gì đó trong cơ sở dữ liệu''' [[Loại câu hỏi - Phương trình|Loại câu hỏi phương trình]] có thể được sử dụng để lưu trữ nội dung nào đó trong cơ sở dữ liệu. Bạn có thể làm điều gì đó với Biểu thức, hiển thị câu hỏi Phương trình (tương tự như [[Loại câu hỏi - Hiển thị văn bản|hiển thị văn bản]]) và lưu trữ kết quả của Biểu thức trong cơ sở dữ liệu. Nó lưu trữ câu trả lời vào bảng phản hồi. Sau đó, kết quả có thể được sử dụng trong tính năng thống kê hoặc cũng có thể được nhập vào một trong các định dạng do chức năng xuất LimeSurvey cung cấp. <span id="Examples_for_Expressions"></span> =Ví dụ về biểu thức= <span id="Insert_an_answer_from_a_previous_question"></span> ==Chèn câu trả lời từ câu hỏi trước== {| class="wikitable" |Purpose||Chèn câu trả lời từ câu hỏi trước |- |Type||Reference |- |Ví dụ||Câu hỏi một (mã câu hỏi " Q00"): Bạn sống ở thành phố nào?<br /> Câu hỏi thứ hai (mã câu hỏi "Q01") Bạn đã sống ở THÀNH PHỐ bao lâu rồi?<br /> Việc cần làm: Nên sử dụng câu trả lời của câu hỏi một thay vì "THÀNH PHỐ" trong câu hỏi thứ hai. |- |Expression||{QOO} |- |Description|| Câu trả lời được cung cấp trong Q00 thay thế trường Q00 từ câu hỏi thứ hai |- |Các bước||Tạo/Chỉnh sửa câu hỏi thứ hai<br /> Chèn "Bạn đã sống ở {QOO} (năm) được bao lâu?" vào trường văn bản câu hỏi |- |colspan="2"align="center"|[[File:Biểu thức đơn giản tên thành phố.png]] |} <span id="Using_hidden_equation_question_to_autofill_an_answer"></span> ==Sử dụng câu hỏi phương trình ẩn để tự động điền câu trả lời== '''Vấn đề:''' Hãy tưởng tượng bạn có hai câu hỏi Q1 và Q2. Q1 hỏi người trả lời về độ tuổi của họ. Q2 chia người trả lời thành 3 nhóm: tuổi dưới 20, tuổi 20, tuổi lớn hơn 20. Vì vậy, Q2 nên sử dụng các giá trị “1”, “2”, “3” tương ứng với các điều kiện trên. Ngoài ra, chúng ta không nên quên ẩn Q2 (câu hỏi sẽ không được hiển thị trong khảo sát nhưng các giá trị sẽ thông qua "quy trình nền" trong bảng phản hồi). '''Để điền vào cơ sở dữ liệu bằng loại câu hỏi Phương trình:''' * Đầu tiên, tạo một câu hỏi có mã Q1 làm câu hỏi nhập số. * Sau đó tạo một câu hỏi khác có mã Q2 làm câu hỏi phương trình . * Trong chương tab "Cài đặt hiển thị" của Q2: ** đặt trường "Luôn ẩn câu hỏi này" là "Bật" ** nhập vào trường "Phương trình" biểu thức: <pre> {if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}</pre> <span id="Create_a_summary_page_using_placeholders"></span> ==Tạo trang tóm tắt bằng cách sử dụng trình giữ chỗ== Hướng dẫn này trình bày cách bạn có thể tạo một cái nhìn tổng quan ở cuối cuộc khảo sát, liệt kê tất cả các câu hỏi và câu trả lời thông qua [http://manual.limesurvey.org/ExpressionScript_-_Presentation#Access_to_variables phần giữ chỗ ExpressionScript]. Nó cũng chỉ ra cách thực hiện giới hạn cái nhìn tổng quan như vậy chỉ ở những câu hỏi đã được trả lời. Bạn có thể tải xuống ví dụ của chúng tôi từ đây: [[Media:Limesurvey_Expression_Manager_Placeholder_Demo_Survey.lss|Ví dụ khảo sát về người giữ chỗ khảo sát]]. '''''Các loại câu hỏi đang được sử dụng ở đây:''''' '''1. Câu hỏi một lựa chọn / văn bản đơn/câu hỏi số''' *Danh sách (thả xuống) *Danh sách (radio) [L] *Có/Không [Y] *Văn bản dài tự do [T ] *Văn bản tự do ngắn [S] *Nhập số [N] *Phương trình [*] '''2. Câu hỏi với câu hỏi phụ''' *Nhiều văn bản ngắn [Q] *Trắc nghiệm [M] *Array [F] *Array (Có/Không/Không chắc chắn) [C]!N !*Array (lựa chọn 10 điểm) [B] '''3. Câu hỏi có 2 thang đo''' *Array thang đo kép [1] '''4. Câu hỏi với thang đo X và Y''' *Array (Số) [:] '''5. Mặt nạ câu hỏi''' *Hiển thị văn bản [X] Trong ví dụ đơn giản này, tổng quan của chúng tôi sẽ là một danh sách đơn giản với: - ''Nội dung câu hỏi:'' Câu trả lời của người dùng <span id="Single_choice_questions_/_single_text/numeric_questions"></span> ===Câu hỏi một lựa chọn/văn bản đơn/câu hỏi số=== Đối với tất cả các loại câu hỏi này, Limesurvey sẽ lưu trữ một câu trả lời duy nhất: *Danh sách (thả xuống) *Danh sách (radio) *Danh sách có nhận xét *5 điểm lựa chọn *Có/Không *Văn bản ngắn tự do *Văn bản dài tự do!N !*Văn bản miễn phí rất lớn *Nhập số *Phương trình *Ngày *Giới tính Giả sử mã câu hỏi của câu hỏi là q1, chúng ta có thể tham khảo nội dung câu hỏi và câu trả lời bằng cách sử dụng: - {q1.question}: {q1.shown} Ví dụ: - Bạn bao nhiêu tuổi?: 25 Nếu bạn muốn kiểm tra xem câu hỏi đó đã được trả lời chưa, bạn có thể đặt câu lệnh IF xung quanh đầu ra của mình: <pre>{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}</pre> Điều này "dịch" thành: NẾU câu hỏi có mã q1 không trống, xuất ra "- " VÀ văn bản câu hỏi VÀ ": " VÀ văn bản câu trả lời (hàm join() nối các phần tử dưới dạng một chuỗi mới; ELSE: không xuất ra gì (" " có nghĩa là chuỗi trống). <span id="Question_with_subquestions"></span> ===Câu hỏi có câu hỏi phụ=== Đối với tất cả các loại câu hỏi này, LimeSurvey sử dụng các câu hỏi phụ: *Nhiều văn bản ngắn *Nhiều lựa chọn *Nhiều lựa chọn có nhận xét *Array *Array (lựa chọn 5 điểm) *Array (lựa chọn 10 điểm) *Array (Có /Không/Không chắc chắn) *Mảng (Tăng/Tương tự/Giảm) *Mảng theo cột Giả sử mã câu hỏi của câu hỏi là q2 và các câu hỏi phụ được đánh số SQ001, SQ002, (đánh số tự động do LimeSurvey thực hiện), chúng ta có thể tham khảo nội dung câu hỏi và câu trả lời bằng cách sử dụng: - {q2_SQ001.question}: {q2_SQ001.shown} - {q2_SQ002.question}: {q2_SQ002.shown} Đối với các câu hỏi trắc nghiệm, bây giờ nên hiển thị văn bản của câu hỏi phụ được đánh dấu nhưng hiển thị chữ Y cho mỗi tùy chọn đã chọn: - {q2_SQ001.question}: {q2_SQ001} - {q2_SQ002.question}: {q2_SQ002} ... Lưu ý rằng hiện tại không thể xuất nội dung câu hỏi của các câu hỏi bằng câu hỏi phụ, hãy xem [http://bugs.limesurvey.org/view.php?id=8858 yêu cầu tính năng này]. <span id="Example_1_(assuming_question_type_is_multiple_choice)"></span> ====Ví dụ 1 (giả sử loại câu hỏi là trắc nghiệm)==== - Bạn có biết những hãng xe này không? -- Mercedes: Đúng -- Audi: N -- Volvo: Y Nếu bạn chỉ muốn xuất các mục đã chọn, bạn có thể đặt câu lệnh IF xung quanh đầu ra của mình và kiểm tra giá trị hộp kiểm: <pre>{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }</pre> Sử dụng hàm <i>listifop</i> nếu bạn muốn xuất danh sách chỉ các mục đã chọn, ví dụ: Mercedes, Volvo <pre>{ listifop( 'value', '==', 'Y', 'câu hỏi', ', ', that.q2.sgqa ) }</pre> Trong đó <small>that.q2</small> mở rộng sang tất cả các câu hỏi phụ của q2. Xem [[ExpressionScript - Trình bày#The_reserved_.22this.22.2C_.22self.22.2C_and_.22that.22_variables|self, cái này và cái kia]] để biết thêm chi tiết. </br> <span id="Example_2_(assuming_question_type_is_Array_(10_point_choice))"></span> ====Ví dụ 2 (giả sử loại câu hỏi là Mảng (chọn 10 điểm))==== - Vui lòng đánh giá chất lượng các hãng xe dưới đây theo thang điểm từ 1=rất tệ đến 10=rất tốt? -- Mercedes: 7 -- Audi: 9 -- Volvo: 9 Nếu bạn chỉ muốn xuất ra các mục được xếp hạng, bạn có thể đặt câu lệnh IF xung quanh đầu ra của mình và kiểm tra xem câu hỏi phụ hiện tại đã được trả lời hay chưa bằng cách sử dụng: <pre>{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }</pre> Sử dụng hàm <i>listifop</i> nếu chẳng hạn bạn chỉ muốn xuất danh sách các mục đã chọn lớn hơn 8, ví dụ: Audi / Volvo <pre>{ listifop( 'value', '>', 8, 'câu hỏi', ' / ', that.q3.sgqa ) }</pre> </br> <span id="Question_with_two_scales"></span> ===Câu hỏi có hai thang đo=== {{Lưu ý|Điều này chỉ áp dụng cho loại câu hỏi thang đo kép.}} Giả sử rằng các mã sau đang được sử dụng: *Mã câu hỏi: q4 *Mã câu hỏi phụ: SQ001, SQ002, ... *Mã câu trả lời tỷ lệ 1: A1, A2, ... *Đáp án thang điểm 2: B1, B2, ... {{Lưu ý|Để tham khảo kết quả của một câu hỏi phụ nhất định trên một thang đo nhất định, bạn cần sử dụng Mã câu hỏi . '_' . Mã câu hỏi phụ . '_' . ID quy mô. '''Lưu ý rằng "ScaleID" là 0 cho thang đo đầu tiên và 1 cho thang đo còn lại!'''</br> Ví dụ tham khảo đáp án câu hỏi phụ thứ 3 và thang đo thứ 2: q4_SQ003_1 - Câu hỏi 4, câu hỏi phụ 3, thang đo thứ 2.}} Hãy xuất kết quả cho cả hai thang đo và hai câu hỏi phụ đầu tiên: - {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown} - {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown} Để xuất văn bản câu hỏi phụ, bạn cần thêm ID thang đo vào phần giữ chỗ (mặc dù văn bản giống nhau cho cả hai thang đo). Vì vậy, thay vì {q4_SQ001.question} chúng ta phải sử dụng {q4_SQ001_0.question} hoặc {q4_SQ001_1.question}. Nếu bạn muốn xuất/hiển thị kết quả của các câu hỏi phụ chỉ có ít nhất một câu trả lời, hãy sử dụng cú pháp này cho mỗi câu hỏi phụ: <pre>{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}</pre> <span id="Question_with_X_and_Y_scales"></span> ===Câu hỏi có thang đo X và Y=== Điều này áp dụng cho tất cả các câu hỏi ma trận cho phép trả lời cho mọi ô (không chỉ mỗi hàng như được hiển thị trước đó): *Array Texts *Array Numbers Mã giả định được sử dụng: *Mã câu hỏi: q5 *Mã câu hỏi phụ: SQ001, SQ002, ... *Mã trả lời: A1, A2, ... Để tham khảo kết quả của một câu hỏi con nhất định từ một cột nhất định, bạn cần sử dụng Câu hỏi. '_' . Mã câu hỏi phụ . '_' . Mã trả lời. Ví dụ tham khảo câu trả lời của câu hỏi phụ thứ ba và cột thứ hai: q5_SQ003_A2. Hãy xuất kết quả cho cột 1-3 của hai câu hỏi phụ đầu tiên: - {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown} - {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown} Vì đối với những loại câu hỏi này, mỗi ô (kết hợp trục X và trục Y) tương đương với một tùy chọn trả lời, nên cần phải thực hiện kiểm tra dữ liệu hiện có cho từng ô. Ví dụ: <pre>{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}</pre> {{Lưu ý|Để xuất văn bản câu hỏi phụ, bạn cần thêm mã câu trả lời vào phần giữ chỗ (mặc dù các văn bản đều giống nhau cho tất cả các tùy chọn trả lời). Vì vậy, thay vì {q5_SQ001.question} chúng ta phải sử dụng {q5_SQ001_A1.question} hoặc {q5_SQ001_A2.question}.}} <span id="Hide_question_if_answer_from_previous_question_is_empty"></span> ==Ẩn câu hỏi nếu câu trả lời ở câu hỏi trước trống== {|class="wikitable" |Purpose||Ẩn câu hỏi nếu câu trả lời ở câu hỏi trước trống |- |Type||Mức độ liên quan của câu hỏi |- |Ví dụ||Câu hỏi một: mã câu hỏi "tên", nội dung câu hỏi "Tên bạn là gì?"<br /> Câu hỏi thứ hai: nội dung câu hỏi "{name}, bạn bao nhiêu tuổi?"<br /> Việc cần làm: Ẩn câu hỏi thứ hai nếu trường văn bản của câu hỏi thứ nhất trống |- |Expression||!is_empty(name) |- |Description||is_empty() xác định xem một biến có được coi là trống rỗng. Các "!" phủ nhận kết quả. Vì vậy, nếu biến không trống thì Biểu thức sẽ đúng và câu hỏi được hiển thị |- |Steps||Tạo/chỉnh sửa câu hỏi hai<br /> Chèn "!is_empty(name)" vào "Phương trình liên quan:" |- |Tệp mẫu||[[Media:Hide_question_if_empty_question_group.zip|Hide_question_if_empty_question_group.zip]] |- |colspan ="2"align="center"|[[File:Hide question if empty 1.png]][[File:Hide question if empty 2.png]] |} <span id="Hide_question_group_if_answer_from_previous_question_is_Yes_or_No"></span> ==Ẩn nhóm câu hỏi nếu câu trả lời từ câu hỏi trước là Có hoặc Không== {|class="wikitable" |Purpose||Ẩn nhóm câu hỏi nếu câu trả lời từ câu hỏi trước là Có hoặc Không |- |Type||Độ liên quan của nhóm câu hỏi |- | Ví dụ||Trang một, Nhóm câu hỏi một, Câu hỏi một: mã câu hỏi "PET", nội dung câu hỏi "Bạn có thú cưng không?" -Có không<br /> Trang hai, Nhóm câu hỏi thứ hai: Tiêu đề "Giới thiệu về (các) thú cưng của bạn"<br /> Việc cần làm: Hiển thị/Ẩn nhóm câu hỏi hai nếu câu trả lời từ câu hỏi một là Có/Không |- |Biểu thức||PET == "Y" |- |Mô tả||PET là mã câu hỏi cho câu hỏi bạn muốn kiểm tra câu trả lời. Nếu bạn không sử dụng hậu tố EM sẽ sử dụng "Qcode.code". Vì vậy, bạn so sánh mã câu trả lời từ câu hỏi PET với giá trị "Y". Nếu người tham gia trả lời "Có", Biểu thức là đúng và nhóm câu hỏi "Giới thiệu về (các) thú cưng của bạn" sẽ được hiển thị. |- |Các bước||Tạo/chỉnh sửa nhóm câu hỏi hai<br /> Chèn "PET == "Y"" vào "Phương trình liên quan:" |- |Tệp mẫu||[[Phương tiện:Ẩn nhóm câu hỏi nếu câu trả lời từ câu hỏi trước là Có hoặc Không.zip|Hide_question group_if_answer_from_previous_question_is_Yes_or_No. zip]] |- |colspan="2"align="center"|[[File:Ẩn nhóm câu hỏi nếu câu trả lời từ câu hỏi trước là Có hoặc Không 1.png]][[File:Ẩn câu hỏi nhóm nếu câu trả lời từ câu hỏi trước là Có hoặc Không 2.png]] |} <span id="Display_value_of_a_multiple_answer_input_question_field"></span> ==Giá trị hiển thị của trường câu hỏi nhập nhiều câu trả lời== {|class="wikitable" |Purpose||Giá trị hiển thị của trường câu hỏi nhập nhiều câu trả lời |- |Type||Reference |- |Ví dụ||Câu hỏi một : mã câu hỏi "AskChildAge", nội dung câu hỏi "Con bạn bao nhiêu tuổi?". Mã câu hỏi phụ -Child1 -Child2 -Child3 - ChildXXX<br /> Câu hỏi số hai: mã câu hỏi "ReportChildAge" nội dung câu hỏi "Giới thiệu về đứa con đầu lòng của bạn: - CHILD1 là AGE1." |- |Expression||{AskChildAge_Child1.question}, {AskChildAge_Child1.value} |- |Mô tả||Bạn muốn sử dụng giá trị của câu hỏi phụ trong câu hỏi sau. Bạn có thể truy cập giá trị câu hỏi phụ bằng loại biểu thức sau: QcodeQuestion_QcodeSubquestion.value |- |Steps||Tạo/chỉnh sửa câu hỏi thứ hai<br /> Chèn văn bản này vào phần mô tả: "Giới thiệu về đứa con đầu lòng của bạn: - {AskChildAge_Child1.question} là {AskChildAge_Child1.value}." |- |Tệp mẫu||[[Media:Display_value_of_a_multiple_answer_input_question_field.zip|Display_value_of_a_multiple_answer_input_question_field. zip]] |- |colspan="2"align="center"|[[File:Display value of a multiple answer input question field 1.png]] |} <span id="Validate_number_of_boxes_ticked_per_row_for_an_"Array_(Numbers)_Checkbox"_question"></span> ==Xác thực số lượng hộp được đánh dấu trên mỗi hàng cho câu hỏi "Hộp kiểm mảng (Số)"== {|class="wikitable" |Purpose||Xác thực số hộp được đánh dấu trên mỗi hàng |- |Type||Xác thực |- |Ví dụ||Câu hỏi thuộc loại " Số mảng (Bố cục hộp kiểm)" |- |Biểu thức||sum(...) |- |Description||(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) xác định xem có ít nhất X hộp kiểm ở hàng A được chọn hay không.<br /> Nếu bạn muốn kiểm tra cả ba hàng (A, B, C), bạn có thể kết nối biểu thức bằng "&&":<br /> (tổng(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)<br /> && (tổng(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X)<br /> && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X) |- |Các bước||Tạo/chỉnh sửa câu hỏi thuộc loại "Số mảng (Bố cục hộp kiểm)".<br /> Chèn biểu thức trên vào "Phương trình xác thực câu hỏi" ở cài đặt câu hỏi nâng cao (bạn có thể phải điều chỉnh cách đặt tên biến!). |- |Tệp mẫu||[[Media:limesurvey_survey_53654.lss|Xác thực số lượng hộp đánh dấu mỗi hàng cho một Mảng (Số) Checkbox.lss]] |- |colspan="2"align="center"|[[File:Validate number of boxes ticker per row for an Array (Numbers) Checkbox 05.png]][[File:Validate number of boxes ticker per row for an Array (Numbers) Checkbox 1.png]] |} <span id="Calculate_difference_between_two_dates"></span> ==Tính chênh lệch giữa hai ngày== {| class="wikitable" |Purpose||Tính toán sự khác biệt giữa hai ngày |- |Loại||Mức độ liên quan / Loại câu hỏi phương trình / Xác thực |- |Ví dụ||Câu hỏi một (ngày/giờ, mã: DOB): Ngày sinh của bạn là ngày nào?<br /> Câu hỏi thứ hai (ngày/giờ, mã: datetoday): Hôm nay là thứ mấy?<br /> Câu hỏi thứ ba (bản soạn sẵn): Bạn được XXXX ngày tuổi.<br /> Việc cần làm: Tính toán và hiển thị số ngày giữa ngày cho ở câu hỏi 1 và câu hỏi 2. |- |Expression||{(strtotime(datetoday)-strtotime(DOB))/60/60 /24}<br> |- |Mô tả|| strtotime tính số giây giữa ngày 1 tháng 1 năm 1970 và ngày đã cho. Biểu thức trên tính số giây giữa hai ngày đã cho. Thuật ngữ "/60/60/24" chỉ tính số ngày từ số giây.<br /> Thay vì hỏi "datetoday", bạn cũng có thể sử dụng strtotime('now') hoặc đơn giản là time(), trả về trực tiếp số giây từ tháng 1 năm 1970 cho đến nay (tức là thời điểm khảo sát được thực hiện). Do đó, bạn có thể nhanh chóng tính ra tuổi của một người theo năm bằng phương trình {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Trong bất kỳ trường hợp nào, điều quan trọng là phải nhập ngày ở định dạng phù hợp, nếu không hàm strtotime() sẽ không hoạt động bình thường. |- |Steps||Tạo hai câu hỏi về ngày tháng (cho ngày sinh và ngày hôm nay) và một câu hỏi soạn sẵn.<br /> Trong nội dung câu hỏi của phần chèn câu hỏi soạn sẵn: "Vào {datetoday}, bạn đã được {(strtotime(today)-strtotime(dob))/60/60/24} ngày tuổi."<br /><br /> Xin lưu ý: Hàm strtotime có thể hoạt động với NHIỀU định dạng nhưng không phải tất cả các định dạng ngày. Nếu bạn gặp vấn đề, hãy đặt định dạng ngày của khảo sát thành mm/dd/yyyy hoặc yyyy-mm-dd hoặc dd.mm.yyyy" |- |Sample File||[[Media:TestSurvey_Working_with_Dates.zip| Date_difference.zip]] |- |colspan="2"align="center"|[[File:Date_difference_example.png]] |} <span id="Using_ExpressionScript_for_Assessments"></span> ==Sử dụng ExpressionScript để đánh giá== Sau đây là một ví dụ khác về cách sử dụng ExpressionScript với [[Question type - Array|Array type questions]] và đánh giá:</ br> Giả sử bạn có 2 câu hỏi mảng và bạn muốn lưu kết quả dữ liệu tính toán vào cơ sở dữ liệu của mình. Nó thực sự đơn giản, bạn sẽ cần tạo và kiểm tra các mảng của mình rồi gửi phản hồi giả để xem liệu nó có hoạt động hay không và cung cấp cho bạn kết quả trên trang hoàn chỉnh. '''Chi tiết triển khai:''' *thêm một câu hỏi thuộc loại phương trình *thêm dòng sau giả sử rằng Q1 là mã câu hỏi mảng của bạn trong khi Q2 là câu hỏi thứ hai: **<pre> {tổng(Q1_SQ001.value,Q2_SQ001.value)}</pre> Lưu ý rằng SQ001 là mã mặc định cho mọi câu hỏi phụ. Nếu bạn thay đổi mã câu hỏi phụ, hãy điều chỉnh phương trình trên cho phù hợp. <span id="Using_em_validation_q_in_array"></span> ==Sử dụng em_validation_q trong mảng== Bạn có thể sử dụng [[QS:Em_validation_q|phương trình xác thực câu hỏi]] để kiểm soát một mảng với bất kỳ điều kiện nào. '''Chi tiết triển khai:''' * cho mảng đầu tiên : mảng một lựa chọn ** Mã câu hỏi là ARRAY ** Mã câu hỏi phụ là SQ01,SQ02,SQ03 và SQ04 ** cập nhật phương trình xác thực toàn bộ câu hỏi và đặt<pre> !is_empty(ARRAY_SQ01) và !is_empty(ARRAY_SQ03)</pre> * cho mảng thứ hai : mảng văn bản ** Mã câu hỏi là ARRAYTEXT ** Câu hỏi phụ tại mã trục Y là SY01,SY02,SY03 và SY04 ** Cập nhật toàn bộ câu hỏi phương trình xác nhận và đặt<pre> đếm(self.sq_SY01 >= 1) và đếm(self.sq_SY03 >= 3)</pre>