x

Các chương chính

  1. Đám mây LimeSurvey vs LimeSurvey CE
  2. LimeSurvey Cloud - Hướng dẫn bắt đầu nhanh
  3. LimeSurvey CE - Lắp đặt
  4. Cách thiết kế một cuộc khảo sát tốt (Hướng dẫn)
  5. Bắt đầu
  6. Cấu hình LimeSurvey
  7. Cấu hình LimeSurvey
  8. Giới thiệu - Khảo sát
  9. Xem menu khảo sát
  10. Xem cấu trúc khảo sát
  11. Giới thiệu - Câu hỏi
  12. Introduction - Question Groups
  13. Introduction - Surveys - Management
  14. Survey toolbar options
  15. Multilingual survey
  16. Quick start guide - ExpressionScript
  17. Advanced features
  18. General FAQ
  19. Troubleshooting
  20. Workarounds
  21. License
  22. Version change log
  23. Plugins - Advanced
 Actions

Cách thực hiện ExpressionScript

From LimeSurvey Manual

Revision as of 18:13, 15 January 2024 by Maren.fritz (talk | contribs) (Created page with "Nội dung trong email mời:")


Tổng quan về những gì đã được giải thích trước đây

Nếu bạn đã theo dõi cấu trúc của sổ tay LimeSurvey cho đến nay, điều đó có nghĩa là bạn đã có thuật ngữ LimeSurvey. Tiếp theo, chúng tôi đề cập đến các biểu thức và biến để tìm hiểu cách cải thiện các cuộc khảo sát của mình. Trong phần tiếp theo, chúng ta đã chuyển sang các loại và ý nghĩa của Đánh dấu cú pháp để tìm hiểu cách sửa lỗi cú pháp.

Với những khái niệm cơ bản này, chúng ta có thể chuyển sang các ví dụ và giải thích cách hoạt động của các biểu thức trong LimeSurvey.


Đánh dấu cú pháp

Các ảnh chụp màn hình sau đây đưa ra ví dụ nhưng không hiển thị giá trị của chú giải công cụ. Chú giải công cụ là một hộp thông tin được hiển thị bất cứ khi nào bạn di chuột qua bất kỳ từ màu đậm nào.

Do tính năng tô sáng cú pháp này nên rất dễ dàng soạn thảo các biểu thức chính xác, ngay cả những biểu thức phức tạp. Mặc dù nhóm LimeSurvey có kế hoạch cố gắng xây dựng GUI Trình tạo biểu thức nhưng bạn có thể sử dụng tính năng tô sáng cú pháp hiện có để nhanh chóng xác định và sửa lỗi chính tả. Bạn cũng có thể sử dụng chú giải công cụ để xác thực tính chính xác của biểu thức (ví dụ: xác nhận rằng bạn đã chọn (các) biến mong muốn).

Trong mỗi ví dụ, có ba cột:

  1. Source - đây là văn bản thô mà bạn sẽ nhập vào trường câu hỏi LimeSurvey
  2. Pretty Print - đây là văn bản tương đương được đánh dấu bằng cú pháp với những gì bạn đã nhập
    • Lưu ý rằng Biểu thức được hiển thị với nền màu nâu vàng, nhưng không được bao quanh bởi dấu ngoặc nhọn trong phần tô sáng này.
    • Vì EM hỗ trợ thay thế đệ quy nên việc hiển thị dấu ngoặc nhọn trong phần tô sáng sẽ gây ra lỗi cú pháp
  3. Result - đây là đầu ra được tạo ra khi EM xử lý nguồn
    • Mọi thứ có thể được thay thế chính xác là
    • Các biểu thức có lỗi được hiển thị nội dòng, kèm theo cú pháp tô sáng. Các lỗi được bao quanh bởi một hộp có dòng kẻ màu đỏ.


Cú pháp đúng

Bạn có thể tìm thấy các ví dụ bên dưới về cú pháp thích hợp:

  1. Values: cho biết các biến đã biết được mã hóa màu tùy theo việc có được đặt trên trang hiện tại hay không. INSERTANS kiểu cũ:xxxx có kiểu mã hóa màu riêng
  2. Thuộc tính câu hỏi: cho biết ký hiệu dấu chấm có thể truy cập một số thuộc tính của câu hỏi
  3. Math: cho biết các phép tính cơ bản và phức tạp đều được hỗ trợ
  4. TextProcessing: hiển thị một số hàm xử lý văn bản có sẵn
  5. Dates: hiển thị hai trong số các hàm liên quan đến ngày có sẵn
  6. Conditional: hiển thị cách sử dụng hàm if(). Các lựa chọn có thể được lồng vào nhau.
  7. Đoạn phù hợp: bạn hoàn toàn có thể tùy chỉnh một báo cáo dựa trên các giá trị trước đó
  8. EM xử lý trong chuỗi: cho thấy rằng nó có thể thực hiện thay thế trong chuỗi. Ví dụ này tạo ra một tên hình ảnh phù hợp.
  9. EM không xử lý các dấu ngoặc nhọn như sau: cho thấy rằng nếu các dấu ngoặc nhọn được thoát hoặc có khoảng trắng giữa biểu thức và dấu ngoặc nhọn, ES sẽ bỏ qua biểu thức.



Cú pháp EM có lỗi

Dưới đây là ví dụ về các lỗi thường gặp khi gõ biểu thức ES. Lưu ý rằng chú giải công cụ cung cấp thông tin bổ sung.

  1. Javascript nội tuyến đã quên thêm dấu cách sau dấu ngoặc nhọn
    • Vì "document.write" xuất hiện ngay sau dấu ngoặc nhọn nên EM cho rằng đó là một biểu thức và màu đỏ- hộp "tài liệu" và "ghi" vì chúng lần lượt là các biến và hàm không xác định
  2. Các biến, hàm và toán tử không xác định/sai chính tả
    • Ở đây chúng ta quên rằng chúng ta đang sử dụng tên biến "giới tính" thay vì " sex”, nhưng EM đã mắc phải lỗi đó. Nó cũng đánh dấu vào ô màu đỏ '++', vì đó không phải là toán tử được hỗ trợ.
  3. Cảnh báo nếu sử dụng = thay vì eq hoặc thực hiện các phép gán giá trị
    • Lưu ý rằng '=' và '+=' có chữ màu đỏ thay vì màu đen. Nếu bạn di chuột qua chúng, bạn sẽ thấy cảnh báo rằng bạn đang gán một giá trị.
  4. Sai số lượng đối số cho hàm
    • if() nhận 3 đối số, nhưng nó đã được cho 4, vì vậy việc di chuột trên "if" được đóng hộp màu đỏ sẽ giải thích lỗi và hiển thị cú pháp được hỗ trợ
    • sum() nhận số lượng đối số không giới hạn, nhưng chúng tôi có dấu phẩy ở cuối trước dấu ngoặc đơn đóng, vì vậy nó được đóng hộp màu đỏ
  5. Dấu ngoặc đơn không khớp
    • Đây là một trong những lỗi phổ biến nhất khi viết biểu thức.
    • Điều này cho thấy hai ví dụ về việc thiếu dấu ngoặc đơn đóng và một ví dụ về việc có quá nhiều dấu ngoặc đơn đóng.
#Cú pháp không được hỗ trợ
    • Nếu bạn sử dụng một toán tử hoặc dấu câu mà ES không hỗ trợ, nó sẽ đánh dấu màu đỏ.
  1. Bài tập không hợp lệ
    • Một số biến là readWrite và có thể thay đổi giá trị của chúng. Một số khác ở chế độ chỉ đọc.
    • Nếu bạn cố gắng thay đổi giá trị của biến chỉ đọc, bạn không thể. EM sẽ đánh dấu lần thử vào hộp đỏ.
    • Nếu bạn cố gán một giá trị cho một phương trình hoặc một chuỗi, bạn cũng sẽ gặp lỗi



Ví dụ "trực tiếp" về Đánh dấu cú pháp bằng chú giải công cụ đang hoạt động

Nguồn In đẹp Kết quả
Dưới đây là ví dụ về cú pháp OK với chú giải công cụ
Xin chào {if(gender=='M','Mr.','Mrs.')} {họ}, bây giờ là {date('g:i a',time())}. Bạn có biết con cái và thú cưng {sum(numPets,numKids)} của bạn ở đâu không?
Dưới đây là ví dụ về cú pháp OK với chú giải công cụ
Xin chào nếu họ ( giới tính == ' M' , 'Mr.' , 'Bà' ) thì bây giờ là ngày ( 'g:i a' , thời gian ()) . Bạn có biết tổng số trẻ em và thú cưng của bạn ( numPets , numKids ) ở đâu không?
Dưới đây là ví dụ về cú pháp OK với chú giải công cụ
Xin chào ông Smith , bây giờ là 6:07 sáng. Bạn có biết 3 đứa con và thú cưng của mình ở đâu không?
Dưới đây là các lỗi thường gặp để bạn có thể xem chú giải công cụ
Các biến được sử dụng trước khi chúng được khai báo: {notSetYet}
Chức năng không xác định: {iff(numPets>numKids,1,2)}
Biến không xác định: {sum(age,num_pets,numKids)}
Sai # tham số: {sprintf()},{if(1,2)},{date()}
Chỉ định các biến chỉ đọc:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Dấu ngoặc đơn không cân bằng: {pow(3,4},{(pow(3,4)},{pow(3,4))}
Dưới đây là các lỗi thường gặp để bạn có thể xem chú giải công cụ
Các biến được sử dụng trước khi chúng được khai báo: notSetYet
Chức năng không xác định: iff ( numPets > numKids ,1,2)
Biến không xác định: tổng ( age , num_pets , numKids )
Sai # tham số: sprintf () , if (1,2) , date ()
Chỉ định các biến chỉ đọc: TOKEN:ATTRIBUTE_1 += 10 , name = 'Sally'
Dấu ngoặc đơn không cân bằng: pow (3,4 , ( pow (3,4) , pow (3,4) )
Dưới đây là các lỗi thường gặp để bạn có thể xem chú giải công cụ
Các biến được sử dụng trước khi chúng được khai báo: notSetYet
Chức năng không xác định: iff ( numPets > numKids ,1,2)
Biến không xác định: tổng ( age , num_pets , numKids )
Sai # tham số: sprintf () , if (1,2) , date ()
Chỉ định các biến chỉ đọc: TOKEN:ATTRIBUTE_1 += 10 , name = 'Sally'
Dấu ngoặc đơn không cân bằng: pow (3,4 , ( pow (3,4) , pow (3,4) )
Đây là một số cú pháp không được hỗ trợ
Không hỗ trợ cho '++', '--', '%',';': {min(++age, --age,age % 2);}
Cũng không phải '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}}
Cũng không phải mảng: {name[2], name['mine']}
Đây là một số cú pháp không được hỗ trợ
Không hỗ trợ cho '++', '--', '%',';': min ( ++ age , -- age , age % 2) ;
Cũng không phải '|', '&', '^': ( tổng (2 | 3,3 & 4,5 ^ 6) }
Cũng không phải mảng: tên [ 2 ] , tên [ 'của tôi' ]
Đây là một số cú pháp không được hỗ trợ
Không hỗ trợ cho '++', '--', '%',';': min ( ++ age , -- age , age % 2) ;
Cũng không phải '|', '&', '^': ( tổng (2 | 3,3 & 4,5 ^ 6) }
Cũng không phải mảng: tên [ 2 ] , tên [ 'của tôi' ]


Ví dụ về may đo (ví dụ: mở rộng {INSERTANS:xxx})

"Kính gửi {Mr}/{Mrs} Smith..."

Sử dụng hàm if() để chọn có điều kiện xem có hiển thị 'Mr.' hay không hoặc 'Bà.'.

Cú pháp là if(test,do_if_true,do_if_false).

# Câu hỏi Loại
1 giới tính Giới tính của bạn là gì? Giới tính
|example1 Kính gửi {if(gender=='M','Mr.','Mrs.')} Smith, ... Văn bản dài miễn phí



Như có thể thấy bên dưới, "Ông" và "Bà" được điều chỉnh theo những gì người trả lời chọn làm câu trả lời cho câu hỏi "giới tính".



"Kính gửi {Mr}/{Mrs} Smith..." trong email mời

Bạn có thể sử dụng ví dụ trên trong email mời bằng cách sử dụng các thuộc tính từ bảng mã thông báo. Sử dụng hàm if() để chọn xem 'Mr.' hoặc 'Bà.' nên được sử dụng trong email.


Cú pháp là "if(test,do_if_true,do_if_false)".

# thuộc tính value
1 Họ Smith
2 Địa chỉ email test@test. com
3 ATTRIBUTE_2 M


Nội dung trong email mời:

Dear {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

you have been invited to participate in a survey:

https:/...



email View:



Calculation / Assessment Examples

Calculate assessment values at runtime and store the results in the survey data

This example uses all of EM's features, including Relevance, Tailoring, and the Equation question type.

It also shows that all of them are JavaScript-enabled, so if you have these features on a page, it will dynamically change as people set and change their answers.

# Code Question Type Relevance
1 numKids How many children do you have? Numerical input 1
2 kid1 How old is your first child? Numerical input numKids >= 1
3 kid2 How old is your second child? Numerical input numKids >= 2
4 kid3 How old is your third child? Numerical input numKids >= 3
5 kid4 How old is your fourth child? Numerical input numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} Equation 1
7 kidSummary You said that you have {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','The sum of ages of your first ',min(numKids,4),' kids is ',sumKidAges,'.'),' ')} Text display 1


To download this example, please click on the following link: Assessments_survey_example.


You may find below screenshots of representative questions. As you can see, EM syntax-highlights all fields that might contain tailoring. Here, you see examples of syntax-highlighting Relevance, the Equation question type, and substitutions within a question. You can also use substitutions within Help, Group header display, Welcome message, and End message.

In the next example, since the relevance is {numKids >= 2), the question will only be visible if the respondent reports that she has at least two children.



Below, you may observe that each variable has the .NAOK suffix attached to it. This is because of how EM supports cascading relevance. If you did not have .NAOK, then the sum would only be computed if the person said she has 4 children (e.g., if all of the variables are relevant). The usage of .NAOK means that we want to compute the sum even if all or some of the variables are irrelevant (e.g., "Not Applicable" (NA) is alright (OK)).

However, the .NAOK attribute only affects whether variables are passed into EM. If the respondent initially says she has 3 children, and enters ages for each, then changes her mind and says she has 2, we don't want to see the sum of the 3 entered values - since the third child is "not applicable" in our case anymore:



Each separate Expression is color coded with a tan background. As you can see, there are three separate Expressions here. The last one contains a message that is conditionally shown only if the person has more than one child.



Now, here are screenshots of the survey in action.

When you first visit the page, you see this. Note that is says "You have 0 children" instead of "You have 0 child".



If I change the value for number of children to 1, the display instantly changes to this, even though it is on the same page:



Now notice that the grammar is correct: "You have 1 child".

Now I change the value for number of children to 3, and the display instantly changes to this.

Notice that you now see the conditional message at the bottom:  "The sum of ages of your first 3 kids is 0.".



Now I'll enter ages for my imaginary children, and I get this display, summing up their ages:



Again, the score and display updates instantly as I enter the values, so you can use this to show a running total of an Assessment Score.


Now, I change the value for the number of children to 2. The display has changed to this:



Notice that although I had entered a value of 5.5 for the third child, the report now only sums the values of my first 2 children.

The reason for this is that the 3rd value is now irrelevant, and irrelevant values are actively ignored by EM.

If I were to change the number of kids back to 3, I would see the value of 5.5 I entered again. So, I don't lose any information I enter on the page.

However, if I navigate to the Next or Previous page, all irrelevant values will be NULLed out in the session and in the database. So, if I were to keep the value at 2, go to the next page, and then come back and state that I actually have 3 kids, I would no longer see the age of 5.5.


Enter data and see a dynamically changing report of what was entered on the same page

This example presents the Tailoring process within LimeSurvey.

To download this example, click on the following link: Dynamic changes survey example.

Here is what the page looks like initially. You only see the question asking what city you live in:



Once you start to enter an answer, the tailoring process is also starting:


As you enter answers, the table at the bottom of the page is updated to show the answer codes and values of your responses.


Common Debugging Examples

Nested if() Statements (Conditional Logic)

EM supports the function "if(test,do_if_true,do_if_false)" so that you can perform conditional logic or tailoring. This function can be nested to do the equivalent of "if { } else if { } else {  }". EM will let you know if the parentheses are not balanced (e.g., you are missing a closing right parenthesis), or if you have any extra right parentheses. You should try to count the parentheses as you compose long nested if statements, save it, check for syntax errors, and fix them if any are found. Let's check together the below example.

The group of questions used below can be accessed from here: Tailoring survey example.lsg


First, with nothing entered, you just see "Hello."



If you enter a name, it says, "Hello {name}."



If you enter an age, you get a tailored message, depending upon whether you are a pre-school-age child or not:



School aged, teenager, or adult. Here is a  teenager who wants to be anonymous:



Here is the logic file of the group. As you can see in the "if-based" question, there are nested if statements based upon the person's age.



When you are originally editing this question, it is likely that at some point, you will have the wrong number of parentheses. Here's what happens if you have too few:



If you hover over the word "if", which is surrounded by a red box, it says "Parentheses not balanced". In this case, there should be four closing parentheses after "already an adult!", but there are only three.

If, on the other hand, you have an extra right parenthesis, it will be surrounded by a red box, like this:



When you are actually editing the question, the question looks like this: