propiedades javascript php jquery datepicker

javascript - propiedades - datepicker html



Desactiva todas las fechas en datepicker donde id=$ id (1)

Su código actualmente crea múltiples instancias de

`$( "#datepicker9").datepicker({`

Uno para cada rango de fechas. Necesita cambiar su código para hacerlo solo una vez, entonces, fuera del ciclo while

Esto requiere que $ date_ar se defina fuera del ciclo wile también

Además, estás usando fragmentos de código php consecutivos innecesariamente

El código debería verse así

<?php include "controlreservas/conexion.php"; $id_habitacion=$_POST["id_habitacion"]; $sql1="SELECT llegada,salida,id_reserva FROM reservas where id_habitacion =''$id_habitacion''"; $query = $con->query($sql1); $dates_ar = []; if($query->num_rows>0) { while ($r=$query->fetch_array()) { $begin = new DateTime( $r["llegada"] ); $end = new DateTime( $r["salida"] ); $end = $end->modify( ''+1 day'' ); $interval = new DateInterval(''P1D''); $daterange = new DatePeriod($begin, $interval ,$end); foreach ($daterange as $date) { $dates_ar[] = $date->format("Y-m-d"); } } ?> <script> $(function() { var disabledDays = <?php echo json_encode($date_arr)?>; var date = new Date(); $( "#datepicker9").datepicker({ dateFormat: ''Y-m-d'', beforeShowDay: function(date) { var m = date.getMonth() + 1, d = date.getDate(), y = date.getFullYear(), strdate = [y,m,d].join(''-''); if (disabledDays.indexOf(strdate) == -1) { return [true, ''ui-state-active'', '''']; } return [false]; } }); }); </script> <?php } ?> <input type="text" id="datepicker9" name ="datepicker9"/>

Esto incluye el excelente punto de @ charlietfl sobre no usar implosión, pero usando

var disabledDays = <?php echo json_encode($date_arr)?>;

en lugar

Tenga en cuenta que he usado el estilo de codificación "C"

if() { while() { } }

en lugar del estilo alternativo que usaste

if(): while(): endwhile; else: endif;

Además, ningún else bloque ya que no hay nada que hacer de todos modos

Hola, tengo primero este formulario: agregareserva.php:

<form action="GUImostrarcalendario.php" method="post" name="a"> <select type="text" id="id_habitacion" name="id_habitacion" /> <option value"1">ID 1</option> <option value="2">ID 2</option></select> <input type="submit" name="a" value="Ver"/> </form>

En GUImostrarcalendario.php tengo:

<?php include "controlreservas/conexion.php"; $id_habitacion=$_POST["id_habitacion"]; $sql1="SELECT llegada,salida,id_reserva FROM reservas where id_habitacion =''$id_habitacion''"; $query = $con->query($sql1); ?> <?php if($query->num_rows>0):?> <?php while ($r=$query->fetch_array()):?> <?php $begin = new DateTime( $r["llegada"] ); $end = new DateTime( $r["salida"] ); $end = $end->modify( ''+1 day'' ); $interval = new DateInterval(''P1D''); $daterange = new DatePeriod($begin, $interval ,$end); $dates_ar = []; foreach ($daterange as $date) { $dates_ar[] = $date->format("Y-m-d"); } $disabled_dates = ''"'' . implode(''", "'', $dates_ar) .''"''; ?> <script> $(function() { var disabledDays = [<?php echo $disabled_dates; ?>]; var date = new Date(); jQuery(document).ready(function() { $( "#datepicker9").datepicker({ dateFormat: ''Y-m-d'', beforeShowDay: function(date) { var m = date.getMonth(), d = date.getDate(), y = date.getFullYear(); for (i = 0; i < disabledDays.length; i++) { if($.inArray(y + ''-'' + (m+1) + ''-'' + d,disabledDays) != -1) { //return [false]; return [true, ''ui-state-active'', '''']; } } return [true]; } }); }); }); </script> <?php endwhile;?> <?php else:?> <?php endif;?> <input type="text" id="datepicker9" name ="datepicker9"/>

Este código es para mostrar en el datepicker todas las fechas en la reserva (reservas), cuando id_habitacion (id room) es seleccionar en la entrada de seleccionar.

Este código funciona pero solo muestra en el selector de fecha el primer registro en la base de datos, por ejemplo, la tabla donde id_habitacion = 1 es:

todas las fechas en la reserva para esta identificación

Y mi código da como resultado datepicker:

Mostrar solo una fecha de reserva

Finalmente necesito el datepicker mostrar todas las fechas como en la tabla que muestro.

Gracias.