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

Expression Manager

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

Hızlı Başlangıç Eğitimi

Özet

Anketlerinizi özelleştirirken genellikle şunları belirtmenin bir yoluna ihtiyaç duyarsınız:

  1. Gezinme/Dallanma - bir katılımcının yanıtlarının soruların sorulma sırasını değiştirmesine izin vermek
  2. Uyarlama/Yönlendirme (Piping) - sorunun nasıl ifade edileceği (önceki yanıtlara atıfta bulunmak veya cümleleri katılımcılarınızın sayısına ya da cinsiyetine göre çekimlemek gibi) veya özel raporların nasıl oluşturulacağı (değerlendirme puanları veya uyarlanmış tavsiyeler gibi).
  3. Geçerlilik - yanıtların en küçük ve en büyük değerler gibi belirli ölçütleri karşılamasını veya bir giriş desenine uymasını sağlamak

Expression Manager (EM), bu özelliklerin her biri için mantığı belirtmenin sezgisel bir yolunu sunar. Standart bir matematiksel denklem olarak yazabileceğiniz hemen hemen her şey, işlev çağırsanız bile geçerli bir ifadedir. EM şu anda 80 işleve erişim sağlar ve daha fazlasını desteklemek üzere kolayca genişletilebilir. Ayrıca değişkenlerinize (SGQA adları yerine) insan tarafından okunabilir değişken adlarıyla erişmenizi sağlar.

Aşağıdaki bölümlerde Expression Manager'ın kullanıldığı başlıca yerler gösterilmektedir

İlinti (Gezinme/Dallanmayı Denetleme)

Bazı anketler "Goto Mantığı" kullanır; örneğin 1. soruyu C seçeneğiyle yanıtlarsanız 5. soruya atlanır. Bu yaklaşım çok sınırlayıcıdır, çünkü doğrulaması zordur ve soruların sırasını değiştirmeniz gerektiğinde kolayca bozulur. EM, bir sorunun geçerli olabileceği tüm koşulları belirtmek için Boolean türünde bir ilinti denklemi kullanır. Soru ilintiliyse gösterilir, aksi halde Uygulanamaz olur ve veritabanında NULL değeri saklanır. Bu, Koşullar düzenleyicisi ile yapılabilenlere benzer, ancak EM çok daha karmaşık ve güçlü ölçütleri kolayca belirtmenize olanak tanır (ve SGQA adlandırması yerine değişken adını kullanmanızı sağlar).

Bu görüntü, bir anketin ilinti mantığını gözden geçirmenin bir yolunu gösterir. Vücut Kitle İndeksini hesaplar. İlinti denklemi, değişken adının (yeşil renkte) hemen ardından köşeli parantez içinde gösterilir. Dolayısıyla weight, weight_units, height ve height_units öğelerinin ilintisi 1'dir; bu, söz konusu soruların her zaman sorulduğu anlamına gelir. Ancak BMI için ilinti {!is_empty(height) and !is_empty(weight)} şeklindedir; bu da BMI'nin yalnızca katılımcı hem boy hem de kilo için bir değer girerse hesaplanacağı anlamına gelir (böylece sıfıra bölme hatası riski ortadan kalkar). Ayrıca Report sorusu yalnızca katılımcı dört ana soruyu da (height, height_units, weight, weight_units) yanıtlarsa gösterilir.

İlinti aşağıdaki yerlerde gösterilir ve düzenlenebilir:

Soru Düzeyinde İlintiyi Görüntüleme / Düzenleme

Bu denklem Vücut Kitle İndeksini (BMI) hesaplar. Yalnızca kişi önce boyunu ve kilosunu girerse sorulur.

Bu, BMI sorusunun düzenleme ekranıdır.

İlinti denklemi girerken süslü parantezleri kullanmadığınıza dikkat edin.

Grup Düzeyinde İlintiyi Görüntüleme / Düzenleme

Bu, örnek bir nüfus sayımı anketidir. İlk sayfa sizinle kaç kişinin yaşadığını sorar ve bunu "cohabs" değişkeninde saklar. Bu sayfa yalnızca birden fazla birlikte yaşayan kişi varsa gösterilir (yani sizinle birlikte yaşayan ikinci kişi için gösterilir) ve ayrıca yalnızca Birinci Kişinin size nasıl bir yakınlığı olduğunu (p1_rel) belirttiyseniz gösterilir.

Gördüğünüz gibi grubun ayrıca soru düzeyinde ilinti ölçütleri de vardır; böylece her soru, kendisinden önceki soru yanıtlandıktan sonra görünür (ör. {!is_empty(p1_sex)}). EM, Grup ve Soru düzeyindeki ilintiyi sizin için birleştirir. Bir gruptaki sorular yalnızca grup bir bütün olarak ilintiliyse sorulur. Ardından grup içinde yalnızca ilintili olan soru alt kümesi sorulur.

Aşağıda, söz konusu soru için grup düzeyindeki ilintiyi düzenleme ekranı yer almaktadır:

İlinti denklemi girerken süslü parantezleri kullanmadığınıza dikkat edin.

Uyarlama/Yönlendirme (Piping)

EM, sorularınızı basit ve karmaşık koşullu olarak kolayca uyarlamanıza olanak tanır. Bazen yalnızca basit bir yer değiştirmeye ihtiyaç duyarsınız; örneğin "[Ürün] satın aldığınızı söylediniz. Onun hakkında en çok neyi beğendiniz?" demek gibi. Bazen "[Bay/Bayan] [Soyadı], anketimizi tamamlamak ister misiniz?" gibi koşullu bir yer değiştirmeye ihtiyaç duyarsınız. Bu durumda kişinin cinsiyetine göre Bay veya Bayan kullanmak istersiniz. Başka zamanlarda (matematiksel bir hesaplamaya dayanan gibi) daha da karmaşık bir yer değiştirmeye ihtiyaç duyarsınız. EM bu uyarlama/yönlendirme türlerinin her birini destekler.

Koşullu Denklemler

Vücut Kitle İndeksi örneği, kişilerin boy ve kilolarını metrik veya metrik olmayan birimlerle girmelerine izin verirken bile BMI'lerini hesaplama yeteneğini gösterir.

Burada weight_kg değeri {if(weight_units == 'kg', weight, weight * .453592)} şeklindedir. Bu if() işlevi, katılımcı kiloyu kilogram olarak girdiyse bu değerin kullanılacağı, aksi halde girilen değerin (libre cinsinden) kilograma çevrilmesi için .453592 ile çarpılacağı anlamına gelir. height_m değişkeni de, boyunu inç olarak girse bile kişinin boyunu metre cinsinden hesaplamak için benzer bir yaklaşım kullanır.

BMI, ağırlık formülünü {weight_kg / (height_m * height_m)} olarak hesaplar.

Son olarak, rapor katılımcıya girdiği değerleri söyleyerek iletiyi koşullu olarak uyarlar. ("2 metre boyunda olduğunuzu ve 70 kg ağırlığında olduğunuzu söylediniz.")

Yukarıdaki görüntüde pek iyi görünmese de weight_status, kişiyi zayıftan ileri derecede obeze kadar sınıflandırmak için iç içe if() ifadeleri kullanır. Denklemini Mantığı Göster görünümünde görebilirsiniz.

Bu sorunun düzenleme penceresinde iki şeyi görebilirsiniz:

  1. Uyarlama, ifadeleri küme ayraçlarıyla çevrelemelidir
  2. İfadeler, bu örnekte olduğu gibi iç içe koşullu mantığı okumayı kolaylaştırmak istediğinizde birden çok satıra yayılabilir.

Uyarlanmış Sorular, Yanıtlar ve Raporlar

Not: Yanıt seçenekleri aynı soru sayfasında seçim kutularında sunuluyorsa dinamik uyarlama çalışmayabilir. Bunun nedeni, uyarlamanın seçim seçeneklerinin içinde geçerli olmayan bir <span> etiketi eklemesidir.

Bu örnek BMI raporunu göstermektedir.

Aşağıda aynı sorunun düzenleme penceresi yer almaktadır.

Gördüğünüz gibi, küme ayraçları içindeki her şey bir ifade olarak ele alınır ve bu nedenle önceki görüntüde sözdizimi vurgulamalıdır (renk kodludur). Yazım hatalarınız olursa (yanlış yazılmış veya tanımlanmamış değişken adları ya da işlevler gibi), EM bunun gibi bir hata gösterir; burada height_unit tanımlanmamış bir değişken adıdır (aslında height_units olmalıdır) ve rnd() tanımlanmamış bir işlevdir (doğru işlev adı round() olmalıdır). Her iki durumda da hataları fark edip düzeltmeyi kolaylaştırmak için hatalar kırmızı bir kutuyla çevrelenir.

Ayrıca girilen değerlerin tablosu veya uyarlanmış öneriler gibi karmaşık raporları hızlıca oluşturabileceğinizi de görebilirsiniz.

Lütfen tüm uyarlamalarda ifadelerin küme ayraçlarıyla çevrelenmesi gerektiğini unutmayın; böylece LimeSurvey sorunun hangi bölümlerinin serbest metin olduğunu, hangilerinin Expression Manager ile işlenmesi gerektiğini bilir.

Doğrulama

EM, gelişmiş soru seçeneklerinin çoğunun nasıl çalışacağını denetler. Bunlar, en az/en çok yanıt sayısı; en az/en çok tekil değerler; en az/en çok toplam değerler ve girilen değerlerin belirtilen dize desenleriyle eşleştiğinin denetlenmesi gibi yönleri kontrol eder. Bu gelişmiş soru seçeneklerini her zamanki gibi girmeye devam edersiniz. Ancak artık bu alanlardaki her değer bir ifade olarak kabul edilir; böylece diğer sorularla karmaşık koşullu ilişkileri olan en az/en çok ölçütleri kullanabilirsiniz.

Tüm bu durumlarda, gelişmiş soru seçeneği her zaman bir ifade olarak kabul edildiğinden, belirtirken küme ayraçlarını kullanmazsınız.

Örnek Anketler sayfaları, doğrulama için ifadelerin kullanıldığı çok sayıda çalışan örnek içerir.

Giriş

LimeSurvey, daha karmaşık dallanma, değerlendirme, doğrulama ve uyarlamayı desteklemesini sağlayacak yeni Expression Manager (EM) modülünü kullanır. LimeSurvey'in arka uçta Değiştirmeleri, Koşulları ve Değerlendirmeleri yönetme biçiminin yerini alacaktır. Ayrıca çalışma zamanındaki veritabanı okumalarının çoğunu ortadan kaldırdığı için işlemeyi önemli ölçüde hızlandıracaktır. EM, Dr. Thomas White (TMSWhite) tarafından geliştirilmiştir.

Bu viki sayfası, Expression Manager sözdizimi ve işlevselliği için kesin başvuru kaynağıdır.

Temel Tanımlar

  1. İfade: Küme ayraçlarıyla çevrelenmiş her şey
    • Açılış ayracından hemen sonra veya kapanış ayracından hemen önce boşluk olmadığı sürece
    • İfadelerin içeriği EM tarafından değerlendirilir; bu nedenle matematiksel formüller, işlevler ile karmaşık dize ve tarih işlemleri içerebilir.
  2. Uyarlama: Bazen "piping" olarak da adlandırılır; metnin koşullu olarak değiştirilmesi sürecidir
    • Tüm 'değiştirme alanlarına', katılımcı verilerine ve yanıt verilerine erişiminiz vardır.
    • Ayrıca sorulara, yanıtlara ve özelliklerine daha kolay erişirsiniz.
  3. İlinti Denklemi: Soru 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. Denklem Soru Türü: Hesaplamaları veya raporları veritabanına kaydeden yeni bir soru türü
    • Boilerplate soruya benzer, ancak "Bu soru her zaman gizlensin" seçeneğini ayarlasanız bile içeriği veritabanına kaydedilir
  5. Soru Kodu: EM için tercih edilen değişken adıdır
    • Bu, sorunun amacını belirten açıklayıcı bir ad olabilir ve karmaşık mantığın okunmasını kolaylaştırır
    • Geçerli soru kodları bir sayıyla 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'a dışa aktarırsanız şu anda değişken adı olan budur; istatistiksel analiz yapıyorsanız muhtemelen bunu zaten benzersiz yapmışsınızdır.

EM kullanmak zorunda mıyım?

Kısa yanıt: Hayır (ama aynı zamanda evet).

EM, mevcut anketlerle tamamen geriye dönük uyumludur. Bu nedenle LimeSurvey'in <= 1.91+ sürümlerinde kullandığı biçemde Koşulları ve Değerlendirmeleri kullanmaktan memnunsanız bunu sürdürebilirsiniz.

Ancak EM, LimeSurvey'in Koşulları dahili olarak ele alma biçimini tamamen değiştirir. Koşulları oluşturmak ve yönetmek için Koşul Düzenleyicisi'ni kullanmaya devam edebilseniz de LimeSurvey 1.92 bunları eşdeğer İlinti Denklemlerine dönüştürür. Yükseltmenin bir parçası olarak LimeSurvey 1.92, mevcut tüm Koşulları otomatik olarak İlinti Denklemlerine dönüştürür.

Bu, size her iki dünyanın da en iyisini sunmalıdır - LimeSurvey'i alışık olduğunuz şekilde kullanmaya devam edebilir, ancak uygun gördüğünüzde kademeli olarak doğrudan İlinti Denklemlerine geçebilmeniz için eşdeğer İlinti Denklemini görürsünüz.

Koşulları ve İlinti denklemini bir arada kullanabilir miyim?

Evet. Bazı sorular için Koşul düzenleyicisini, diğerleri için İlinti düzenleyicisini kullanabilirsiniz. Soruyu kaydettiğinizde Koşullar otomatik olarak İlinti denklemine dönüştürülür.

Koşul düzenleyicisini kullanıyorsanız, bu Koşulların el ile girilmiş herhangi bir İlinti denkleminin üzerine yazılmasını istediğinizi varsayıyoruz. Bu nedenle, mevcut Koşullarınız varsa ve İlinti denklemini el ile düzenlemek istiyorsanız, önce o soru için Koşulları silin. Ayrıntılı olarak: oluşturulan ilinti denklemini bir metin düzenleyiciye kopyalayın, Koşullar menüsünü kullanarak o soruya ait tüm koşulları silin (bu işlem ilintiyi de siler), ardından soruyu düzenleyin ve oluşturulan ilinti denklemini metin düzenleyiciden o sorunun ilinti alanına geri yapıştırın (ve soruyu kaydedin). Oluşturulan ilinti denklemini silmeden koşulları silme yönünde yeterli talep olursa, toplu dönüştürme işlemi ekleyebiliriz.

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

Aşağıda her bir biçemin artıları ve eksilerinin listesi yer almaktadır:

Biçem Artıları Eksileri
Koşullar 1. Basit koşullar oluşturmak için kullanışlı arayüz
2. Arayüz iyi belgelenmiş ve destek ekibi tarafından iyi biliniyor
1. Yalnızca basit karşılaştırmaları destekler ve VE/VEYA koşullarını iyi işlemez
2. Basamaklı koşullar düzensiz çalışır
3. Yavaş - veritabanını yoğun kullanır, bu nedenle uzun anketleri yavaşlatabilir
4. Koşulların yeniden yüklenmesiyle ilgili bildirilen bazı sorunlar var
5. Düzinelerce, yüzlerce veya binlerce soru olduğunda arayüz iyi ölçeklenmez
6. SGQA adlarının kullanılması gerektiğinden kâğıt tabanlı anketleri dönüştürmek yavaş olabilir
7. Karmaşık dallanma için gereken mantığı özel olarak kodlamak için çoğunlukla bir programcıya ihtiyaç duyulur
İlinti denklemi 1. 80'den fazla işlev ve matematik/dizge işleçleri dahil çok karmaşık mantığı destekler
2. Basamaklı mantık için mükemmel destek
3. Hızlı - ek veritabanı çağrısı yok, bu nedenle 1000'den fazla soruluk anketleri destekler
4. SGQA kodları gerektirmediğinden mantığın yeniden yüklenmesinde sorun yok
5. Sözdizimi vurgulama 1000'den fazla soruluk anketlere ölçeklenir
6. Mevcut kâğıt tabanlı anketleri bilgisayar ortamına aktarmak isteyen gruplar için kolay ve hızlı
7. Programcıya ihtiyaç duymadan yarı yapılandırılmış görüşmeleri ve epidemiyolojik anketleri kolayca destekler
1. Basit koşullar için arayüz yok - bunun yerine sözdizimi vurgulamayı kullanın
2. Yeni olduğundan destek ekipleri EM'de henüz uzmanlaşmadı.

Sonuç olarak, LimeSurvey 1.91+ sürümünün çalışma biçiminden memnunsanız, yaptığınız şeyi değiştirmek için bir neden yoktur.

EM kullanmanın diğer yararları nelerdir?

EM'yi kullanmak isteyebileceğiniz diğer bazı nedenler şunlardır.

  1. Hesaplamalar - aklınıza gelen her hesaplamayı oluşturabilirsiniz:
    • Tüm yaygın matematiksel işleçlere ve işlevlere erişiminiz vardır
    • 70'ten fazla matematik, tarih ve dizge işleme işlevine erişiminiz vardır
    • Kullanıcıların ihtiyaç duyması halinde geliştiricilerin yeni işlevler eklemesi oldukça kolaydır
  2. Hesaplamaları veritabanına kaydetme
    • Artık basit ve karmaşık hesaplamaları ve/veya ölçek puanlarını JavaScript'e ihtiyaç duymadan hesaplayabilir ve veritabanında saklayabilirsiniz.
    • Bunu gerçekleştirmek için Denklem soru türünü kullanırsınız.
  3. Değerlendirmeler
    • Artık yalnızca eskiden desteklenen alt kümeden değil, her soru türünden değerlendirme veya ölçek puanı oluşturabilirsiniz
    • Gereken her yerde - hatta aynı sayfada - devam eden veya toplam değerlendirme puanlarını göstermek için Uyarlama'yı kullanabilirsiniz
    • Bu değerlendirme puanlarına dayalı olarak oluşturulan raporlar üzerinde daha fazla denetiminiz vardır
    • Değerlendirme puanlarını JavaScript'e ihtiyaç duymadan veritabanında saklayabilirsiniz
    • Değerlendirme puanlarını JavaScript veya CSS'e ihtiyaç duymadan gizleyebilirsiniz
  4. Yer değiştirme alanları
    • Önceki soruların yanıtlarındaki değerleri eklemek için Soru kodunu kullanın - bu, okumayı ve doğrulamayı kolaylaştırır.
  5. Uyarlama - diğer değerlere göre metni koşullu olarak görüntüleyebilirsiniz
    • Katılımcı için uygun hitabı kullanın (örn. "Merhaba [Bay/Bayan] Smith")
    • Tekil/çoğul durumunun önemli olduğu yerlerde dil bilgisi açısından doğru cümleler üretin: (örn. "1 çocuğunuz var" ile "2 çocuğunuz var")
    • Katılımcının cinsiyetine ve çokluğuna göre fiilleri uygun biçimde çekimleyin ve adları uygun biçimde çekin.
  6. Yeni değişken öznitelikleri - uyarlama yapmak için aşağıdakilere erişebilirsiniz:
    • (son ek yok) - qcode.code için bir takma ad
    • .code - soru ilintiliyse sorunun seçilen yanıt kodu (aksi halde boş) veya kodlu bir soru değilse metin değeri
    • .NAOK - .code ile aynıdır, ancak ilintisiz olsa bile hesaplamaların veya listelerin parçası olabilir
    • .value - soru ilintiliyse sorunun Değer'i (aksi halde boş) veya kodlu bir soru değilse metin değeri -- anket için değerlendirmeler etkinse kullanılabilir, aksi halde her zaman sıfırdır
    • .valueNAOK - .value ile aynıdır, ancak ilintisiz olsa bile hesaplamaların veya listelerin parçası olabilir
    • .shown - yanıtın kullanıcıya görüntülendiği hali
    • .qid - Soru kimliği
    • .gid - Grup kimliği
    • .sgqa - sorunun SGQA değeri
    • .jsName - bu sayfada veya başka bir sayfada tanımlanmış olmasına bakılmaksızın sorunun doğru javascript değişken adı
    • .qseq - soru sırası (0'dan başlar)
    • .gseq - grup sırası (0'dan başlar)
    • .mandatory - sorunun zorunlu olup olmadığı (Y/N)
    • .question - sorunun metni
    • .relevance - sorunun İlinti denklemi
    • .grelevance - grubun İlinti denklemi
    • .relevanceStatus - sorunun şu anda ilintili olup olmadığı (boolean (PHP ve JS'de farklı olabilir))
    • .type - Soru türü (tek karakterlik kod)
  7. Sayfa içi dinamik değişiklikler
    • Tüm İlinti, Hesaplama ve Uyarlama bir sayfada dinamik olarak çalışır - bu nedenle değerlerdeki değişiklikler sayfayı anında günceller
    • Böylece sorular ilintili olup olmadıklarına göre dinamik olarak görünür/kaybolur
    • Sorular ayrıca sayfadaki yanıtlara göre dinamik olarak uyarlanır, böylece devam eden toplamları, uyarlanmış cümleleri ve özelleştirilmiş raporları görebilirsiniz.
  8. Yeni Veri girişi sayfası
    • Geçerli veri girişi sistemini kullanmaya ek olarak, Survey-All-In-One'ı da kullanabilirsiniz.
    • Bu, sayfa içi ilinti ve uyarlamayı destekler, böylece veri giriş görevlileri alanlar arasında hızla gezinebilir ve yalnızca ilintili yanıtları girmeleri gerekir
    • Veri girişi yapan kişinin yine dinamik olan uyarlamayı görmesi gerekiyorsa bu çok önemli olabilir.
  9. Özel JavaScript ihtiyacının çoğunu ortadan kaldırır
    • EM karmaşık hesaplamaları, puanlamayı, uyarlamayı ve koşullu mantığı kolayca destekler.
    • Bazı şeyler için hâlâ JavaScript gerekecektir (özel düzenler ve soru alt öğelerini koşullu olarak gizleme gibi), ancak JavaScript'iniz EM işlevlerini kullanarak sorulara SGQA yerine Qcode ile erişebilir ve yukarıda listelenen tüm soru özelliklerine erişebilir.

EM'nin sağladığı diğer yararlı yeni özellikler nelerdir?

Koşullar Düzenleyicisi'ni kullanmaya devam etseniz de İlinti Denklemlerini el ile yazsanız da şu ek avantajlardan yararlanırsınız:

  1. Daha karmaşık doğrulama ölçütleri oluşturabilirsiniz
    • Gelişmiş soru özniteliklerinin tümü (max_answers, min_num_value_n, max_num_value gibi) İfadeleri kullanabilir. Böylece en küçük/en büyük ölçütlerinizi, aynı sayfada olsalar bile, önceki yanıtlara göre kolayca ayarlayabilirsiniz.
    • EM ayrıca düzenli ifade tabanlı tüm doğrulamaları da yönetir; böylece preg ve denklem tabanlı soru özniteliklerini sağlam biçimde bir arada kullanabilirsiniz.
  2. Soruları ve Grupları kolayca yeniden sıralama (veya silme)
    • 1.92 sürümünden önce, LimeSurvey yeniden sıralamanın kullanıldıkları koşulları bozabileceğini düşünürse soruları veya grupları yeniden sıralayamazdınız. Benzer şekilde, başka sorular bir soruya bağlıysa o soruyu silemezdiniz.
    • EM'in sözdizimi vurgulaması sayesinde, soruları bildirilmeden önce kullanmaya çalışıp çalışmadığınızı görmek ve doğrulamak kolaydır. Bu nedenle artık soruları ve grupları istediğiniz zaman yeniden sıralamanıza veya silmenize izin veriyoruz. EM olası hataları göstermek için tüm sözdizimi vurgulamasını güncelleyecektir.
    • Soruları yeniden sıralama görünümü bu tür incelemelere yardımcı olacak şekilde geliştirildi. Artık sorunun ilinti denklemini ve uyarlamasını gösterdiği için herhangi bir değişkenin pembe olup olmadığını (yani bildirilmeden önce kullanıldığını) hemen görebilirsiniz.
  3. Soru/Grup Gezinti Dizini her zaman kullanılabilir ve doğrudur
    • 1.92 sürümünden önce, karmaşık koşullar varsa bu dizinler kullanılamıyordu
    • EM ile bunların doğru olduğunu garanti edebiliriz.
    • Katılımcılar önceki bir soruya geri dönüp yanıtı değiştirebilir, ardından yeniden ileri atlayabilir (veya gönderebilir)
      • İleri atlarken EM, aradaki tüm soruları/grupları yeniden doğrular.
      • Herhangi bir soru ilintisiz hale gelirse, verileriniz kendi içinde tutarlı olsun diye veritabanında NULL yapılır
      • Herhangi bir soru ilintili hale gelirse veya zorunluluk ya da doğrulama kurallarını yeni karşılamaz duruma gelirse EM o sayfada durur ve kullanıcıyı son hedefine atlamadan önce bu soruları yanıtlamaya zorlar.
  4. Koşulların İlintiye otomatik dönüştürülmesi
    • Veritabanınızı yükselttiğinizde, koşulları olan tüm mevcut anketler için ilinti denklemleri oluşturulur
    • Bir anketi içe aktardığınızda, gerektiğinde ilinti denklemleri oluşturulur
    • Koşulları her eklediğinizde, sildiğinizde veya değiştirdiğinizde EM uygun ilinti denklemini oluşturur.
  5. Kullanışlı Sözdizimi Vurgulaması
    • EM ilinti denklemini gösterirken, bir SGQA kodu girmiş olsanız bile Qcode'u gösterir; çünkü bunun okunmasının daha kolay olacağını varsayarız.
    • Tüm değişkenler, geçerli sorudan (veya geçerli gruptan) önce mi sonra mı bildirildiklerini göstermek için renk kodludur. Bu, ilinti (array_filter dahil), uyarlama veya doğrulama denklemleri için değişkenleri bildirmeden önce kullanmaya çalıştığınız durumları hızla fark edip düzeltmenizi sağlar.
    • Ayrıca fare imlecini renk kodlu değişkenin üzerine getirirseniz, o soru hakkındaki en önemli üst veriyi görürsünüz. Bu; Grup Sırası #, Soru Sırası #, Qcode, sorunun metni ve (numaralandırılmış yanıt seçenekleri olan bir soru türüyse) kullanılabilir tüm yanıt seçeneklerini içerir.
      • Yanıt seçenekleri listesi şu sözdizimini kullanır: 'answers':{key:val, ... }.
      • key için sözdizimi 'scale~code' biçimindedir; burada scale yanıt ölçeğidir (ör. çift ölçek için), code ise yanıt kodudur.
      • val için sözdizimi 'value~shown' biçimindedir; burada value değerlendirme değeridir (değerlendirme kullanılıyorsa; aksi halde code) (ör. Qcode.value), shown ise katılımcının gördüğü görüntülenen değerdir (ör. Qcode.shown)
      • Bu, birçok anketin değerlendirme kipine gerek kalmadan hesaplama kullanabileceği anlamına gelir. Benzersiz, ondalıksız ve negatif olmayan numaralandırılmış yanıt seçenekleriniz varsa, doğrudan Qcode.code değerleri üzerinde hesaplama yapabilirsiniz.
  6. Tüm anket mantığının ve içeriğinin kolayca gözden geçirilmesi
    • Anketle (veya grupla ya da soruyla) ilgili her şeyi tek sayfada görmenizi sağlayan yeni bir Anket Mantığını Göster özelliği vardır.
    • Seçilen kapsam (anket, grup veya soru) için Grup, Soru, Alt Soru ve Yanıt düzeyindeki ayrıntıları gösterir
    • Ayrıca ilintiyi, alt soru düzeyindeki ilintiyi (array_filter ve array_filter_exclude için), oluşturulan doğrulama denklemini (preg ve en küçük/en büyük toplam/değer sayısı gibi tüm doğrulama kuralları için) ve boş olmayan tüm soru özniteliklerini gösterir.
    • Her şey sözdizimi vurgulamalıdır; böylece olası sözdizimi hatalarını (dengesiz parantezler veya değişkenlerin bildirilmeden önce kullanılması gibi) görebilirsiniz
    • Sözdizimi vurgulaması, anketin hızlı gezinmesini ve düzenlenmesini destekler.
      • Bir değişken adına tıklarsanız, o soruyu gösteren ve düzenlemenize olanak veren bir tarayıcı penceresi (veya sekmesi) açılır.
      • Bir grup adına tıklarsanız, soruları kolayca taşıyabilmeniz için grup yeniden sıralama görünümünü gösteren bir tarayıcı penceresi (veya sekmesi) açılır.
      • Tüm soru öznitelikleri de sözdizimi vurgulamalıdır. Bu, gelişmiş soru seçenekleri içinde (değer sayısının/toplamının en büyük/en küçük değerini bir ifadeye dayandırmak gibi) ifadeleri ayarlamanıza ve görmenize olanak verir
    • EM yazarı, birlikte çalıştığı epidemiyologların ve Kurumsal Etik Kurulun, çok dallanan ve uyarlanan yapılandırılmış görüşmelerdeki binlerce sorulu anketleri doğrulayıp onaylayabilmesi için benzer (biraz daha sade) bir görünüm kullandı

Başlarken

EM ile başlamanın en iyi yolu şudur:

  • En son kararlı sürümü http://www.limesurvey.org/en/download adresinden kurun
  • örnek anketleri içe aktarın ve inceleyin.
  • kullanım senaryolarını ve nasıl yapılır kılavuzlarını ve adım adım örnekleri inceleyin.
  • EM belgelerini (bu sayfa) inceleyin
  • Yerleşik EM test paketini inceleyin
    • Herhangi bir anketten, araçlar altında EM seçeneğini seçin
    • Kullanılabilecek işlevler, 70'ten fazla işlevi ve sözdizimini listeler
    • Yalıtılmış İfadelerin Birim Testleri
      • tüm EM işlevlerinin ve işleçlerinin kullanımına ilişkin örnekleri ve PHP ile JavaScript sonuçlarını gösterir
      • PHP ve JavaScript sürümlerinde farklı sonuçlar üreten birkaç işlev olduğunu unutmayın; bu sayfa EM mantığınızı buna göre planlamanızı sağlar.

Expression Manager Hangi İşlevselliği Genişletiyor/Değiştiriyor? (LimeSurvey <= 1.91+)

Koşullar => İlinti

Koşullar hangi soruların görünür olacağını denetliyordu. Genel sözdizimi SGQA işleç Değer biçimindeydi, örneğin 111X2X3 == "Y". Koşullar VE veya VEYA ile birleştirilebiliyordu, ancak VE ile VEYA'yı karıştırmak zordu. Koşulların kendisi ayrı bir tabloda saklanıyordu ve LimeSurvey kodunun büyük bir bölümü Koşulları yönetmeye ayrılmıştı. Yoğun veritabanı erişimi nedeniyle çok sayıda koşulun işlenmesi fark edilir performans sorunlarına yol açabiliyordu. Ayrıca sorulara veya gruplara koşul atadıktan sonra, bunları çoğu zaman yeniden sıralamanıza veya silmenize izin verilmiyordu.

Değerlendirmeler => Denklemler ve Mikro Uyarlama

Değerlendirmeler, kullanıcıların bir grup sorudan ölçek puanları oluşturmasını sağlıyordu. Ancak bunlar geçerli sayfada dinamik olarak değişemiyordu ve değerleri veritabanına kaydedilmiyordu.

Değiştirmeler => Mikro Uyarlama

Kullanıcılar bazı iletileri ve soruları önceki yanıtlara göre uyarlayabiliyordu. Örneğin bir soru şöyle olabilirdi: {TOKEN:FIRSTNAME}, en sevdiğiniz sporun {SPORT.shown} olduğunu söylediniz. Ancak gelişmiş JavaScript olmadan koşullu uyarlama yapmak (kişinin cinsiyetine göre "Bay" veya "Bayan" demek gibi) ya da fiilleri çekimlemek veya adları çekmek mümkün değildi. Yazarlar soruları uyarlıyormuş gibi görünen anketler hazırlayabiliyordu, ancak bu her permütasyon için ayrı sorular ve hangi soruların görüntüleneceğine karar vermek için karmaşık koşullar gerektiriyordu.

Doğrulama

Sorular Düzenli ifadelerle, en küçük/en büyük değerlerle doğrulanabiliyordu veya bir yanıtın en küçük ya da en büyük değer olarak kullanılması sağlanabiliyordu. Ancak gelişmiş JavaScript olmadan, doğrulamalar diğer değişkenlerin hesaplamalarına dayandırılamıyordu.

Denklemler

Gelişmiş JavaScript olmadan denklemler desteklenmiyordu.

Denklem Soru Türü

Gelişmiş JavaScript olmadan denklemler (ör. bir değerlendirmenin nihai puanı) veritabanına kaydedilemiyordu.

Expression Manager Bu İşlevselliği Nasıl Değiştirecek/Genişletecek?

Expression Manager, LimeSurvey içindeki yeni bir çekirdek modüldür ve eskiden özel JavaScript gerektiren türde karmaşık işlevselliği desteklemeyi çok daha kolay hale getirir. Aynı zamanda LimeSurvey'in şu anda Koşulları ve Değerlendirmeleri yönetme biçiminin yerini almaktadır.

Expression Manager (EM) ile İlgili Yeni Terminoloji

EM işlevselliğini şu terimlerle "düşünür":

  • İlintiye Dayalı Dallanma - bir soru ilintiliyse sorulur, değilse sorulmaz (ör. görünmez yapılır ve veritabanında NULL olarak işaretlenir). Tüm Soru türleri için ve ayrıca her Grup için yeni bir İlinti alanı vardır (böylece aynı koşulu her soruya kopyalamak zorunda kalmadan bir koşul kümesini tüm gruba uygulayabilir ve/veya grup ve soru düzeyindeki koşullu mantığı birleştirebilirsiniz).
  • Uyarlama - Hangi soruların sorulması gerektiğini bildikten sonra, uyarlama (bazen piping olarak da adlandırılır) sorunun nasıl sorulacağını belirler. Bu, yalnızca basit yer değiştirmeyi ({TOKEN:FIRSTNAME} gibi) değil, katılımcılarınızın cinsiyetine veya sayısına göre fiil çekimini ve ad çekimini de desteklemenizi sağlar. Ayrıca diğer sorulara yanıt verip vermediklerine (veya nasıl yanıt verdiklerine) göre katılımcıya ileteceğiniz iletiyi değiştirmenize olanak verir.
  • Denklemler - EM, bir İfadenin sonucunu saklayan Denklem adlı yeni bir soru türü ekler. Bu denklem sonuçları, sayfada gizleseniz bile hesaplanır ve veritabanına yazılır. Bu nedenle gizli puanlama hesaplamaları, karmaşık denklemlere dayalı gezinti, değerlendirmeler ve veritabanında oluşturulması ve kolayca erişilebilir olması gereken raporlar için yararlıdırlar.

İlinti ve Basamaklı İlinti

Artık her soru türünde, sorunun görüntülenip görüntülenmeyeceğini denetleyen bir İlinti seçeneği vardır. EM, İlinti Denklemlerinin her birini anket içinde görünmeleri gereken sırayla işler. İfade doğruysa (veya eski anketleri desteklemek için eksikse) soru görüntülenir. İlintisiz ise soru gizlenir ve değer veritabanında NULL yapılır. Bir grupta ilintili soru yoksa grubun tamamı atlanır.

Ayrıca, bir ifadedeki değişkenlerden herhangi biri ilintisizse ifade her zaman yanlış olarak değerlendirilir. Bu, Basamaklı İlinti özelliğini sağlar; böylece her soru için çok uzun İlinti denklemleri yazmanız gerekmez.

Q1-Q5 olmak üzere 5 sorunuz olduğunu ve Q2'yi yalnızca Q1 yanıtlandıysa, Q3'ü de yalnızca 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 zamandır evlisiniz?
Q5 Q4 {Q1}, kaç çocuğunuz var?

İlinti hesaplamaları JavaScript'te de çalışır; dolayısıyla yukarıdaki soruların tümünü tek sayfaya koyabilirsiniz ve yine beklendiği gibi çalışır. Hatta EM, Anket, Grup ve Her Seferinde Tek Soru anket biçimlerinin işlenme şeklini tamamen değiştirir. Artık hepsi tamamen aynı gezinti motorunu kullanır; bu nedenle anket biçeminden bağımsız olarak aynı şekilde çalışırlar.

Aynı sayfada olduğunuz sürece, girdiğiniz veriler yine orada olur, yalnızca gizlenir. Dolayısıyla bazı bilgiler girip ardından onları ilintisiz yapan bir seçenek seçerseniz, sonra yeniden ilintili hale getirirseniz yanıtlarınız hâlâ kullanılabilir olacaktır. Ancak farklı bir sayfaya geçer geçmez, veri kümesinin bütünlüğü için tüm ilintisiz yanıtlar kaybolur.

Grup Düzeyinde İlinti

Expression Manager ayrıca grup düzeyinde uygunluğu da destekler. Bu, döngü oluşturmayı kolaylaştırır. Örneğin, en fazla 10 varlık (ürünler veya bir hanedeki kişiler gibi) hakkında bilgi toplamak istediğinizi varsayalım; önce kaç varlık için takip yapılması gerektiğini belirlersiniz (örneğin hanede kaç kişinin yaşadığını sorarak veya katılımcılardan uzun bir listeden hangi ürünleri beğendiklerini işaretlemelerini isteyerek). 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 uygunluk kullanabilirsiniz. Her grubun içinde soru düzeyinde koşullu mantık da kullanabilirsiniz (örneğin her kişi için cinsiyete veya yaşa özgü takip soruları). Hangilerinin gösterileceğini belirlemek için soru düzeyindeki ve grup düzeyindeki uygunluk denklemleri AND ile birleştirilir.

Uyarlama / Aktarma

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 LimeReplacementFields alanlarına, tüm 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 düzinelerce işleve (istemci tarafında bile dinamik olarak çalışan) erişebilir.

Bu denklemleri kullanarak şunlar gibi şeyler 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ğerlendirmeler modülünün kendisini kullanmadan, bu sonuçlara göre değerlendirme sonuçlarını göstermek (veya koşullu olarak dallandırmak ya da ileti göstermek)
  3. Sorularda, yanıtlarda ve raporlarda fiilleri çekimlemek ve isimleri hallere göre ç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. Boilerplate sorularına benzer, ancak görüntülenenin değerini veritabanında saklar. Dolayısıyla Denklem sorusunun yazısı bir Değerlendirme hesaplaması içeriyorsa, bu değer veritabanında, genel veya özel istatistiklerde görüntülenebilen bir değişkende saklanır.

Bu, Değerlendirme puanlarının veritabanında saklanmasıyla ilgili sık yapılan bir isteği çözer.

Sözdizimi

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

İfadelerin, açılış küme parantezinden sonra veya kapanış küme parantezinden önce boşluk bulunmadığı sürece birden çok satıra yayılmasında sakınca yoktur. Bu, aşağıdaki gibi iç içe if() deyimleri için özellikle 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',
               ''
             )
           )
         )
       )
     )
   )
 )
)}
Expression Manager 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 şu eşdeğerleri: lt,le,eq,ne,gt,ge)
  • Parantezler (alt ifadeleri gruplayabilmeniz için)
  • Koşullu işleçler (ör. &&,| | ve şu eşdeğerleri: and,or)
  • Tek ve çift tırnaklı dizgeler (her biri diğer tırnak türüne sahip dizgeleri içerebilir)
  • Virgül işleci (ifade listesi oluşturup yalnızca son sonucu döndürebilirsiniz)
  • Atama işleci (=)
  • Önceden tanımlı değişkenler (soruları, soru özniteliklerini ve yanıtları belirtmek için) - ör. tüm SGQA kodları
  • Önceden tanımlı işlevler (şimdiden 70'ten fazla var ve yenilerini 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 AND
8 or mantıksal OR
9 = atama işleci
10 , virgül işleci

Artı işleci (+) ile ilgili uyarı

JavaScript ile 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 dizgeler ise birleştirme yapar. Bununla birlikte, amacınızı daha net ortaya koyduğu ve dizge beklerken sayı almanız (veya tersi) durumunda beklenmedik sonuçlardan kaçındığı için birleştirme için join() işlevini, toplama için sum() işlevini kullanmanızı öneririz.

Sayı ile dizge uyuşmazlığı ve alfabetik karşılaştırma ile ilgili uyarı

Değerleri göreli veya eşitlik karşılaştırmalarıyla karşılaştırmak istediğinizde tür uyuşmazlığına dikkat edin. Kullanıcı tarafından girilen değer veya seçilen yanıt kodu, açıkça bir sayıysa sayı olarak kullanılabilir. Değerlerden birini " ile çevrelerseniz karşılaştırma metin olarak (alfabetik karşılaştırma) yapılır. Sayısal olarak karşılaştırmak istiyorsanız sayıyı asla tırnak işaretleri, ", ile çevrelemeyin.

Örneğin Q0.NAOK değeri 9 olan sayısal bir soruysa Q0.NAOK > "50" doğrudur. Bunun nedeni, > işlecinin karşılaştırmayı sayısal değil alfabetik kabul etmesidir.

Tamsayı değerini kesin olarak karşılaştırmak için intval(Q0.NAOK) > 50 kullanabilirsiniz; yalnızca Q0.NAOK bir sayı değilse (boş veya dizge ise) intval(Q0.NAOK) == 0 olacağını unutmayın. Dizge değerini ("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 ancak NULL yapılması gereken sorular veya atlanan ancak 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 onu kullanıma sunduk.

Sizi bu işleç konusunda uyarmak için, sözdizimi denklemlerinde kırmızı yazı tipiyle gösterilir (böylece "==" ile karıştırmazsınız).

Atama İşlecini Kullanma

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

  • Denklem yoluyla varsayılan değer kabul etmeyen bir soru için varsayılan değeri ayarlamanız gerekir (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). 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
  • Karmaşık bir kota gerekir: kota için gizli bir tekli seçim kullanıp atama ile ayarlamak
  • vb...

Bu amaçla Expression Manager sisteminin tamamını kullanabilirsiniz.

  Atama yalnızca PHP'de yapılır. Bu işlem aynı sayfadaki hiçbir değeri güncellemez; yalnızca kullanıcı sonraki, önceki, kaydet … ile gezindiğinde güncellenir.


  Bu amaçla bir denklem sorusu türü kullanmazsanız atama yalnızca geçerli sayfanın mantığı işlendikten sonra yapılır. Önerilen yöntem her zaman bir denklem sorusu kullanmaktır.


Bazı örnekler:

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

XSS güvenliği

XSS etkinleştirildiğinde, ifade yöneticisi sisteminin bazı özellikleri kullanılamaz:

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

Örnek ve çözüm yolu

  • {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

İfade Yöneticisi, ihtiyaç duyabileceğimiz tüm değişkenlere salt okunur erişim sağlar. Geriye dönük uyumluluk için aşağıdakilere erişim sunar:

  • TOKEN:xxx - bir kodun (token) değeri (örn. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (Yalnızca anonim OLMAYAN anketlerde).
  • QCODE.shown - İfade Yöneticisi kullanılarak bir yanıtın görüntülenen değeri (örn. "Evet").
  • Şablonlar tarafından kullanılan tüm {XXX} değerleri.
  • Soru yazısında, soru kimliği ile değiştirilen {QID} ve sorunun SGQA değeri ile değiştirilen {SGQ} ifadelerini kullanabilirsiniz.

Ayrıca İfade Yöneticisi, değişkenlere Soru kodu (veri tabanındaki sorular tablosunda yer alan 'title' sütunu) ile başvurmanıza olanak tanır. 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 mümkün kılar.

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

Ayrıca İfade Yöneticisi, 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 yazı 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 yazı 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 ya da başka bir sayfada tanımlanmış olmasından bağımsız olarak 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

  Bu sorun 2.05 build 140803 sürümünden sonra giderilmiştir


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

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

HTML düzenleyici kullanırsanız şunları kullanmanız gerekir:

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

Qcode değişken adlandırması

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

 QuestionCode . '_' . SubQuestionCode . '_' . ScaleId

Alt soru kodunun ve ölçek kimliğinin kullanılıp kullanılmayacağı soru türüne bağlıdır - aşağıdaki tabloya bakın. Açıklama ve diğer için soru kodları 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, seçenek düğmeleri Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Dizi (10 noktalı seçim), seçenek düğmeleri Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Dizi (5 noktalı seçim), seçenek 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üşüş), seçenek düğmeleri Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Dizi (çoklu esnek) 1 - 10 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), seçenek düğmeleri Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Hazır 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 listesi 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/seçenek düğmeli liste Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Açıklamalı liste, açılan liste/seçenek düğmeli liste + 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, seçenek düğmeleri Q29 {Q29} {Q29.shown} {Q29=='Y'}

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 ya da puanları toplamak gibi. Başka zamanlarda ise bir sorunun yalnızca belirli satırlarını veya sütunlarını işlemek istersiniz (örneğin 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 yalnızca "Tüm soru geçerliliği denklemi" ve "Alt soru geçerliliği denklemi" gelişmiş soru seçenekleri içinde kullanılır. Bu sorulardaki her hücrenin değişken adlarına genişletilir. Yani 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' ve 'that' değişkenleri daha güçlüdür ve denklemler işlenmeden önce genişletilen makrolar olarak çalışır. Sözdizimi seçenekleri şunlardır:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix

suffix (son ek), normal qcode son eklerinden herhangi biridir (örn. NAOK, value, shown)

sub-selector şunlardan biridir:

  • comments - yalnızca açıklama olan alt sorular (örn. açıklamalar ile birkaç seçenek ve açıklamalı liste sorularından)
  • nocomments - yalnızca açıklama olmayan alt sorular
  • sq_X - X bir satır veya sütun tanımlayıcısıdır. Yalnızca X örüntüsüyle eşleşen alt sorular seçilir. Aramanın tam kod tanımlayıcısı üzerinde yapıldığını, ardından sq_X eşleşmesinin nX, X, Xn alt sorularını da kapsadığını unutmayın (örn. sq_1 kullanırsanız a1, 1a, 1, 11 veya 001 alt soruları dahil edilir). Alt soru kodlarının QCODE_SQCODE_1 ve QCODE_SQCODE_1 olduğu çift ölçekli soru türüne ve alt soru kodlarının QCODE_1, QCODE_2 ... olduğu sıralama sorusu türüne dikkat edin.
  • nosq_X - X bir satır veya sütun tanımlayıcısıdır. Yalnızca X örüntüsüyle eşleşmeyen alt sorular seçilir. Aramanın tam kod tanımlayıcısı üzerinde yapıldığını, ardından nosq_X eşleşmesinin nX, X, Xn alt sorularını kapsamadığını unutmayın.

Örnekler:

  • Sorunun herhangi bir bölümü 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ı ve 1-5 sütunları olan 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 'self' değişkenine benzer, ancak diğer sorulara başvurmanızı sağlar. Sözdizimi şöyledir:

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

qname, herhangi bir alt soru uzantısı olmayan soru adıdır. Örneğin 'q1' adlı bir soru oluşturduysanız, qname budur.

Örnekler:

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

'self' ve 'that' değişkenleri herhangi bir ilinti, geçerlilik veya uyarlama (tailoring) işleminde kullanılabilir.

Tek uyarı şudur: Mantık dosyasını göster özelliğini kullandığınızda, 'self' ve 'that' değişkenlerinin genişletilmiş değeri gösterilir. Bu, oluşturulacak gerçek denklemi görmenizi ve (sizin ile İfade Yöneticisi'nin) değişkenlerin var olduğunu doğrulamasını sağlar. Oldukça uzun denklemler görebileceğiniz için bu kafa karıştırıcı görünebilir. Ancak soruyu düzenlerseniz, 'self' ve/veya 'that' kullanan özgün denklemi görürsünüz.

Ayrıca, (a) bir denklemde kullanılan her değişkeni açıkça adlandırmak istiyorsanız veya (b) alt sorusu olmayan değişkenler (ör. tek yanıtlı sorular) kullanıyorsanız bu değişkenleri kullanmamanız gerektiğini unutmayın. Bu durumlarda bir değişkenin önüne 'that' eklemek gereksizdir ve beklenmedik sonuçlar alma riskiyle karşı karşıya kalırsınız.

NAOK Kullanımı

NAOK --> "Not Applicable" (NA; Uygulanamaz) olması sorun değildir (OK)

NAOK kullanmak, değişkenlerin tamamının veya bir kısmının ilgisiz olabileceği anlamına gelir (ör. "Not Applicable" (NA; Uygulanamaz) olması sorun değildir (OK)).

Bir sorudaki herhangi bir değişkeni bir denkleme eklediğinizde: bu soru (veya alt soru) bir koşul nedeniyle gizliyse, denklemin tamamı devre dışı kalır.

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

NAOK olmadan: bir soru veya bir alt soru gizliyse Expression Manager her zaman boş bir dize döndürür, bu da false döndürmekle aynıdır.

.shown her zaman NAOK sistemini kullanır (gizliyse boş dize döner), ancak cevabın koduna ihtiyacınız varsa, Soru kodunun ardından .NAOK eklemek her zaman iyi bir fikirdir. Yalnızca buna ihtiyaç duyuyorsanız ve ne yaptığınızı biliyorsanız bunun dışında kalabilirsiniz.

Başka bir örnek ve bilgi için Kademeli Koşulların Geçersiz Kılınması bölümüne bakın.

Fonksiyonlara Erişim

Expression Manager, aşağıda gösterildiği gibi matematiksel, dizeye yönelik ve kullanıcı tanımlı fonksiyonlara erişim sağlar. Bu fonksiyonların PHP ve JavaScript karşılıkları vardır; 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 eğik çizgilerle tırnaklar 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 Miladi takvimde geçerli bir tarih ise doğru (1) değerini döndürür bool checkdate(month,day,year)
convert_value Sayısal değerlerden oluşan bir giriş tablosu ve çıkış 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) sağ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 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ı tekrar 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 (Updated in 3.0.2 ) 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 kayan noktalı sayı 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) Elemanları 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) sağlayan sorulardan, belirtilen soru özelliğinin (retProp) 'glue' ile ayrılmış listesini döndürür string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log Sayının verilen tabana göre logaritması; taban verilmemişse doğal logaritması. number log(number,base=e)
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 yeni satırlardan ö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 kurallı bir ifadeyle 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 Hemen her İngilizce metinsel 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) sağ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 karakterini büyük harfe çevirir 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ğerlendirilen İşlevler

Planlanan (veya değerlendirilen) ancak henüz uygulanmamış diğer işlevler aşağıda verilmiştir. Bunlardan bazıları başka bir anket aracıyla geriye dönük uyumluluk içindir.

Söz dizimi Anlamı Açıklamalar
e() e değerini döndürür
formatDate(X,PAT) X tarihinin dize değerini, Java tarih biçimi deseni PAT'a göre biçimlendirilmiş olarak döndürür
formatNumber(X,PAT) X sayısının dize değerini, Java sayı biçimi deseni PAT'a göre biçimlendirilmiş olarak döndürür
getAnsOption(X) Çekirdek eklenti ExpressionAnswerOptions
getAnsOption(X,Y) Çekirdek eklenti ExpressionAnswerOptions
getRelevance(X) X sorusunun ilinti denklemini döndürür
getStartTime() görüşmenin başlatıldığı andaki sistem saatine karşılık gelen tarihi döndürür
getType(X) veri türünün dize adını döndürür - örn. isNA() ise *NA*
gotoFirst() ilgili ilk soru kümesine atlar - bu, sistemin normal akışını bozar
gotoNext() ilgili sonraki soru kümesine atlar - bu, sistemin normal akışını bozar
gotoPrevious() ilgili önceki soru kümesine atlar - bu, sistemin normal akışını bozar
isAsked(X) yanıt *NA*, *INVALID* ya da *UNASKED* değilse true döndürür
isInvalid(X) yanıt *INVALID* türündeyse true döndürür
isNA(X) yanıt *NA* türündeyse true döndürür
isNotUnderstood(X) yanıt *HUH* türündeyse true döndürür
isRefused(X) yanıt *REFUSED* türündeyse true döndürür
isSpecial(X) yanıt *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* ya da *HUH* türündeyse true döndürür
isUnknown(X) yanıt *UNKNOWN* türündeyse true döndürür
jumpTo(X) adı verilen soruyu içeren gruba atlar -- bu, sistemin normal akışını bozar
jumpToFirstUnasked() sorulmamış ilk soruya atlar böylece daha önce yanıtlanmış soruları atlar bu, sistemin normal akışını bozar
lastIndexOf(X,Y) Y dizesinin X dizesindeki son dizinini (0 tabanlı) döndürür. Y, X içinde yer almıyorsa -1 döndürür
list(X,...) pozitif değerlerin virgülle ayrılmış listesini içeren bir dize; son iki değer "ve" ile ayrılır
mean(X,...) bir değer listesinin ortalamasını döndürür
numAnsOptions(X) X sorusunun sahip olduğu yanıt seçeneklerinin sayısını döndürür
orlist(X,...) pozitif değerlerin virgülle ayrılmış listesini içeren bir dize; son iki değer "veya" ile ayrılır
parseDate(X,PAT) X dizesinin Java tarih biçimi deseni PAT ile ayrıştırılmış tarih değerini döndürür
parseNumber(X,PAT) X dizesinin Java sayı biçimi deseni PAT ile ayrıştırılmış sayısal değerini döndürür
showAllResponsesExcept( questionList,attributeList,attributeTitleList) questionList = dikey çizgiyle ayrılmış soru tanımlayıcıları listesi; attributeList = dikey çizgiyle ayrılmış öznitelikler listesi (soru no, başlık, metin, tür gibi - böylece neyin gösterileceğine siz karar verebilirsiniz); attributeTitleList = dikey çizgiyle ayrılmış tablo başlıkları listesi, böylece rapor uluslararasılaştırılabilir.
showTheseResponses( questionList,attributeList,attributeTitleList) questionList = dikey çizgiyle ayrılmış soru tanımlayıcıları listesi; attributeList = dikey çizgiyle ayrılmış öznitelikler listesi (soru no, başlık, metin, tür gibi - böylece neyin gösterileceğine siz karar verebilirsiniz); attributeTitleList = dikey çizgiyle ayrılmış tablo başlıkları listesi, böylece rapor uluslararasılaştırılabilir.

Expression Manager Hangi Değişkenlerin Yerel Olduğunu Bilir

Sayfanın JavaScript kodunu doğru biçimde oluşturabilmek için Expression Manager'ın sayfada hangi değişkenlerin ayarlandığını ve JavaScript kimliklerinin ne olduğunu (örn. document.getElementById(x) için) bilmesi gerekir. Ayrıca hangi değişkenlerin diğer sayfalarda ayarlandığını da bilmelidir (böylece gerekli <input type='hidden' value='x'> alanlarının mevcut ve dolu olduğundan emin olabilir).

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

İşleç Örnek a b Sonuç
+ (unary) +a N/A false
! !a N/A false
== (veya eq) a == b N/A 5 false
== (veya eq) a == b N/A 0 false
== (veya eq) a == b N/A N/A false
!= (veya ne) a != b N/A 5 false
!= (veya ne) a != b N/A N/A false
!= (veya ne) a != b N/A 0 false
> (veya gt) a > b N/A 5 false
>= (veya ge) a >= b N/A 5 false
< (veya lt) a < b N/A 5 false
<= (veya 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
işlev sum(a,b,b) N/A 5 false
işlev max(a,b) N/A 5 false
işlev min(a,b) N/A 5 false
işlev implode(', ',a,b,a,b) N/A 5 false
işlev if(a,a,b) N/A 5 false
işlev is_empty(a) N/A false
işlev is_empty(a) 0 (veya boş) true
işlev !is_empty(a) N/A false

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

Tüm ilgili yanıtların güncel toplamını 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'))) biçimine çevrilir. Dolayısıyla q1-qN değerlerinden herhangi biri ilgisizse denklem her zaman false döndürür. Bu durumda sum(), tüm sorular yanıtlanana kadar 0 gösterir.

Bunu aşmak için her değişkene ".NAOK" son eki eklenebilir (Not Applicable is OK, yani "Uygulanamaz olması sorun değil" anlamına gelir). Bu durumda aşağıdaki 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 ilgisiz tekil yanıtlar yok sayılır, ancak ifadenin tamamını geçersiz kılmaz).

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

.NAOK son eki, yazarların birkaç olası yola sahip ancak daha sonra ortak yollarda birleşen anketler tasarlamasına da olanak tanır. Örneğin katılımcılar bir ankete olağan yanıt aralığının dışında yanıt veriyor olsun. Yazar, katılımcıları geçerli sonuçlar alamayabilecekleri konusunda uyarabilir ve anketle gerçekten devam etmek isteyip istemediklerini sorabilir. Evet derlerse kalan sorular gösterilir. "Kalan sorular" için koşul, ilk yanıtların olağan aralıkta olup olmadığını VEYA katılımcının yalnızca olağan aralığın dışında yanıt verdiyse ilgili olan soruya Evet deyip demediğini denetler.

Expression Manager Koşullu Mikro Uyarlamayı Nasıl Destekler?

İşte bir mikro uyarlama örneği (burada Soru türü=='expr' bir Denklem anlamına gelir):

Soru kodu İlinti 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),'young',if( (age>80),'old','middle-aged') ) } olduğunuz için devam edemezsiniz.
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 yesno {name}, {age} yaşında olduğunuzu ve {numKids} çocuğunuz olduğunu belirttiniz. İlk {min(numKids,5)} çocuğunuzun yaşları toplamı {sumage}

Bu soruların tümü tek bir sayfada (örn. 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 sayfada dinamik olarak güncellenir.

Expression Manager bu işlevselliği, 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 onlarca, hatta yüzlerce böyle uyarlanmış ifade bulunabilir ve sayfa hepsini tek bir ekran yenilemesinde yeniden görüntüler.

LimeSurvey 1.91+ İşlevselliğinin Expression Manager İşlevselliğiyle Eşleştirilmesi

Eski özellik Yeni özellik Açıklamalar
Koşullar İlinti Çok karmaşık koşullu denklemler kullanabilir ve daha geniş bir değişken yelpazesine erişebilirsiniz
Değerlendirmeler Denklem Tüm değerlendirme puanları bir Denkleme dönüştürülebilir. Bu, puanın veritabanına yazılmasını sağlar ve ayrıca puan değerindeki değişiklikleri geçerli sayfada dinamik olarak görmenizi sağlar
Yerine koymalar Expression Manager Çekirdek motor girdi dizesini alır ve küme parantezleri içindeki her şeyi bir İfade olarak ele alır - böylece tüm geçmiş yerine koyma türlerini işler. Gömülü JavaScript'i bozmamak için Expression Manager, küme parantezleri içeriğini yalnızca (a) küme parantezlerinin içinde baştaki ya da sondaki boşluk yoksa işler - örn. {expr} bir ifadedir, ancak { expr}, {expr } ve { expr } ifade değildir. Ayrıca Expression Manager kendi dizeleri içindeki içeriği işlemez (örn. {list('hi','there {braces}')} "hi there {braces}" üretir). Kaçışlı küme parantezlerini de yok sayar (örn. \{this is not an expression\})
Doğrulama Expression Manager Plan, mevcut en az/en çok Soru öznitelikleri alınıp Expression Manager tarafından işlenmesidir. Böylece en az/en çok değerleri de ifade olabilir

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 Vurgulama Türleri ve Anlamları

Renk Örnek Anlamı Araç ipucu Açıklamalar
ten rengi arka plan Örnek denklemin tamamı yok Süslü parantezler içinde ve denklem olarak tanınan her şey (örneğin başında veya sonunda boşluk yoksa), çevresindeki metinden ayırt edilmesi için ten rengi arka planla renklendirilir
kalın kırmızı metin Örnek Bir hata Hata hakkında bir açıklama Bilinmeyen bir değişken veya bir işlevde hata olabilir, .... Anket tamamen bozulmuş olabilir, bu durum genel kullanıcıya gösterilmez.
mavi metin Örnek işlev adı anlamı ve izin verilen söz dizimi İşlev adları veya ardından açılış parantezi geldiği için işlev olması gereken öğeler kalın mavi metinle gösterilir. Araç ipuçları işlevin anlamını ve izin verilen söz dizimini gösterir.
gri metin Örnek dizi yok Tek ve çift tırnaklı diziler gri metinle gösterilir
camgöbeği metin Örnek aynı sayfada ayarlanan değişken, [ad veya SGQA kodu]: soru; değer; her değer için kodları gösteren yanıt listesi Geçerli soruyla aynı sayfada ayarlanan her değişken camgöbeği metinle gösterilir; bu, değişkenin JavaScript'te güncellenebileceğini belirtir. 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şlemesi de gösterilir.
yeşil metin Örnek önceki bir sayfada ayarlanan değişken [ad veya SGQA kodu]: 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 metinle 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şlemesi de gösterilir.
kalın pembe metin Örnek sonraki bir sayfada ayarlanan değişken genel olarak: anket başlangıcında boştur, ancak dizin veya önceki sayfaya gitme ile doldurulabilir [ad 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 metinle 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şlemesi de gösterilir.
kalın ten rengi metin Örnek bir Lime yer tutucu değeri değer Lime yer tutucu dizeleri ({TOKEN:xxx}, {PRIVACY_MESSAGE} gibi) kalın ten rengi metinle gösterilir.
kırmızı metin Örnek atama işleci (=) uyarı iletisi Atama işleçlerinden (=) birini kullanırsanız bu işleç kırmızı metinle gösterilir. Bu, a == b olup olmadığını denetlemek isterken yanlışlıkla a = b şeklinde değer atamanızı önlemeye yardımcı olur.
normal siyah metin Örnek noktalama yok İfade içindeki diğer tüm noktalama işaretleri normal siyah metinle gösterilir.
kırmızı kutulu metin hatanın çevresinde kalın kırmızı bir çizgi bulunur söz dizimi hatası hatanın açıklaması Algılanan tüm söz dizimi hataları, hatanın çevresine kırmızı bir kutu çizilerek 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 işleç eksikliği), salt okunur bir değişkene yeni değer atanmaya çalışılması, değişken olmayan öğelere değer atanmaya çalışılması veya desteklenmeyen söz dizimi kullanılması yer alır. Söz dizimi hatası algılama sisteminin, birden çok hata olsa bile bir ifadede yalnızca bir hata bildirebileceğini unutmayın; ancak herhangi bir hata algılanırsa en az bir hata gösterilir.

Ek Okumalar

Expression Manager örnek anketleri

Kullanım Senaryoları ve Nasıl Yapılır Kılavuzları

Adım Adım Örnekler

Expression Manager istatistik işlevleri

Geliştiriciler İçin Başvuru Kılavuzu

Yol Haritası/Durum/Yapılacaklar Listesi