Actions

Cách thực hiện ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript How-tos and the translation is 100% complete.


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".



Nếu tôi thay đổi giá trị của số lượng trẻ em thành 1, màn hình sẽ ngay lập tức thay đổi thành giá trị này, ngay cả khi nó ở trên cùng một trang:



Bây giờ chú ý rằng ngữ pháp đã đúng: "Bạn có 1 con".

Bây giờ tôi thay đổi giá trị của số trẻ em thành 3 và màn hình ngay lập tức thay đổi thành giá trị này.

Lưu ý rằng bây giờ bạn thấy thông báo có điều kiện ở phía dưới: "Tổng số tuổi của 3 đứa con đầu lòng của bạn là 0".



Bây giờ tôi sẽ nhập độ tuổi cho những đứa trẻ tưởng tượng của mình và tôi nhận được màn hình này, tổng hợp độ tuổi của chúng:



Một lần nữa, điểm số và màn hình hiển thị cập nhật ngay lập tức khi tôi nhập các giá trị, vì vậy bạn có thể sử dụng điểm này để hiển thị tổng điểm Đánh giá hiện tại.


Bây giờ, tôi thay đổi giá trị của số lượng trẻ em thành 2. Màn hình đã thay đổi như sau:



Lưu ý rằng mặc dù tôi đã nhập giá trị 5,5 cho đứa con thứ ba nhưng báo cáo hiện chỉ tính tổng giá trị của 2 đứa con đầu tiên của tôi.

Lý do cho điều này là giá trị thứ 3 hiện không còn phù hợp và các giá trị không liên quan sẽ bị EM chủ động bỏ qua.

Nếu tôi thay đổi số lượng trẻ em về 3, tôi sẽ thấy giá trị 5,5 mà tôi đã nhập lại. Vì vậy, tôi không bị mất bất kỳ thông tin nào tôi nhập trên trang.

Tuy nhiên, nếu tôi điều hướng đến trang Tiếp theo hoặc Trước đó, tất cả các giá trị không liên quan sẽ bị loại bỏ trong phiên và trong cơ sở dữ liệu. Vì vậy, nếu tôi giữ giá trị ở mức 2, hãy chuyển sang trang tiếp theo, sau đó quay lại và nói rằng tôi thực sự có 3 đứa con, tôi sẽ không còn thấy số 5,5 nữa.


Nhập dữ liệu và xem báo cáo thay đổi linh hoạt về nội dung đã nhập trên cùng một trang

Ví dụ này trình bày quy trình May đo trong LimeSurvey.

Để tải xuống ví dụ này, hãy nhấp vào liên kết sau: Ví dụ khảo sát về thay đổi động.

Đây là giao diện ban đầu của trang. Bạn chỉ thấy câu hỏi hỏi bạn sống ở thành phố nào:



Khi bạn bắt đầu nhập câu trả lời, quá trình điều chỉnh cũng bắt đầu:

Tập tin:em-on_page_report-usage-2.jpg


Khi bạn nhập câu trả lời, bảng ở cuối trang sẽ được cập nhật để hiển thị mã câu trả lời và giá trị câu trả lời của bạn.


Tập tin:em-on_page_report-usage-3.jpg

Các ví dụ gỡ lỗi phổ biến

Câu lệnh if() lồng nhau (Logic có điều kiện)

EM hỗ trợ chức năng "if(test,do_if_true,do_if_false)" để bạn có thể thực hiện logic điều kiện hoặc điều chỉnh. Hàm này có thể được lồng vào nhau để thực hiện tương đương với "if { } else if { } else { }". EM sẽ cho bạn biết nếu dấu ngoặc đơn không cân bằng (ví dụ: bạn thiếu dấu ngoặc đơn đóng bên phải) hoặc nếu bạn có thêm bất kỳ dấu ngoặc đơn bên phải nào. Bạn nên cố gắng đếm các dấu ngoặc đơn khi soạn các câu lệnh if lồng nhau dài, lưu nó, kiểm tra lỗi cú pháp và sửa chúng nếu tìm thấy. Chúng ta hãy cùng nhau kiểm tra ví dụ dưới đây.

Bạn có thể truy cập nhóm câu hỏi được sử dụng bên dưới từ đây: Mayoring Survey example.lsg


Đầu tiên, không cần nhập gì, bạn chỉ thấy "Xin chào".



Nếu bạn nhập tên, nó sẽ hiển thị "Xin chào {name}."



Nếu bạn nhập độ tuổi, bạn sẽ nhận được thông báo phù hợp, tùy thuộc vào việc bạn có phải là trẻ ở độ tuổi mẫu giáo hay không:



Ở độ tuổi đi học, thiếu niên hoặc người lớn. Đây là một thiếu niên muốn giấu tên:



Đây là tập tin logic của nhóm. Như bạn có thể thấy trong câu hỏi "if-based", có các câu lệnh if lồng nhau dựa trên tuổi của người đó.


Tập tin:em-nested-if-logic-file.jpg


Khi bạn chỉnh sửa câu hỏi này ban đầu, rất có thể tại một thời điểm nào đó, bạn sẽ sử dụng sai số dấu ngoặc đơn. Đây là những gì sẽ xảy ra nếu bạn có quá ít:



Nếu bạn di chuột qua từ "if" được bao quanh bởi hộp màu đỏ, nó sẽ báo "Dấu ngoặc đơn không cân bằng". Trong trường hợp này, cần có bốn dấu ngoặc đơn đóng sau "đã là người lớn!", nhưng chỉ có ba dấu ngoặc đơn.

Mặt khác, nếu bạn có thêm dấu ngoặc đơn bên phải, nó sẽ được bao quanh bởi một hộp màu đỏ, như thế này:



Khi bạn thực sự chỉnh sửa câu hỏi, câu hỏi sẽ trông như thế này: