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 Nasıl Yapılır Örnekleri

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 How-tos and the translation is 100% complete.


Daha önce anlatılanların özeti

LimeSurvey rehberinin yapısını şimdiye kadar takip ettiyseniz, LimeSurvey terminolojisini zaten biliyorsunuz demektir. Ardından, anketlerimizi geliştirmeyi öğrenmek için ifadeleri ve değişkenleri ele aldık. Sonraki bölümde, sözdizimi hatalarını düzeltmeyi öğrenmek için sözdizimi vurgulamanın türlerine ve anlamlarına geçtik.

Bu temel kavramları ele aldığımıza göre, artık örneklere geçebilir ve ifadelerin LimeSurvey içinde nasıl çalıştığını açıklayabiliriz.


Sözdizimi vurgulama

Aşağıdaki ekran görüntüleri örnekler verir ancak araç ipuçlarının değerlerini göstermez. Araç ipucu, kalın renkli sözcüklerin üzerine fare ile geldiğinizde görüntülenen bilgi kutusudur.

Bu sözdizimi vurgulama sayesinde, karmaşık olanlar bile dahil olmak üzere doğru ifadeler oluşturmak çok kolaydır. LimeSurvey ekibi bir İfade Oluşturucu arayüzü geliştirmeyi planlasa da, yazım hatalarını hızlıca belirlemek ve düzeltmek için mevcut sözdizimi vurgulamayı kullanabilirsiniz. İfadelerinizin doğruluğunu denetlemek için de araç ipuçlarından yararlanabilirsiniz (ör. istediğiniz değişken(ler)i seçtiğinizi doğrulayın).

Örneklerin her birinde üç sütun bulunur:

  1. Kaynak - LimeSurvey soru alanına gireceğiniz ham metindir
  2. Biçimlendirilmiş görünüm - girdiğiniz metnin sözdizimi vurgulanmış karşılığıdır
    • İfadelerin bu vurgulamada ten rengi bir arka planla gösterildiğini, ancak süslü parantezlerle çevrelenmediğini unutmayın.
    • EM özyinelemeli yer değiştirmeyi desteklediğinden, vurgulamada süslü parantezlerin gösterilmesi sözdizimi hatalarına neden olur
  3. Sonuç - EM kaynağı işlediğinde üretilen çıktıdır
    • Doğru şekilde yer değiştirilebilen her şey yer değiştirilir
    • Hatalı ifadeler sözdizimi vurgulamasıyla birlikte satır içinde gösterilir. Hatalar kırmızı çizgili bir kutuyla çevrelenir.


Doğru sözdizimi

Aşağıda doğru sözdizimi örneklerini bulabilirsiniz:

  1. Değerler: bilinen değişkenlerin geçerli sayfada ayarlanıp ayarlanmadığına göre renk kodlu olduğunu gösterir.
  2. Soru öznitelikleri: nokta gösteriminin soruların bazı özelliklerine erişebildiğini gösterir
  3. Matematik: temel ve karmaşık hesaplamaların desteklendiğini gösterir
  4. Metin işleme: kullanılabilir metin işleme işlevlerinden bazılarını gösterir
  5. Tarihler: kullanılabilir tarihle ilgili işlevlerden ikisini gösterir
  6. Koşullu: if() işlevinin kullanımını gösterir. Seçenekler iç içe geçirilebilir.
  7. Kişiye özel paragraf: önceki değerlere göre bir raporu tamamen özelleştirebilirsiniz
  8. EM dizeler içinde işlem yapar: dizeler içinde yer değiştirme yapabildiğini gösterir. Bu örnek, kişiye özel bir görsel adı üretir.
  9. EM şunun gibi süslü parantezleri işlemez: süslü parantezler kaçışlıysa veya ifade ile süslü parantezler arasında boşluk varsa, ES ifadeyi yok sayar.


Hata içeren EM sözdizimi

ES ifadeleri yazarken sık yapılan hatalara ilişkin örnekler aşağıdadır. Araç ipuçlarının ek bilgi sağladığını unutmayın.

  1. Süslü parantezden sonra boşluk eklemeyi unutan satır içi Javascript
    • "document.write" süslü parantezden hemen sonra geldiği için EM bunu bir ifade sanır ve sırasıyla tanımsız değişken ve işlev olduklarından "document" ve "write" sözcüklerini kırmızı kutuya alır
  2. Bilinmeyen/yanlış yazılmış değişkenler, işlevler ve işleçler
    • Burada "sex" yerine "gender" değişken adını kullandığımızı unuttuk, ancak EM bu hatayı yakalar. Ayrıca desteklenen bir işleç olmadığı için '++' ifadesini de kırmızı kutuya alır.
  3. eq yerine = kullanılırsa veya değer atamaları yapılırsa uyarır
    • '=' ve '+=' işleçlerinin siyah yerine kırmızı metinle gösterildiğine dikkat edin. Fareyle üzerlerine geldiğinizde bir değer atadığınıza dair uyarılar görürsünüz.
  4. İşlevler için yanlış sayıda bağımsız değişken
    • if() 3 bağımsız değişken alır, ancak 4 verilmiştir; bu nedenle kırmızı kutudaki "if" üzerine geldiğinizde hata açıklanır ve desteklenen sözdizimi gösterilir
    • sum() sınırsız sayıda bağımsız değişken alır, ancak kapanış parantezinden önce sondaki bir virgül vardı; bu nedenle kırmızı kutuya alınır
  5. Eşleşmeyen parantezler
    • İfade yazarken en sık yapılan hatalardan biridir.
    • Burada eksik kapanış parantezine ilişkin iki örnek ve fazladan bir kapanış parantezine ilişkin bir örnek gösterilir.
  6. Desteklenmeyen sözdizimi
    • ES'nin desteklemediği bir işleç veya noktalama işareti kullanırsanız, bunu kırmızı kutuya alır.
  7. Geçersiz atamalar
    • Bazı değişkenler okunur-yazılırdır ve değerleri değiştirilebilir. Diğerleri salt okunurdur.
    • Salt okunur bir değişkenin değerini değiştirmeye çalışırsanız bunu yapamazsınız. EM bu girişimi kırmızı kutuya alır.
    • Bir denkleme veya dizeye değer atamaya çalışırsanız da hata alırsınız



Etkin araç ipuçlarıyla sözdizimi vurgulamanın "canlı" örnekleri

KaynakBiçimlendirilmiş görünümSonuç
Araç ipuçlarıyla doğru sözdizimi örneği
Merhaba {if(gender=='M','Mr.','Mrs.')} {surname}, şu an {date('g:i a',time())}. Toplam {sum(numPets,numKids)} çocuğunuzun ve evcil hayvanınızın nerede olduğunu biliyor musunuz?
Araç ipuçlarıyla doğru sözdizimi örneği
Merhaba if(gender == 'M','Mr.','Mrs.') surname, şu an date('g:i a',time()). Toplam sum(numPets,numKids) çocuğunuzun ve evcil hayvanınızın nerede olduğunu biliyor musunuz?
Araç ipuçlarıyla doğru sözdizimi örneği
Merhaba Mr. Smith, şu an 6:07 am. Toplam 3 çocuğunuzun ve evcil hayvanınızın nerede olduğunu biliyor musunuz?
Araç ipuçlarını görebilmeniz için sık yapılan hatalar
Tanımlanmadan önce kullanılan değişkenler: {notSetYet}
Bilinmeyen işlev: {iff(numPets>numKids,1,2)}
Bilinmeyen değişken: {sum(age,num_pets,numKids)}
Yanlış parametre sayısı: {sprintf()},{if(1,2)},{date()}
Salt okunur değişkene atama:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Dengesiz parantezler: {pow(3,4},{(pow(3,4)},{pow(3,4))}
Araç ipuçlarını görebilmeniz için yaygın hatalar aşağıdadır
Tanımlanmadan önce kullanılan değişkenler: notSetYet
Bilinmeyen işlev: iff(numPets > numKids,1,2)
Bilinmeyen değişken: sum(age,num_pets,numKids)
Yanlış parametre sayısı: sprintf(),if(1,2),date()
Salt okunur değişkenlere atama:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Dengesiz parantezler: pow(3,4,(pow(3,4),pow(3,4))
Araç ipuçlarını görebilmeniz için yaygın hatalar aşağıdadır
Tanımlanmadan önce kullanılan değişkenler: notSetYet
Bilinmeyen işlev: iff(numPets > numKids,1,2)
Bilinmeyen değişken: sum(age,num_pets,numKids)
Yanlış parametre sayısı: sprintf(),if(1,2),date()
Salt okunur değişkenlere atama:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Dengesiz parantezler: pow(3,4,(pow(3,4),pow(3,4))
Desteklenmeyen söz diziminden bazı örnekler
'++', '--', '%',';' desteklenmez: {min(++age, --age,age % 2);}
'|', '&', '^' de desteklenmez: {(sum(2 | 3,3 & 4,5 ^ 6)}}
Diziler de desteklenmez: {name[2], name['mine']}
Desteklenmeyen söz diziminden bazı örnekler
'++', '--', '%',';' desteklenmez: min( ++ age, -- age,age % 2) ;
'|', '&', '^' de desteklenmez: (sum(2 | 3,3 & 4,5 ^ 6)}
Diziler de desteklenmez: name [ 2 ] ,name [ 'mine' ]
Desteklenmeyen söz diziminden bazı örnekler
'++', '--', '%',';' desteklenmez: min( ++ age, -- age,age % 2) ;
'|', '&', '^' de desteklenmez: (sum(2 | 3,3 & 4,5 ^ 6)}
Diziler de desteklenmez: name [ 2 ] ,name [ 'mine' ]


Kişiselleştirme Örnekleri

"Sayın {Mr}/{Mrs} Smith..."

'Mr.' veya 'Mrs.' ifadesinden hangisinin görüntüleneceğini koşullu olarak seçmek için if() fonksiyonunu kullanın.

Söz dizimi: if(test,do_if_true,do_if_false).

# Kod Soru Tür
1 gender Cinsiyetiniz nedir? Cinsiyet
2 example1 Sayın {if(gender=='M','Mr.','Mrs.')} Smith, ... Uzun serbest yazı



Aşağıda görebileceğiniz gibi, "Mr" ve "Mrs" ifadeleri, katılımcının "gender" sorusuna verdiği yanıta göre kişiselleştirilir.



Davet e-postasında "Sayın {Mr}/{Mrs} Smith..."

Yukarıdaki örneği, kod tablosundaki özniteliklerden yararlanarak davet e-postasında da kullanabilirsiniz. E-postada 'Mr.' veya 'Mrs.' ifadelerinden hangisinin kullanılacağını seçmek için if() fonksiyonunu kullanın.


Söz dizimi: "if(test,do_if_true,do_if_false)".

# öznitelik değer
1 Soyadı Smith
2 E-posta adresi test@test.com
3 ATTRIBUTE_2 M


Davet e-postasındaki metin:

Sayın {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

bir ankete katılmaya davet edildiniz:

https:/...



E-posta görünümü:


Hesaplama / Değerlendirme Örnekleri

Değerlendirme değerlerini çalışma zamanında hesaplayın ve sonuçları anket verilerinde saklayın

Bu örnek, Uygunluk, Kişiselleştirme ve Denklem soru türü dahil olmak üzere EM'nin tüm özelliklerini kullanır.

Ayrıca bunların hepsinin JavaScript destekli olduğunu da gösterir. Bu nedenle bir sayfada bu özellikler varsa, kişiler yanıtlarını girdikçe ve değiştirdikçe sayfa dinamik olarak değişir.

# Kod Soru Tür Uygunluk
1 numKids Kaç çocuğunuz var? Sayısal giriş 1
2 kid1 İlk çocuğunuz kaç yaşında? Sayısal giriş numKids >= 1
3 kid2 İkinci çocuğunuz kaç yaşında? Sayısal giriş numKids >= 2
4 kid3 Üçüncü çocuğunuz kaç yaşında? Sayısal giriş numKids >= 3
5 kid4 Dördüncü çocuğunuz kaç yaşında? Sayısal giriş numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} Denklem 1
7 kidSummary Çocuk sayınızın şu olduğunu söylediniz: {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','The sum of ages of your first ',min(numKids,4),' kids is ',sumKidAges,'.'),' ')} Yazı görünümü 1


Bu örneği indirmek için lütfen şu bağlantıya tıklayın: Değerlendirme anketi örneği.


Aşağıda temsili soruların ekran görüntülerini bulabilirsiniz. Gördüğünüz gibi EM, uyarlama (tailoring) içerebilecek tüm alanları sözdizimi vurgulamasıyla gösterir. Burada Uygunluk (Relevance), Denklem soru türü ve bir soru içindeki yer değiştirmeler için sözdizimi vurgulama örneklerini görüyorsunuz. Yer değiştirmeleri Yardım, Grup başlığı görüntüleme, Karşılama yazısı ve Bitiş iletisi alanlarında da kullanabilirsiniz.

Sonraki örnekte uygunluk koşulu {numKids >= 2) olduğundan, soru yalnızca katılımcı en az iki çocuğu olduğunu belirtirse görünür olacaktır.



Aşağıda her değişkene .NAOK son ekinin eklendiğini görebilirsiniz. Bunun nedeni, EM'nin kademeli uygunluğu (cascading relevance) desteklemesidir. .NAOK olmasaydı, toplam yalnızca kişi 4 çocuğu olduğunu belirtirse hesaplanırdı (yani tüm değişkenler uygun olduğunda). .NAOK kullanımı, değişkenlerin tamamı veya bir kısmı uygun olmasa bile toplamı hesaplamak istediğimiz anlamına gelir (yani "Uygulanamaz" (Not Applicable, NA) olması sorun değildir (OK)).

Ancak .NAOK özniteliği yalnızca değişkenlerin EM'ye aktarılıp aktarılmayacağını etkiler. Katılımcı başlangıçta 3 çocuğu olduğunu söyleyip her biri için yaş girer, ardından fikrini değiştirip 2 çocuğu olduğunu belirtirse, girilen 3 değerin toplamını görmek istemeyiz; çünkü bizim durumumuzda üçüncü çocuk artık "uygulanamaz" durumundadır:



Her bir ayrı İfade (Expression) açık kahverengi arka planla renk kodlanmıştır. Gördüğünüz gibi burada üç ayrı İfade vardır. Sonuncusu, yalnızca kişinin birden fazla çocuğu varsa koşullu olarak gösterilen bir ileti içerir.



Şimdi anketin çalışırken alınmış ekran görüntülerine bakalım.

Sayfayı ilk ziyaret ettiğinizde bunu görürsünüz. "You have 0 child" yerine "You have 0 children" yazdığına dikkat edin.



Çocuk sayısı değerini 1 olarak değiştirirsem, aynı sayfada olmasına rağmen görüntü anında şu hale gelir:



Dilbilgisinin artık doğru olduğuna dikkat edin: "You have 1 child".

Şimdi çocuk sayısı değerini 3 olarak değiştiriyorum ve görüntü anında şu hale geliyor.

Artık altta koşullu iletiyi gördüğünüze dikkat edin: "The sum of ages of your first 3 kids is 0.".



Şimdi hayali çocuklarım için yaşları giriyorum ve yaşlarının toplamını gösteren şu görüntüyü elde ediyorum:



Yine, değerleri girdikçe puan ve görüntü anında güncellenir; böylece bunu bir Değerlendirme Puanının (Assessment Score) anlık toplamını göstermek için kullanabilirsiniz.


Şimdi çocuk sayısı değerini 2 olarak değiştiriyorum. Görüntü şu hale geldi:



Üçüncü çocuk için 5,5 değerini girmiş olmama rağmen, rapor artık yalnızca ilk 2 çocuğumun değerlerini topluyor.

Bunun nedeni, 3. değerin artık uygun olmaması ve uygun olmayan değerlerin EM tarafından etkin biçimde yok sayılmasıdır.

Çocuk sayısını tekrar 3 yaparsam, girdiğim 5,5 değerini yeniden görürüm. Yani sayfaya girdiğim hiçbir bilgiyi kaybetmem.

Ancak Sonraki sayfa veya Önceki sayfaya geçersem, uygun olmayan tüm değerler oturumda ve veritabanında NULL yapılır. Dolayısıyla değeri 2 olarak bırakıp sonraki sayfaya geçer, sonra geri dönüp aslında 3 çocuğum olduğunu belirtirsem, 5,5 yaşını artık görmem.


Veri girin ve aynı sayfada girilenlerin dinamik olarak değişen raporunu görün

Bu örnek, LimeSurvey içindeki Uyarlama (Tailoring) sürecini sunar.

Bu örneği indirmek için şu bağlantıya tıklayın: Dinamik değişiklikler anket örneği.

Sayfanın başlangıçta nasıl göründüğü aşağıdadır. Yalnızca hangi şehirde yaşadığınızı soran soruyu görürsünüz:



Bir yanıt girmeye başladığınızda, uyarlama işlemi de başlar:


Yanıtlar girdikçe, sayfanın altındaki tablo güncellenerek yanıtlarınızın Yanıt kodlarını ve değerlerini gösterir.


Yaygın Hata Ayıklama Örnekleri

İç İçe if() İfadeleri (Koşullu Mantık)

EM, koşullu mantık veya uyarlama yapabilmeniz için "if(test,do_if_true,do_if_false)" işlevini destekler. Bu işlev, "if { } else if { } else { }" yapısının eşdeğerini oluşturmak üzere iç içe kullanılabilir. Parantezler dengeli değilse (örneğin kapanan sağ parantez eksikse) veya fazladan sağ parantez varsa EM sizi uyarır. Uzun iç içe eğer ifadeleri yazarken parantezleri saymaya çalışmalı, ifadeyi kaydetmeli, sözdizimi hatalarını denetlemeli ve varsa düzeltmelisiniz. Aşağıdaki örneği birlikte inceleyelim.

Aşağıda kullanılan soru grubuna buradan ulaşabilirsiniz: Uyarlama anketi örneği.lsg


Önce, hiçbir şey girilmediğinde yalnızca "Merhaba." görürsünüz.



Bir ad girerseniz, "Merhaba {name}." yazar.



Bir yaş girerseniz, okul öncesi çağında bir çocuk olup olmadığınıza bağlı olarak uyarlanmış bir ileti alırsınız:



Okul çağı, genç veya yetişkin. İşte anonim kalmak isteyen bir genç:



İşte grubun mantık dosyası. "if-based" sorusunda görebileceğiniz gibi, kişinin yaşına dayalı iç içe eğer ifadeleri bulunmaktadır.



Bu soruyu ilk düzenlerken, bir noktada parantez sayısını yanlış girmeniz olasıdır. Çok az parantez olursa şunlar olur:



Kırmızı kutuyla çevrili "if" sözcüğünün üzerine geldiğinizde "Parentheses not balanced" (Parantezler dengeli değil) yazar. Bu durumda, "already an adult!" ifadesinden sonra dört kapanış parantezi olmalıdır, ancak yalnızca üç tane vardır.

Öte yandan, fazladan bir sağ parantez varsa, aşağıdaki gibi kırmızı bir kutu ile çevrelenir:



Soruyu düzenlerken soru şöyle görünür: