x

Ana bölümler

  1. LimeSurvey Cloud ve LimeSurvey CE karşılaştırması
  2. Hızlı başlangıç kılavuzu - LimeSurvey 3.0+
  3. Kurulum - LimeSurvey CE
  4. İyi bir anket nasıl tasarlanır (kılavuz)
  5. Başlarken
  6. LimeSurvey'i Yönetme
  7. Anketler - giriş
  8. Anket ayarları
  9. Anket menüsü
  10. Anket yapısı
  11. Sorular - giriş
  12. Soru grupları - giriş
  13. Anketler - yönetim
  14. Anket araç çubuğu seçenekleri
  15. Çok dilli anket
  16. ExpressionScript Motoru - Hızlı başlangıç kılavuzu
  17. Kategorize edilmemiş ve gelişmiş özellikler
  18. Genel SSS
  19. Sorun giderme
  20. Geçici çözümler
  21. Lisans
  22. Sürüm değişiklik günlüğü
  23. Eklentiler
 Actions

ExpressionScript - Sunum

From LimeSurvey Manual

Bu sayfa makine çevirisiyle çevrilmiş olabilir ve hatalar içerebilir. İngilizce orijinali göster · Bu çeviriyi iyileştir
This page is a translated version of the page ExpressionScript - Presentation and the translation is 100% complete.


Giriş

LimeSurvey, daha karmaşık dallanma, değerlendirme, doğrulama ve uyarlama işlemlerini destekleyebilmek için İfade betiğini kullanır. İfade betiği, LimeSurvey'in arka planda Değiştirmeleri, Koşulları ve Değerlendirmeleri yönetme biçiminin yerini alır. Ayrıca çalışma anındaki veritabanı okumalarının çoğunu ortadan kaldırdığı için işlem hızını önemli ölçüde artırır. İfade betiği Dr. Thomas White (TMSWhite) tarafından geliştirilmiştir.


Temel tanımlar

  1. İfade: Süslü parantezler arasında yer alan her şey:
    • Açılış parantezinden hemen sonra ya da kapanış süslü parantezinden hemen önce boşluk bulunmadığı sürece geçerlidir.
    • İfadenin içeriği EM tarafından değerlendirilir; bu nedenle matematiksel formüller, işlevler ile karmaşık dizgi ve tarih işlemleri içerebilir.
  2. Uyarlama: Bazen "piping" olarak da adlandırılır. Metni koşullu olarak değiştirme işlemidir:
    • Tüm 'değiştirme alanlarına', katılımcı verilerine ve yanıt verilerine erişebilirsiniz.
    • Ayrıca sorulara, yanıtlara ve bunların özelliklerine daha kolay erişebilirsiniz.
  3. İlinti denklemi: Sorunun görünürlüğünü denetleyen yeni bir soru özniteliği:
    • Bir ilinti denklemi varsa soru yalnızca ilinti doğru olarak değerlendirilirse gösterilir.
    • Dahili olarak tüm array_filter ve array_filter_exclude komutları alt soru düzeyinde ilintiye dönüşür.
  4. SGQA (değişkenlerin geçmişte adlandırılma biçimi):
    • Survey-Group-Question-Answer (Anket-Grup-Soru-Yanıt) anlamına gelir.
    • SGQA değişken adları 123X5X382X971 gibi görünür ve alt soru sonekleri içerebilir.
    • Bu değişken adları, temelde yer alan S/Q/G/A veritabanı kodlarına özgüdür; bu nedenle sık sık değiştirilmeleri gerekir.
  5. Denklem soru türü: Hesaplamaları veya raporları veritabanına kaydeden yeni bir soru türü:
    • Boilerplate sorusuna benzer, ancak "Bu soru her zaman gizlensin" seçeneğini ayarlasanız bile içeriği veritabanına kaydedilir.
  6. Soru kodu: EM için tercih edilen değişken adıdır:
    • Sorunun amacını belirten açıklayıcı bir ad olabilir; bu da karmaşık mantığın okunmasını kolaylaştırır.
    • Geçerli soru kodları bir rakamla BAŞLAMAMALIDIR; bu nedenle soru kodunu soruları numaralandırmak için kullanırken yalnızca "q1", "q1a" veya "g1q2" gibi kodlar kullanın.
    • Verileri SPSS veya R'ye dışa aktarırsanız değişken adı bu olur. Bu nedenle istatistiksel analiz yapıyorsanız yalnızca benzersiz soru kodları oluşturmanız gerekir.


İfade betiğini kullanmak zorunda mıyım?

Kısa cevap "hayır". Ancak bu, büyük ölçüde oluşturmak istediğiniz anketin karmaşıklığına bağlıdır.

Örneğin Koşul düzenleyicisi, anketinizin sorularına uygulanabilecek bazı temel ifadeleri kapsar. Ancak Koşul düzenleyicisi sınırlıdır. İfade betiğinin kullanılmasının nedeni budur; özelleştirme olanaklarının kapsamını genişletir.


Koşulları ve İlinti denklemlerini birlikte kullanabilir miyim?

Evet. Bazı sorular için Koşul düzenleyicisini, diğerleri için İlinti denklemlerini kullanabilirsiniz.

Aynı soruda hem koşullar hem de ifadeler tanımlayamazsınız! Bir koşul tanımlandığında, ilinti denklemi alanına yazılmış olan her ifadenin yerini alır. Ayrıca İlinti denklemi alanı artık el ile düzenlenemez.

Yine de bir soru içinde hem ifadeleri hem de koşulları kullanmanın bir yolu vardır. Yukarıda belirtildiği gibi bir koşul, ilinti denklemi alanının yerini alır. Bu gerçekleştikten sonra yeni oluşturulan denkleme bakın ve bir metin düzenleyicisine kopyalayın. Yeni oluşturulan koşulu Koşul düzenleyicisinden silin, ardından metin düzenleyicisi dosyanızdaki koşul tabanlı ifadeleri kullanmak istediğiniz diğer ifadelerle birlikte ekleyerek soruyu düzenleyin.


Koşullar ile İlinti arasında nasıl seçim yapmalıyım?

Her bir biçemin artı ve eksi yönlerinin listesi aşağıdadır:

Biçem Artıları Eksileri
Koşullar 1. Basit koşullar oluşturmak için güzel bir grafik arayüz.
2. Grafik arayüz iyi belgelenmiştir ve destek ekibi tarafından iyi bilinir
1. Yalnızca basit karşılaştırmaları destekler ve "VE" ile "YA DA" koşullarını iyi işlemez.
2. Basamaklı koşullar düzensiz çalışır
3. Yavaştır - veritabanını yoğun kullanır; uzun anketleri yavaşlatabilir.
4. Koşulların yeniden yüklenmesiyle ilgili bazı sorunlar bildirilmiştir.
5. Düzinelerce, yüzlerce veya binlerce soru olduğunda grafik arayüz iyi ölçeklenmez.
6. SGQA adlarını kullanmak zorunda olduğundan kağıt tabanlı anketleri dönüştürmek yavaş olabilir.
7. Karmaşık dallanma için gereken mantığı özel olarak kodlamak çoğunlukla bir programcı gerektirir.
İlinti 1. 80'den fazla işlev ve matematik/dizgi işleci dahil çok karmaşık mantığı destekler.
2. Basamaklı mantık için mükemmel destek.
3. Hızlıdır - ek veritabanı çağrısı yoktur, 1000'den fazla soruluk anketleri destekler.
4. SGQA kodları gerektirmediği için mantığın yeniden yüklenmesinde sorun yoktur.
5. Sözdizimi vurgulama, 1000'den fazla soruluk anketlere ölçeklenir.
6. Mevcut kağıt tabanlı anketleri bilgisayar ortamına aktarmak isteyen gruplar için kolay ve hızlıdır.
7. Yarı yapılandırılmış görüşmeleri ve epidemiyolojik anketleri programcıya ihtiyaç duymadan kolayca destekler.
1. Basit koşullar için grafik arayüz yoktur - bunun yerine sözdizimi vurgulamayı kullanır.


Not:
  • İhtiyaçlarınıza en uygun olanı kullanmanızı öneririz.
  • EM özellikleri hakkında daha ayrıntılı bilgi için aşağıdaki bağlantıya tıklayın.

Başlarken

EM ile başlamanın en iyi yolu şunlardır:

Terminoloji

Bu sözcükler EM'nin yeteneklerini tanımlamak için yaygın olarak kullanılır:

  • İlinti tabanlı dallanma - bir soru ilintiliyse sorulur, değilse sorulmaz (ör. görünmez yapılır ve veritabanında NULL olarak işaretlenir). İlinti alanlarını soru düzenleyici panelinde ve soru grubu düzenleyici panelinde bulabilirsiniz. İkincisi, aynı koşulu her soruya kopyalamadan bir grubun tamamına bir dizi koşul uygulamak ve/veya grup ve soru düzeyindeki koşullu mantığı birleştirmek için kullanılır.
  • Uyarlama - Hangi soruların sorulacağını belirledikten sonra uyarlama (bazen piping olarak adlandırılır) sorunun nasıl sorulacağını belirler. Bu, yalnızca basit yer değiştirmeyi ({TOKEN:FIRSTNAME} gibi) değil, aynı zamanda deneklerinizin cinsiyetine veya sayısına göre fiil çekimini ve isim hâllerini de desteklemenizi sağlar. Ayrıca bir anket katılımcısına ilettiğiniz iletiyi, diğer soruları yanıtlayıp yanıtlamadığına (veya nasıl yanıtladığına) göre değiştirmenize olanak tanır.
  • Denklemler - EM, bir İfadenin sonucunu saklayan Denklem adlı yeni bir soru türü ekler. Denklem sonuçları, sayfada gizleseniz bile hesaplanır ve veritabanına yazılır. Bu nedenle gizli puanlama hesaplamaları, karmaşık denklemlere dayalı gezinme, değerlendirmeler ve veritabanında oluşturulup saklanacak raporlar için kullanılırlar.


İlinti ve Basamaklı İlinti

Artık her soru türünün, sorunun görüntülenip görüntülenmeyeceğini denetleyen bir İlinti seçeneği vardır. EM, her İlinti denklemini ankette göründükleri sırayla işler. İfade doğruysa (veya eski anketleri desteklemek için eksikse) soru görüntülenir. İlintili değilse soru gizlenir ve değeri veritabanında NULL yapılır. Bir grupta ilintili soru yoksa grubun tamamı atlanır.

Ayrıca bir ifade içindeki değişkenlerden herhangi biri ilintisizse ifade her zaman yanlış olarak değerlendirilir. Bu, her soru için çok uzun İlinti denklemleri yazmak zorunda kalmamanız için Basamaklı ilinti sağlar.

Q1-Q5 olmak üzere beş sorunuz olduğunu ve Q2'yi yalnızca Q1 yanıtlandıysa, Q3'ü Q2 yanıtlandıysa vb. göstermek istediğinizi varsayalım. İlinti denklemleri şöyle olabilir:

Soru kodu İlinti Soru
Q1 1 Adınız nedir?
Q2 Q1 {Q1}, kaç yaşındasınız?
Q3 Q2 Demek {Q2} yaşındasınız. Evli misiniz?
Q4 Q3 == "Y" {Q1}, ne kadar zamandır evlisiniz?
Q5 Q4 {Q1}, kaç çocuğunuz var?


Grup düzeyinde ilinti

ExpressionScript grup düzeyinde ilintiyi de destekler. Bu, döngü uygulamayı kolaylaştırır. Önce kaç varlık için takip yapılması gerektiğini belirleyerek (örneğin bir hanede kaç kişi yaşadığını sorarak veya uzun bir listeden hangi ürünleri beğendiklerini işaretlettirerek) en fazla 10 varlıktan (ürünler veya bir haneden kişiler gibi) bilgi toplamak istediğinizi varsayalım. Kaç varlık için takip gerektiğini öğrendikten sonra, 10 takip sorusu grubunun her biri için {count >= 1}, {count >=2}, ... {count >= 10} gibi grup düzeyinde ilinti kullanabilirsiniz. Her grubun içinde soru düzeyinde koşullu mantık bulundurabilirsiniz (ör. her denek için cinsiyete veya yaşa özgü takip soruları). Hangilerinin gösterileceğini belirlemek için soru ve grup düzeyindeki ilinti denklemleri VE ile birleştirilir.

Böyle bir örneği incelemek için şu anketi içe aktarın: Nüfus sayımı anketi örneği.

Aşağıdaki ekran görüntüsünde, yanıtlayıcı en az bir kişiyle daha birlikte yaşıyorsa Kişi 1 grubunun görüntülendiği (veya ilintili olduğu) görülebilir:



Uyarlama/Yönlendirme

Küme parantezleri içindeki her şey artık bir İfade olarak değerlendirilir (aşağıda açıklanan bir istisna dışında). İfadeler tüm LimeReplacementField alanlarına ve değişkenlere (çeşitli takma adlar aracılığıyla), tüm tipik denklem işleçlerine (matematiksel, mantıksal ve karşılaştırma) ve onlarca işleve (istemci tarafında bile dinamik olarak çalışan) erişebilir.

Bu denklemleri kullanarak şunlar gibi işlemler yapabilirsiniz:

  1. Önceki yanıtlara göre katılımcılara koşullu olarak uyarlanmış iletiler göstermek;
  2. Değerlendirmeler oluşturmak ve değerlendirme sonuçlarını göstermek (veya bu sonuçlara göre koşullu olarak dallanmak ya da ileti göstermek); bunların tümünü değerlendirme modülünü kullanmadan yapabilirsiniz;
  3. Sorular, yanıtlar ve raporlar içinde fiilleri çekimlemek ve adları çekimlemek;
  4. Anketin sonundaki "Yanıtlarınızı gösterin" sayfasından önce yanıt özetlerini göstermek.


Denklemler

Denklem adında yeni bir soru türü vardır. Bunu bir Yazı görünümü soru türü gibi düşünebilirsiniz; farkı, görüntülenen değerin veritabanında saklanmasıdır. Dolayısıyla Denklem sorusunun yazısı bir Değerlendirme hesaplaması içeriyorsa, bu değer veritabanında bir değişkende saklanır ve herkese açık ya da özel istatistiklerde görüntülenebilir.


Sözdizimi

Küme parantezleri içindeki her şey artık bir İfade olarak kabul edilir (bir istisna ile: başta veya sonda boşluk bulunmamalıdır - bu, ExpressionScript'in gömülü JavaScript kodunu işlemeye çalışmamasını sağlamak için gereklidir).

Açılış küme parantezinden sonra veya kapanış küme parantezinden önce boşluk olmadığı sürece ifadelerin birden çok satıra yayılmasında bir sakınca olmadığını unutmayın. Bu durum özellikle şu gibi iç içe "if()" deyimleri için yararlıdır:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
   if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
     if(PFTotals == -1,
       'Somewhat Soft',
       if(PFTotals == 0,
         'Moderate',
         if(PFTotals == 1,
           'Somewhat Hard',
           if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
               ''
             )
           )
         )
       )
     )
   )
 )
)}

ExpressionScript aşağıdaki sözdizimini destekler:

  • Tüm standart matematiksel işleçler (ör. +,-,*,/,!);
  • Tüm standart karşılaştırma işleçleri (ör. <,<=,==,!=,>,>=, ayrıca bunların eşdeğerleri: lt, le, eq, ne, gt, ge);
  • Parantezler (alt ifadeleri gruplayabilmeniz için);
  • Koşullu işleçler (ör. &&,| | ve bunların eşdeğerleri: and, or);
  • Tek ve çift tırnaklı dizgiler (her biri diğer tırnak türüyle dizgiler içerebilir);
  • Virgül işleci (bir ifade listesi oluşturup yalnızca son sonucu döndürebilirsiniz);
  • Atama işleci (=);
  • Önceden tanımlı değişkenler (sorulara, soru özniteliklerine ve yanıtlara başvurmak için) - ör. SGQA kodları;
  • Önceden tanımlı işlevler (şimdiden 80'den fazlası var ve daha fazlasını eklemek kolaydır).


İşleçler

EM sözdizimi normal işleç önceliğini izler:

Düzey İşleç(ler) Açıklama
1 () gruplama veya işlev çağırma için parantezler
2 ! - + tekli işleçler: değil, olumsuzlama, tekli artı
3 * / çarpma, bölme
4 + - toplama, çıkarma
5 < <= > >= lt le gt ge göreli karşılaştırmalar
6 == != eq ne eşitlik karşılaştırmaları
7 and mantıksal VE
8 or mantıksal VEYA
9 = atama işleci
10 , virgül işleci
JavaScript ve PHP arasındaki tutarlılık için artı işleci (+), her iki işlenen de sayısal ise toplama yapar, ancak her iki parça da sayısal olmayan dizgiyse birleştirme yapar. Bununla birlikte, amacınızı daha açık hale getirdiği için birleştirme işleminde "join()" işlevini kullanmanızı öneririz. Bu ayrıca dizgi beklerken sayı aldığınızda (veya tersi durumda) beklenmedik sonuçlardan kaçınmanızı sağlar.

Sayı ile dizgi uyuşmazlığı ve alfabetik/sayısal karşılaştırma uyarısı

Değerleri göreli veya eşitlik karşılaştırmalarıyla karşılaştırmak istediğinizde uyuşmazlıklara dikkat edin. Kullanıcı tarafından girilen (veya yanıt koduyla sağlanan) bir değer, açıkça bir sayıysa sayı olarak kullanılabilir. Değerlerden birini " ile çevrelerseniz metin/dizgi karşılaştırması yapılır. Sayı olarak karşılaştırmak istiyorsanız bir sayıyı asla " ile çevrelemeyin.

Örneğin Q0.NAOK > "50" ifadesi, Q0.NAOK değeri 9 olan sayısal bir soruysa doğrudur. Bunun nedeni, > işlecinin bunu sayısal değil alfabetik bir karşılaştırma olarak varsaymasıdır.

Tamsayı değerlerini karşılaştırdığınızdan emin olmak için intval(Q0.NAOK) > 50 kullanabilirsiniz. Q0.NAOK bir sayı değilse (boşsa veya bir dizgiyse) intval(Q0.NAOK) === 0 olacağını unutmayın. Dizgi değerlerini ("A" < "B") karşılaştırmak için doğrudan strcmp kullanın: strcmp(Q0.NAOK,"B") veya strcmp(Q0.NAOK,"A5").

Atama İşleci (=) kullanımı hakkında uyarı

Beklenmedik yan etkilere neden olabileceğinden, kesinlikle gerekli olmadıkça atama işleçlerini kullanmaktan kaçınmalısınız. Örneğin önceki bir yanıtın değerini değiştirirseniz, o soru ile geçerli soru arasındaki basamaklı uygunluk ve doğrulama mantığı yeniden hesaplanmaz; bu nedenle kendi içinde tutarsız verilerle karşılaşabilirsiniz (ör. yanıtlı kalan ama NULL yapılması gereken sorular veya atlanan ama yanıtlanması gereken sorular). Genel olarak, bir değişkene değer atamak istiyorsanız bir Denklem soru türü oluşturmalı ve değerini ayarlamak için bir ifade kullanmalısınız. Ancak insanların bu işlece gerçekten ihtiyaç duyduğu nadir durumlar olduğundan bunu kullanıma sunduk.

Bu işleç konusunda sizi uyarmaya yardımcı olmak için, sözdizimi denklemlerinde kırmızı yazı tipiyle gösterilir (böylece "==" ile karıştırmazsınız).



Atama işlecini kullanma

Atama işlecini kullanmak isteyebileceğiniz başlıca nedenler şunlardır:

  • Varsayılan değerleri kabul etmeyen bir soru için (kullanıcı arayüzünün yanıt seçeneklerinden birini seçmenize izin verdiği ancak denklem girmenize izin vermediği liste radyo gibi) varsayılan değeri denklemle ayarlamanız gerekir. Ancak dikkatli olun, çünkü LimeSurvey denkleminizin o soru için izin verilen yanıtlardan birini üretip üretmediğini doğrulayamaz;
  • Sonraki bir yanıta göre önceki bir sorunun yanıtını zorla değiştirmeniz gerekir;
  • vb...


  Dikkat : Atama yalnızca PHP'de yapılır. Bu, değerin aynı sayfada güncellenmediği, yalnızca kullanıcı sonraki sayfaya geçtiğinde güncellendiği anlamına gelir. Bu nedenle atama işleci aynı sayfada diğer ifadelerle birlikte kullanıldığında lütfen dikkatli olun.



Bu amaç için tüm ifade yöneticisi sistemini kullanabilirsiniz. Bunun için bir Denklem kullanmak daha iyidir.

Bazı örnekler:

  • Kısa yazı türündeki bir sorunun yanıtını küçük harfe ayarlamak : {QCODE=strtolower(QCODE.NAOK)};
  • Anketin başında bir dizi soru türü için varsayılan yanıt ayarlamak : {Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)};
  • Anketin başında bir dizi yazı soru türü için varsayılan yanıt ayarlamak : {Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)};
  • Koşullu bir yanıt ayarlamak : {QCODE=if(YesNo="Y","A1","")}.

XSS güvenliği

XSS etkinleştirildiğinde, ifade yöneticisi sisteminin bazı bölümleri kullanılamaz:

  • bir ifadede bir HTML etiketini başlatıp başka bir ifadede bitirmek;
  • bir URL içinde karmaşık bir ifade kullanmak.


Lütfen XSS'nin her LimeSurvey kurulumunda varsayılan olarak etkin olduğunu unutmayın.


Örnekler ve çözüm yolları:

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} ifadesi XSS güvenliği ile çalışmaz; bunun yerine şunu kullanabilirsiniz: {if(1,"<strong>information</strong>","information")};
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a> için bir denklem sorusu kullanabilirsiniz, çünkü tam bir soru kodu kullanmak sorun değildir: <a href="/script.php?value={EQUATION.NAOK}">next</a>.


Değişkenlere erişim

ExpressionScript, ihtiyaç duyabileceğiniz tüm değişkenlere salt okunur erişim sağlar. Geriye dönük uyumluluk için aşağıdakilere erişim sağlar:

Buna ek olarak ExpressionScript, değişkenlere Soru kodu ile (veri tabanındaki sorular tablosunda yer alan 'title' sütunu) başvurmanızı sağlar. Bu, verilerinizi SPSS, R veya SAS'a dışa aktardığınızda kullanılan değişken etiketidir. Örneğin ad, yaş ve cinsiyet ile ilgili sorularınız varsa, bu değişkenleri 12345X13X22, 12345X13X23 ve 12345X13X24 yerine name, age ve gender olarak adlandırabilirsiniz. Bu, denklemlerin herkes tarafından okunmasını ve mantığın doğrulanmasını kolaylaştırır; ayrıca grup veya soru numaralarını takip etmek zorunda kalmadan soruların yerini değiştirmenizi sağlar.

Önemli: Önceki sayfalarda veya sorularda yer alan değişkenlere başvurmak daha güvenlidir.

Ayrıca ExpressionScript, sorunun birçok özelliğine erişmenizi sağlar:


Sözdizimi Anlamı Örnek Örnek sonuç
Qcode Qcode.code için bir takma ad {implode(',',name,gender)} 'Tom','M'
Qcode.code soru ilintiliyse sorunun seçilen yanıt kodu (aksi halde boş), kodlanmış bir soru değilse metin değeri {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK Qcode ile aynı - NAOK ile ilgili açıklamaya bakın {gender.NAOK} 'M'
Qcode.value soru ilintiliyse sorunun değerlendirme değeri (aksi halde boş), kodlanmış bir soru değilse metin değeri {gender.value} '1'
Qcode.valueNAOK Qcode.value ile aynı - NAOK ile ilgili açıklamaya bakın {gender.valueNAOK} '1'
Qcode.shown sorunun görüntülenen değeri {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question sorunun yazısı {gender.question} 'What is your gender?'
Qcode.mandatory sorunun zorunlu olup olmadığı (Y/N) {gender.mandatory} 'N'
Qcode.qid dahili soru numarası (sıra numarası değil) {gender.qid} 337
Qcode.type soru türü {gender.type} 'G'
Qcode.jsName sorunun bu sayfada bildirilip bildirilmediğine bakılmaksızın doğru javascript adı {gender.jsName} 'java1827X3X337'
Qcode.gid dahili grup numarası (sıra numarası değil) {gender.gid} 3
Qcode.qseq sorunun 0'dan başlayan sıra numarası {gender.qseq} 5
Qcode.gseq grubun 0'dan başlayan sıra numarası {gender.gseq} 1
Qcode.relevanceStatus sorunun şu anda ilintili olup olmadığı (0 veya 1) {gender.relevanceStatus} 1
Qcode.relevance soru düzeyindeki ilinti denklemi {gender.relevance} '!is_empty(name)'
Qcode.grelevance grup düzeyindeki ilinti denklemi {gender.grelevance} 'num_children >= 5'
Qcode.sgqa bu sorunun SGQA değeri {gender.sgqa} '1827X3X337'


HTML düzenleyici sorunu

HTML düzenleyiciyi kullanırsanız bazı karakterler HTML varlıklarıyla değiştirilir.

  • & yerine &amp;
  • < yerine &lt;
  • > yerine &gt;

HTML düzenleyiciyi kullanıyorsanız şunları kullanmanız gerekir:

  • & için and
  • < için lt
  • <= için le
  • > için gt
  • >= için ge


İfadenizin içinde yer alan HTML kodlarını temizlemeniz önerilir. LimeSurvey HTML düzenleyicisini kullanıyorsanız, düzenleyicinin sol üst kısmında bulunan "Kaynak" düğmesine tıklayın ve ifadenizle ilgili olmayan tüm karakterleri silin (ör.

,
vb.).

Qcode değişken adlandırması

Soru türüne göre bir Qcode'un nasıl oluşturulacağına (ve bazı özelliklere nasıl erişileceğine) ilişkin ayrıntılar aşağıdadır. Genel olarak Qcode'lar şu şekilde oluşturulur:

 QuestionCode . '_' . SubQuestionID . '_' . ScaleId

Açıklama (comment) ve diğer (other) için karşılık gelen soru kodları sırasıyla QuestionCode_comment ve QuestionCode_other şeklindedir.

Tür Açıklama Kod Alt sorular Yanıt seçenekleri Ölçekler Yanıt kodu Görüntülenen yanıt İlinti
5 5 noktalı seçim, radyo düğmeleri Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Dizi (10 noktalı seçim), radyo düğmeleri Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Dizi (5 noktalı seçim), radyo düğmeleri Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Dizi (esnek etiketler), çift ölçek Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Dizi (esnek) - sütun biçimi Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Dizi (esnek) - satır biçimi Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Dizi (Artış/Aynı/Düşüş), radyo düğmeleri Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Dizi (çoklu esnek) 1'den 10'a Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Dizi (çoklu esnek) yazı Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Dizi (Evet/Belirsiz/Hayır), radyo düğmeleri Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Standart metin sorusu Q11 {Q11.shown}
D Tarih Q12 {Q12} {Q12.shown}
* Denklem Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Dosya yükleme (yüklenen dosya sayısını kaydeder) Q14 {Q14} {Q14>0}
G Cinsiyet, açılan liste Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Çok uzun serbest yazı Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Dil sorusu Q17 {Q17} {Q17.shown} {Q17=='en'}
! Liste - açılan liste Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Liste, açılan liste/radyo düğmesi listesi Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Açıklamalı liste, açılan liste/radyo düğmesi listesi + metin alanı Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Uzun serbest yazı Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Birkaç seçim, onay kutusu Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Açıklamalar ile birkaç seçenek, onay kutusu + yazı Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Birkaç sayısal soru Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Birkaç kısa yazı Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Sayısal soru türü Q26 {Q26} {Q26.shown} {Q26 > 30}
R Sıralama biçemi Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Kısa serbest yazı Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Evet/Hayır, radyo düğmeleri Q29 {Q29} {Q29.shown} {Q29=='Y'}


NAOK kullanımı

NAOK --> "Not Applicable" (NA; uygulanamaz) sorun değildir (OK)


NAOK kullanmak, değişkenlerin tamamının veya bir kısmının ilintisiz olduğu anlamına gelir (ör. "Not Applicable" (NA; uygulanamaz) sorun değildir (OK)).

Örneğin: Q1'in bir alt sorusu filtrelenmişse count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) her zaman boş bir metin döndürür. Böyle bir soruda işaretlenen alt soru sayısını saymak için count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK) kullanılabilir. Alt soru gizliyse EM boş bir metin döndürür.

NAOK olmadan, bir soru veya alt soru gizliyse EM her zaman boş bir metin döndürür (false döndürmekle aynıdır).

.shown her zaman NAOK sistemini kullanır (gizliyse boş metin); ancak yanıtın koduna ihtiyacınız varsa, soru kodunun ardına .NAOK eklemek her zaman iyi bir fikirdir (ne yaptığınızı bilmiyorsanız veya buna ihtiyacınız yoksa).

Daha fazla bilgi Basamaklı koşulların geçersiz kılınması alt bölümünde verilmiştir.


Ayrılmış "this", "self" ve "that" değişkenleri

Çoğu zaman bir sorunun tüm bölümlerini değerlendirmek istersiniz; örneğin kaç alt sorunun yanıtlandığını saymak veya puanları toplamak gibi. Bazen de bir sorunun yalnızca belirli satırlarını veya sütunlarını işlemek istersiniz (ör. satır veya sütun toplamlarını alıp veri tabanında saklamak). Bu ayrılmış değişkenler bu işlemi oldukça kolaylaştırır.


"This" değişkeni

"this" değişkeni yalnızca "Soru geçerliliği denklemi" ve "Alt soru geçerliliği denklemi" seçeneklerinde kullanılır (ikincisi grafik arayüzden mümkün değildir). Bu soruların içindeki her hücrenin değişken adlarına genişler. Dolayısıyla her girdinin üçten büyük olduğundan emin olmak istiyorsanız "Alt soru geçerliliği denklemi" alanını (this > 3) olarak ayarlarsınız.


"Self" değişkeni

"self" ve "that" değişkenleri daha güçlüdür ve denklemler işlenmeden önce genişletilen makrolar olarak çalışır. "self" değişkeni için sözdizimi seçenekleri şunlardır:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix
  1. suffix, normal soru kodu son eklerinden herhangi biridir (ör. NAOK, value, shown)
  1. sub-selector aşağıdakilerden biri olabilir:
  • comments - yalnızca açıklama olan alt sorular (ör. Açıklamalar ile birkaç seçenek ve Açıklamalı liste);
  • nocomments - yalnızca açıklama olmayan alt sorular;
  • sq_X - burada X bir satır veya sütun tanımlayıcısıdır. Yalnızca X desenine uyan alt sorular seçilir. Aramanın tam kod tanımlayıcısı üzerinde yapıldığına, ardından sq_X eşleşmesinin nX, X, Xn alt sorularını da kapsadığına dikkat edin (ör. sq_1 kullanırsanız a1, 1a, 1, 11 veya 001 alt soruları dahil edilir). QCODE_SQCODE_1 ve QCODE_SQCODE_1 şeklinde alt soru kodlarına sahip çift ölçekli soru türüne ve alt soru kodları QCODE_1, QCODE_2 ... şeklinde olan sıralama soru türüne dikkat edin.

Örnekler:

  • Bir sorunun herhangi bir kısmı yanıtlandı mı? -> {count(self.NAOK)>0}
  • Bu sorunun değerlendirme puanı nedir? -> {sum(self.value)}

Bunları satır ve sütun toplamlarını almak için de kullanabilirsiniz. A-E satırlarına ve 1-5 sütunlarına sahip bir sayı dizisi olduğunu varsayalım.

  • Ana toplam nedir? -> {sum(self.NAOK)}
  • B satırının toplamı nedir? -> {sum(self.sq_B.NAOK)}
  • 3. sütunun toplamı nedir? -> {sum(self.sq_3.NAOK)}


"That" değişkeni

"that" değişkeni "self" değişkenine benzer, ancak diğer sorulara başvurmanıza olanak tanır. Sözdizimi şöyledir:

  • that.qname
  • that.qname.suffix
  • that.qname.sub-selector
  • that.qname.sub-selector.suffix

qname, herhangi bir alt soru uzantısı olmadan soru adıdır. Örneğin 'q1' adında bir soru oluşturalım; buradaki 'q' aynı zamanda qname değerini de temsil eder.

Örnekler:

  • q1 sorusunun herhangi bir kısmı yanıtlandı mı? -> {count(that.q1.NAOK)>0}
  • q2 için değerlendirme puanı nedir? -> {sum(that.q2.NAOK)}
  • q3 için ana toplam nedir? -> {sum(that.q3.NAOK)}
  • q4'teki C satırının toplamı nedir? -> {sum(that.q4.sq_C.NAOK)}
  • q4'teki 2. sütunun toplamı nedir? -> {sum(that.q4.sq_2.NAOK)}

"self" ve "that" değişkenleri herhangi bir uygunluk, doğrulama veya uyarlama alanında kullanılabilir.

Tek dikkat edilmesi gereken nokta, Mantık dosyasını göster özelliğini kullandığınızda "self" ve "that" değişkenlerinin genişletilmiş değerinin gösterilmesidir. Bu sayede oluşturulacak gerçek denklemi görebilir, değişkenlerin var olup olmadığını siz (ve EM) doğrulayabilirsiniz. Oldukça uzun denklemler görebileceğiniz için bu karışık görünebilir. Ancak soruyu düzenlerseniz "self" ve/veya "that" kullanan özgün denklemi görürsünüz.

Aşağıdaki durumlarda bu değişkenleri kullanmamalısınız:
  • Bir denklemde kullanılan her değişkeni açıkça adlandırmak istiyorsanız veya
  • alt sorusu olmayan değişkenler kullanıyorsanız (ör. tek yanıtlı sorular). Bu durumlarda bir değişkenin başına "that" eklemek gereksizdir ve beklenmedik sonuçlar alma riskiyle karşılaşırsınız.

Fonksiyonlara erişim

ExpressionScript, aşağıda gösterildiği gibi matematiksel, metin ve kullanıcı tanımlı fonksiyonlara erişim sağlar. Bu fonksiyonların PHP ve JavaScript karşılıkları bulunur; böylece sunucu tarafında (PHP) ve istemci tarafında (JavaScript) aynı şekilde çalışırlar. Yeni fonksiyon eklemek kolaydır.


Uygulanmış fonksiyonlar

Şu anda aşağıdaki fonksiyonlar kullanılabilir:

İşlev Anlamı Sözdizimi
abs Mutlak değer number abs(number)
acos Ark kosinüs number acos(number)
addslashes Bir dizgeyi ters eğik çizgilerle tırnak içine alır string addslashes(string)
asin Ark sinüs number asin(number)
atan Ark tanjant number atan(number)
atan2 İki değişkenli ark tanjant number atan2(number, number)
ceil Küsuratları yukarı yuvarlar number ceil(number)
checkdate Gregoryen takvimde geçerli bir tarihse doğru(1) değerini döndürür bool checkdate(month,day,year)
convert_value Sayısal değerlerden oluşan bir girdi tablosu ve çıktı tablosu kullanarak sayısal bir değeri dönüştürür number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosinüs number cos(number)
count Listedeki yanıtlanmış (boş olmayan) soruların sayısını sayar number count(arg1, arg12, ..., argN)
countif Listede ilk bağımsız değişkene eşit olan yanıtlanmış soruların sayısını sayar number countif(matches, arg1, arg2, ... argN)
countifop Listede ölçütü (arg op value) karşılayan yanıtlanmış soruların sayısını sayar number countifop(op, value, arg1, arg2, ... argN)
date Yerel tarih/zamanı biçimlendirir string date(format [, timestamp=time()])
exp e üssünü hesaplar number exp(number)
fixnum Gerekirse sayıları ondalık ayırıcı olarak virgülle gösterir string fixnum(number)
floor Küsuratları aşağı yuvarlar number floor(number)
gmdate GMT tarih/zamanı biçimlendirir string gmdate(format [, timestamp=time()])
html_entity_decode Tüm HTML varlıklarını uygun karakterlere dönüştürür (her zaman ENT_QUOTES ve UTF-8 kullanır) string html_entity_decode(string)
htmlentities Uygun olan tüm karakterleri HTML varlıklarına dönüştürür (her zaman ENT_QUOTES ve UTF-8 kullanır) string htmlentities(string)
expr_mgr_htmlspecialchars Özel karakterleri HTML varlıklarına dönüştürür (her zaman ENT_QUOTES ve UTF-8 kullanır) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Özel HTML varlıklarını yeniden karakterlere dönüştürür (her zaman ENT_QUOTES ve UTF-8 kullanır) string htmlspecialchars_decode(string)
idate Yerel tarih/saati tam sayı olarak biçimlendirir string idate(string [, timestamp=time()])
if Excel tarzı if(test,result_if_true,result_if_false) if(test,result_if_true,result_if_false)
implode Dizi elemanlarını bir dizge olarak birleştirir string implode(glue,arg1,arg2,...,argN)
intval Bir değişkenin tam sayı değerini alır int intval(number [, base=10])
is_empty Bir değişkenin boş kabul edilip edilmediğini belirler bool is_empty(var)
is_float Bir değişkenin türünün ondalık sayı (float) olup olmadığını belirler bool is_float(var)
is_int Bir değişkenin türünün tam sayı olup olmadığını belirler bool is_int(var)
is_nan Bir değerin sayı olup olmadığını belirler bool is_nan(var)
is_null Bir değişkenin NULL olup olmadığını belirler bool is_null(var)
is_numeric Bir değişkenin sayı veya sayısal bir dizge olup olmadığını belirler bool is_numeric(var)
is_string Bir değişkenin türünün dizge olup olmadığını belirler bool is_string(var)
join (New in 2.0 build 130129) Öğeleri yeni bir dizge olarak birleştirir join(arg1, arg2, ... argN)
list Boş olmayan değerlerin virgülle ayrılmış listesini döndürür string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Listede ölçütü (cmpProp op value) karşılayan sorulardan, belirtilen soru özelliğinin (retProp) 'glue' ile ayrılmış bir listesini döndürür string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
ltrim Bir dizgenin başındaki boşlukları (veya diğer karakterleri) ayıklar string ltrim(string [, charlist])
max En yüksek değeri bulur number max(arg1, arg2, ... argN)
min En düşük değeri bulur number min(arg1, arg2, ... argN)
mktime Bir tarih için UNIX zaman damgasını alır (6 bağımsız değişkenin her biri isteğe bağlıdır) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Mod işlevi henüz desteklenmemektedir. Bunun yerine floor() işlevini kullanabilirsiniz floor(x/y)==(x/y)
nl2br Bir dizgedeki tüm satır sonlarından önce HTML satır sonları ekler string nl2br(string)
number_format Bir sayıyı binlik olarak ayırarak biçimlendirir string number_format(number)
pi Pi değerini alır number pi()
pow Üstel ifade number pow(base, exp)
quoted_printable_decode Quoted-printable bir dizgeyi 8 bitlik bir dizgeye dönüştürür string quoted_printable_decode(string)
quoted_printable_encode 8 bitlik bir dizgeyi quoted-printable bir dizgeye dönüştürür string quoted_printable_encode(string)
quotemeta Üst veri karakterlerini tırnak arasına alır string quotemeta(string)
rand Rastgele bir tam sayı üretir, bu örneğe bakın int rand() OR int rand(min, max)
regexMatch Bir dizgeyi bir kurallı ifade ile karşılaştırır bool regexMatch(pattern,input)
round Bir sayıyı istenilen hassasiyette yuvarlar number round(val [, precision])
rtrim Bir dizgenin sonundaki boşlukları (veya diğer karakterleri) ayıklar string rtrim(string [, charlist])
sin Sinüs number sin(arg)
sprintf Biçimlendirilmiş bir dizge verir string sprintf(format, arg1, arg2, ... argN)
sqrt Kare kök number sqrt(arg)
stddev Sayı listesi için örneklem standart sapmasını hesaplar number stddev(arg1, arg2, ... argN)
str_pad Bir dizgeyi başka bir dizgeyle belirli bir uzunluğa tamamlar string str_pad(input, pad_length [, pad_string])
str_repeat Bir dizgeyi yineler string str_repeat(input, multiplier)
str_replace Aranan dizgenin tüm geçtiği yerleri yerine konacak dizgeyle değiştirir string str_replace(search, replace, subject)
strcasecmp İkili, güvenli, büyük küçük harf duyarsız dizge karşılaştırması int strcasecmp(str1, str2)
strcmp İkili güvenli dizge karşılaştırması int strcmp(str1, str2)
strip_tags Bir yazıdaki HTML ve PHP kod imlerini ayıklar string strip_tags(str, allowable_tags)
stripos Büyük küçük harfe duyarsız bir unicode dizgenin ilk geçtiği konumu bulur (0'dan başlar, bulunamazsa false döndürür) int stripos(haystack, needle [, offset=0])
stripslashes Tırnaklı bir dizgeyi tırnaksız yapar string stripslashes(string)
stristr Büyük küçük harfe duyarsız strstr string stristr(haystack, needle [, before_needle=false])
strlen Dizge uzunluğunu alır int strlen(string)
strpos Bir unicode dizgenin ilk geçtiği konumu bulur (0'dan başlar, bulunamazsa false döndürür) int strpos(haystack, needle [ offset=0])
strrev Bir dizgeyi ters çevirir string strrev(string)
strstr Bir dizgenin ilk geçtiği yeri bulur string strstr(haystack, needle[, before_needle=false])
strtolower Bir dizgeyi küçük harfe çevirir string strtolower(string)
strtotime İngilizce metin biçimindeki hemen her tarih/saat tanımını Unix zaman damgasına dönüştürür int strtotime(string)
strtoupper Bir dizgeyi büyük harfe çevirir string strtoupper(string)
substr Bir unicode dizgenin bir bölümünü döndürür string substr(string, start [, length])
sum Bir dizideki değerlerin toplamını hesaplar number sum(arg1, arg2, ... argN)
sumifop Listede ölçütü (arg op value) karşılayan yanıtlanmış soruların değerlerini toplar number sumifop(op, value, arg1, arg2, ... argN)
tan Tanjant number tan(arg)
time Geçerli UNIX zaman damgasını alır number time()
trim Bir dizgenin başındaki ve sonundaki boşlukları (veya diğer karakterleri) ayıklar string trim(string [, charlist])
ucwords Bir dizgedeki her sözcüğün ilk harfini büyük harf yapar string ucwords(string)
unique Tüm boş olmayan yanıtlar benzersiz ise doğru değerini döndürür boolean unique(arg1, ..., argN)
Planlanan (veya değerlendirilmekte olan) işlevler hakkında daha fazla bilgi edinmek istiyorsanız buraya tıklayın.

<span id="Create_new_expression_functions_with_plugin_ (New in 4.0.0 )">

Eklenti ile yeni ifade işlevleri oluşturma (New in 4.0.0 )

Çekirdekte bulunmayan yeni bir işleve ihtiyacınız varsa, bunu bir eklenti ile oluşturabilirsiniz. Böyle bir yeni işlev, expressionManagerStart olayı kullanılarak oluşturulur.

ExpressionScript hangi değişkenlerin yerel olduğunu bilir

Bir sayfanın JavaScript kodunu doğru şekilde oluşturabilmek için EM'nin sayfada hangi değişkenlerin ayarlandığını ve bunların JavaScript kimliğinin (ID) ne olduğunu (örneğin document.getElementById(x) için) bilmesi gerekir. Ayrıca gerekli <input type='hidden' value='x'> alanlarının mevcut ve doldurulmuş olduğundan emin olabilmek için diğer sayfalarda hangi değişkenlerin ayarlandığını da bilmelidir.


Basamaklı Koşullar

Değişkenlerden herhangi biri ilgisizse, denklemin tamamı ilgisiz (false) olur. Örneğin aşağıdaki tabloda N/A, değişkenlerden birinin ilgili olmadığı anlamına gelir:


Operatör Örnek a b Sonuç
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
function sum(a,b,b) N/A 5 false
function max(a,b) N/A 5 false
function min(a,b) N/A 5 false
function implode(', ',a,b,a,b) N/A 5 false
function if(a,a,b) N/A 5 false
function is_empty(a) N/A false
function is_empty(a) 0 (or blank) true
function !is_empty(a) N/A false


Basamaklı Koşulları Geçersiz Kılma

Tüm ilgili yanıtların toplamını anlık olarak göstermek istediğinizi varsayalım. {sum(q1,q2,q3,...,qN)} denklemini kullanmayı deneyebilirsiniz. Ancak bu denklem dahili olarak LEMif(LEManyNA("q1","q2","q3",...,"qN"),"",sum(LEMval("q1"),LEMval("q2"),LEMval("q3"),...,LEMval("qN"))) şeklinde çevrilir. Dolayısıyla q1-qN değerlerinden herhangi biri ilgisizse denklem her zaman false döndürür. Bu durumda sum() işlevi, tüm sorular yanıtlanana kadar "0" gösterir.

Bunu aşmak için her değişkene ".NAOK" son eki (Not Applicable is OK, yani Uygulanamaz kabul edilebilir anlamına gelir) eklenebilir. Bu durumda şu davranış gerçekleşir. q1.NAOK adlı bir değişkeniniz olduğunu varsayalım:

  1. q1, LEManyNA() yan tümcesine eklenmez
  2. LEMval('q1'), yanıtın ilgili olup olmadığını denetlemeye devam eder ve ilgili değilse "" döndürür (böylece tek tek ilgisiz yanıtlar yok sayılır, ancak tüm ifadeyi geçersiz kılmaz).

Dolayısıyla anlık toplam sorununun çözümü sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK) denklemini kullanmaktır.

.NAOK son ekinin kullanılması, yazarların birden fazla olası yola sahip olan ancak daha sonra ortak yollarda birleşen anketler tasarlamasına da olanak tanır. Örneğin katılımcıların bir ankete normal yanıt aralığının dışında yanıt verdiğini varsayalım. Yazar, katılımcıları geçerli sonuçlar alamayabilecekleri konusunda uyarabilir ve ankete gerçekten devam etmek isteyip istemediklerini sorabilir. "Evet" derlerse sorunun geri kalanı gösterilir. "Sorunun geri kalanı" için koşul, ilk yanıtların normal aralıkta verilip verilmediğini VEYA katılımcının yalnızca normal aralığın dışında yanıt verdiyse ilgili olan soruya "Evet" yanıtı verip vermediğini denetler.

ExpressionScript koşullu mikro uyarlamayı nasıl destekler?

Mikro uyarlamaya bir örnek (burada Soru türü=='expr' bir Denklem anlamına gelir):


Soru kodu İlgililik Soru türü Soru
name 1 text Adınız nedir?
age 1 text Kaç yaşındasınız?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Üzgünüz, {name}, bu test için çok {if( (age<16),'genç',if( (age>80),'yaşlı','orta yaşlı') ) } görünüyorsunuz.
kids !badage yesno Çocuğunuz var mı?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Kaç çocuğunuz var?
kid1 parents && numKids >= 1 text İlk çocuğunuz kaç yaşında?
kid2 parents && numKids >= 2 text İkinci çocuğunuz kaç yaşında?
kid3 parents && numKids >= 3 text Üçüncü çocuğunuz kaç yaşında?
kid4 parents && numKids >= 4 text Dördüncü çocuğunuz kaç yaşında?
kid5 parents && numKids >= 5 text Beşinci çocuğunuz kaç yaşında?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents text {name}, {age} yaşında olduğunuzu ve {numKids} çocuğunuz olduğunu belirttiniz. İlk {min(numKids,5)} çocuğunuzun yaşları toplamı {sumage}


Yukarıdaki anket örneğini indirmek için şu bağlantıya tıklayın: Çocuk sayısı anketi örneği.

Bu soruların tümü tek bir sayfada (örneğin aynı grupta) yer alabilir ve yalnızca ilgili sorular görüntülenir. Ayrıca çocukların yaşlarını girdikçe son sorudaki sum() ifadesi dinamik olarak güncellenir.

ExpressionScript bu işlevi, her ifadeyi adlandırılmış bir <span> öğesiyle çevreleyerek sağlar. Bir değer her değiştiğinde, o <span> öğesinde görünmesi gereken ifadeyi yeniden hesaplar ve görüntüyü yeniden oluşturur. Aynı sayfada düzinelerce, hatta yüzlerce böyle uyarlanmış ifade bulunabilir.


Söz dizimi vurgulama

İfadelerin girilmesine ve doğrulanmasına yardımcı olmak için EM, aşağıdaki özelliklere sahip söz dizimi vurgulama sağlar:

Söz Dizimi Vurgulamanın Türleri ve Anlamları

Renk Örnek Anlamı Araç ipucu Açıklamalar
tan background Sample tüm denklem yok Süslü parantezler içinde yer alan ve denklem olarak tanınan her şey (örneğin başında veya sonunda boşluk bulunmayan), çevreleyen metinden ayırt edilmesine yardımcı olmak için bej arka planla renklendirilir
bold red text Sample Bir hata Hata hakkında bir açıklama Bilinmeyen bir değişken veya işlevdeki bir hata olabilir. Anket bozulur ve ilgili ifadeye dayanan sorular katılımcılara gösterilmez.
blue text Sample işlev adı anlamı ve izin verilen söz dizimi İşlev adlarını veya ardından açık parantez geldiği için işlev olması gereken öğeleri ifade eder. Kalın mavi metin olarak görüntülenirler. Araç ipuçları işlevin anlamını ve izin verilen söz dizimini gösterir.
grey text Sample dize yok Tek ve çift tırnaklı dizeler gri metin olarak gösterilir.
cyan text Sample aynı sayfada ayarlanan değişken [name]: soru; değer; her değer için kodları gösteren yanıt listesi Şu anda düzenlediğiniz soruyla aynı sayfada ayarlanan her değişken camgöbeği metin olarak gösterilir (JavaScript ile güncellenebilir). Araç ipucu değişkenin adını, asıl soruyu ve geçerli değerini (ayarlanmamışsa boş) gösterir. Soru türü numaralandırılmış bir değer kümesinden yanıt bekliyorsa, kodların görüntülenen değerlerle eşleşmesi gösterilir.
green text Sample önceki bir sayfada ayarlanan değişken [name]: soru; değer; her değer için kodları gösteren yanıt listesi Önceki bir sayfada ayarlanan her değişken kalın yeşil metin olarak gösterilir. Araç ipucu değişkenin adını, asıl soruyu ve geçerli değerini (ayarlanmamışsa boş) gösterir. Soru türü numaralandırılmış bir değer kümesinden yanıt bekliyorsa, kodların görüntülenen değerlerle eşleşmesi gösterilir.
bold pink text Sample sonraki bir sayfada ayarlanan değişken genellikle: anket başlangıcında boştur, ancak dizin veya önceki sayfaya gitme ile doldurulabilir [name veya SGQA kodu]: soru; değer; her değer için kodları gösteren yanıt listesi Sonraki bir sayfada ayarlanan her değişken kalın pembe metin olarak gösterilir. Araç ipucu değişkenin adını, asıl soruyu ve geçerli değerini (ayarlanmamışsa boş) gösterir. Soru türü numaralandırılmış bir değer kümesinden yanıt bekliyorsa, kodların görüntülenen değerlerle eşleşmesi gösterilir.
bold tan text Sample bir LimeSurvey değiştirme değeri değer LimeSurvey değiştirme dizeleri ({TOKEN:xxx}, {PRIVACY_MESSAGE} gibi) kalın bej metin olarak gösterilir.
red text Sample atama operatörü (=) uyarı iletisi Atama operatörlerinden birini (=) kullanırsanız bu operatör kırmızı metin olarak görüntülenir. Bu, aslında a == b denetimi yapmak isterken a = b şeklinde değer atayarak yanlışlıkla yeniden atama yapılmasını önlemeye yardımcı olmak içindir.
normal black text Sample noktalama yok İfade içindeki diğer tüm noktalama işaretleri normal siyah metin olarak gösterilir.
red-boxed text hatanın çevresinde kalın bir kırmızı çizgi bulunur söz dizimi hatası hatanın açıklaması Algılanan tüm söz dizimi hataları kırmızı kutular içinde gösterilir. Araç ipucu hatayı gösterir. Örnekler arasında eşleşmeyen parantezler, tanımsız işlevlerin kullanımı, işlevlere yanlış sayıda bağımsız değişken geçirilmesi, kötü yapılandırılmış ifadeler (örneğin değişkenler arasında eksik operatörler), salt okunur bir değişkene yeni değer atamaya çalışmak, değişken olmayanlara değer atamaya çalışmak veya desteklenmeyen söz dizimi kullanmak yer alır. Söz dizimi hatası algılama sisteminin, birden fazla hata olsa bile bir ifadede yalnızca tek bir hata bildirebileceğini unutmayın; ancak herhangi bir hata algılanırsa en az bir hata gösterilir.


Araç ipuçları derken, belirli işlevlerin ve değişkenlerin üzerine geldiğinizde görüntülenen açılır iletiyi kastediyoruz.


Ek okumalar

ExpressionScript örnek anketleri

Kullanım senaryoları ve nasıl yapılır kılavuzları

Adım adım örnekler

Geliştiriciler için başvuru kılavuzu

Yol haritası, durum, yapılacaklar listesi