Rolf B: Variable an schon geladenes JQuery übertragen

Beitrag lesen

Hallo Kerstin,

mal angenommen, $allefototage wäre ein zweidimensionales Array. Auf der ersten Indexstufe die fid, auf der zweiten Indexstufe die Fototage. $allefototage[42][3] wäre dann der vierte Eintrag für den Fotografen mit ID 42.

Es ist übrigens nicht so sinnvoll, JavaScript-Variablen mit einem $ beginnen zu lassen. In PHP ist das Pflicht, in JavaScript machen das manche, um anzuzeigen, dass die Variable ein von jQuery geliefertes Set enthält. Aber im Normalfall setzt man kein $ vorneweg.

Was einem auch gelegentlich das Leben leichter macht ist die String-Interpolation von PHP (String parsing). In Strings, die in doppelte Anführungszeichen gesetzt sind, sucht PHP nach Variablennamen und ersetzt sie durch ihren Wert. Das ist besser lesbar als viele Stringverkettungen mit .

Die Funktion implode ist nützlich, um alle Einträge in einem Array zu einem String zusammenzufassen. In deinem Fall müssen die Array-Einträge in einfache Anführungszeichen gesetzt sein, deswegen muss man ein bisschen zaubern.

<script>
	//Umschreiben der PHP-Arrays $allefototage[$fid][] in Javascript-Arrays $disabledDates[][]:
	var disabledDates = [];
<?php
	foreach($fgliste as $fid) {
		if (!empty($allefototage[$fid])) {
      $dd = "'" . implode("', '", $allefototage[$fid]) . "'";
    }
    echo "disabledDates[$fid] = [$dd];"; 
	}
?>
</script>

Solange Du sicher bist, dass in deinen Werten kein doppeltes Anführungszeichen vorkommt, kannst Du es Dir mit den JSON-Funktionen von PHP und JavaScript noch leichter machen. json_encode erzeugt im PHP aus $allefototage einen JSON-codierten String. JSON_HEX_APOS sorgt dafür, dass ein eventuelles ' Zeichen so codiert wird dass es keinen JavaScript-Error gibt. Dieser String wird in JSON.parse('...') eingesetzt und vom JSON-Interpreter in JavaScript in ein Array zurückverwandelt. Es mag bei leeren Einträgen zu Unterschieden kommen - das hängt davon ab wie deine $allefototage Einträge für unverbuchte Fotografen aussehen. Ggf. braucht dein change-Handler dann eine Anpassung dazu, wie man mit Fotografen ohne Eintrag umgeht.

<?= ... ?> ist übrigens die Kurzform von <?php echo ...; ?>

<script>
   var disabledDates = JSON.parse('<?= json_encode($allefototage, JSON_HEX_APOS) ?>');
</script>

Noch ein Hinweis zum Zusammenbauen deiner <option> Elemente. Das ist sehr schwer lesbar, weil da HTML und PHP intensiv vermischt werden. Hier empfehle ich eine Trennung in Aufbereitung und Ausgabe.

    while(...) {
       $fgID = $rowFg['FotografenID'];
       $fgName= $rowFg['FotografVorname'] . ' ' . $rowFg['FotografNachname'];
       $fgliste[] = $fgID;
       echo "<option value='$fgID'>$fgID - $fgName</option>";
    }

Rolf

--
sumpsi - posui - clusi