Hallo, Aileen,
hier zunächst das Beispiel mit dem ajax call, wie es hier beschrieben wurde.
forums.limesurvey.org/forum/german-forum...it-limesurvey#187399
Der javascript-Teil in der Frage "Erg" (für "Ergebnis"; die kann auch anders heißen)
Code:
<script type="text/javascript" charset="utf-8">
$(document).on('ready pjax:scriptcomplete',function(){
$.post('https://www.myServer.de/myFolder/getTermin.php' , { sid: "{SID}", gid: "{GID}", qid:"{QID}" , quotid:"19152", vorgabe:"{eqVorgabe}" }, function(data) {
$('#question{QID} input[type="text"]').val(data)
});
});
</script>
Und hier noch ein bisschen css, um den Antwortcontainer zu verstecken.
Code:
<style type="text/css">.ls-answers, .answer-container { display: none; }
</style>
Man schreibt sich also ein script in irgendeiner Web-Sprache (ich habe eben php genommen).
Dieses wird hier aufgerufen und als Parameter werden übergeben:
SID: StudienID
GID: GruppenID
QID: FragenID dieser Frage
quotid: FragenID der Frage nach dem Termin
(dies ist der einzige Wert, der angepasst werden muss)
eqVorgabe: Die Vorgabewerte mit der Funktion "list" zu einem String verknüpft.
Als Rückgabewert erhält man einen String, der für jeden Termin die Anzahl der vergebenen Plätze enthält (dreistellig mit führenden Nullen), also z.B.
002012004005 -> bei den vier Terminen sind bereits 2, 12, 4 und 5 Plätze besetzt.
Wie man das script programmiert, ist ziemlich egal; es muss nur dieses Ergebnis liefern.
Hier ist meins (schematisch):
Code:
<?php
// Zunächst Verbindung zur Datenbank; ich benutze hier z.B. die Bibliothek "meekrodb"
//Da kann man ja das gewohnte benutzen "mysqli, pdo, ..."; meekrodb ist auch nur ein wrapper für pdo.
require_once 'meekrodb.class.php';
DB::$host='myHost';
DB::$user='myUser';
DB::$password='myPasswort';
DB::$dbName='myDBName';
// Die übergebenen Parameter werden in Variablen eingelesen
$iSID = $_POST["sid"];
$iGID = $_POST["gid"];
$iQID = $_POST["qid"];
$iQuotID = $_POST["quotid"];
$iVorgabe = $_POST["vorgabe"];
// Dies ist etwas umständlich; ich will damit nur die Anzahl der möglichen Termine erhalten
$iVorgabe=str_replace("(","",$iVorgabe);
$iVorgabe=str_replace(")","",$iVorgabe);
$iVorgabe=str_replace(" ","",$iVorgabe);
$aVorgabe=explode(",",$iVorgabe);
// Der SGQA Code der Tabellenspalte wird zusammengebaut
$iFQuoteID=$iSID.'X'.$iGID.'X'.$iQuotID;
//Jetzt erfolgt für jeden Termin (Code) die Abfrage nach der Anzahl und die Zusammenstellung des Ergebnisstrings
$result="";
for ($i=1;$i<=count($aVorgabe);$i++) {
$daten[$i] = DB::queryFirstRow("SELECT count(".$iFQuoteID.") as Zahl FROM lime_survey_".$iSID." WHERE (submitdate is not NULL) AND (".$iFQuoteID."=".$i.")");
$result.=str_pad($daten[$i]['Zahl'],3,"0",STR_PAD_LEFT);
}
// Rückgabe
echo $result;
?>
Bedenke: Dieses Beispiel war für das Szenario mit einer Warteliste.
Ich habe es so gelassen, weil es eine zusätzliche Möglichkeit bietet.
Im nächsten Beispiel, mit dem plugin, zeige ich dann, wie man bereits gefüllte Termine gar nicht zur Auswahl anbietet.
Joffm