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:15, 15 January 2024 by Maren.fritz (talk | contribs) (Created page with "Khi bạn truy cập trang lần đầu tiên, bạn sẽ thấy điều này. Lưu ý rằng "Bạn có 0 '''con'''" thay vì "Bạn có 0 '''con'''".")


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:

Kính gửi {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

bạn đã được mời tham gia vào một cuộc khảo sát:

https:/...



email Xem:



Ví dụ về tính toán/đánh giá

Tính toán giá trị đánh giá trong thời gian chạy và lưu trữ kết quả vào dữ liệu khảo sát

Ví dụ này sử dụng tất cả các tính năng của EM, bao gồm loại câu hỏi Mức độ liên quan, Điều chỉnh và Phương trình.

Nó cũng cho thấy rằng tất cả chúng đều hỗ trợ JavaScript, vì vậy nếu bạn có những tính năng này trên một trang, nó sẽ tự động thay đổi khi mọi người đặt và thay đổi câu trả lời của họ.

# Câu hỏi Loại Mức độ liên quan
1 numKids Bạn có bao nhiêu đứa con? Đầu vào số - 2 kid1 Con đầu lòng của bạn bao nhiêu tuổi? Nhập số numKids >= 1
3 kid2 Con thứ hai của bạn bao nhiêu tuổi? child? Đầu vào số numKids >= 2
4 kid3 Con thứ ba của bạn bao nhiêu tuổi? Đầu vào số numKids >= 3
6 sumKidAges {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} Equation 1
7 kidSummary Bạn nói rằng bạn có {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','Tổng số tuổi của những đứa trẻ ',min(numKids,4),' đầu tiên của bạn là ',sumKidAges,'.'),' ')} |1


Để tải xuống ví dụ này, vui lòng nhấp vào liên kết sau: Assessments_survey_example.


Bạn có thể tìm thấy ảnh chụp màn hình bên dưới của các câu hỏi đại diện. Như bạn có thể thấy, cú pháp EM làm nổi bật tất cả các trường có thể chứa thông tin chỉnh sửa. Tại đây, bạn sẽ thấy các ví dụ về mức độ liên quan làm nổi bật cú pháp, loại câu hỏi Phương trình và các thay thế trong một câu hỏi. Bạn cũng có thể sử dụng các thay thế trong Trợ giúp, Hiển thị tiêu đề nhóm, Thông báo chào mừng và Thông báo kết thúc.

Trong ví dụ tiếp theo, vì mức độ liên quan là {numKids >= 2), nên câu hỏi sẽ chỉ hiển thị nếu người trả lời cho biết cô ấy có ít nhất hai con.



Dưới đây, bạn có thể quan sát thấy mỗi biến đều có hậu tố .NAOK được đính kèm. Điều này là do cách EM hỗ trợ mức độ liên quan theo tầng. Nếu bạn không có .NAOK thì tổng sẽ chỉ được tính nếu người đó nói rằng cô ấy có 4 người con (ví dụ: nếu tất cả các biến đều có liên quan). Việc sử dụng .NAOK có nghĩa là chúng tôi muốn tính tổng ngay cả khi tất cả hoặc một số biến không liên quan (ví dụ: "Không áp dụng" (NA) vẫn ổn (OK)).

Tuy nhiên, thuộc tính .NAOK chỉ ảnh hưởng đến việc các biến có được truyền vào EM hay không. Nếu người trả lời ban đầu nói rằng cô ấy có 3 đứa con và nhập tuổi cho mỗi đứa con, sau đó đổi ý và nói rằng cô ấy có 2 đứa con, thì chúng tôi không muốn xem tổng của 3 giá trị đã nhập - vì đứa con thứ ba "không áp dụng được" trong trường hợp của chúng tôi nữa:



Mỗi Biểu thức riêng biệt được mã hóa bằng màu với nền màu nâu. Như bạn có thể thấy, có ba Biểu thức riêng biệt ở đây. Cái cuối cùng chứa một thông báo chỉ được hiển thị có điều kiện nếu người đó có nhiều hơn một đứa con.



Bây giờ, đây là ảnh chụp màn hình của cuộc khảo sát đang diễn ra.

Khi bạn truy cập trang lần đầu tiên, bạn sẽ thấy điều này. Lưu ý rằng "Bạn có 0 con" thay vì "Bạn có 0 con".



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: