IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Datepicker : rendu selon disponiblilité


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut Datepicker : rendu selon disponiblilité
    Hello,

    Pourriez-vous svp m'aider sur une condition d'affichage de dates disponibles ou non dans mon datepicker.

    Les variables :
    arrival : contient toutes les dates d'arrivées des réservations
    departure : contient les dates de départ
    activeDays : contient les jours entre l'arrivée et le départ.

    Les règles:
    le vendredi doit rester activé car il peut y avoir un départ et une arrivée (demi-jour)
    le lundi : idem
    le dimanche : si celui-ci est le jour du départ alors désactivé sinon activé

    Un montage photo sera plus parlant
    Nom : Untitled-2.jpg
Affichages : 117
Taille : 130,0 Ko

    Dans mon code, j'ai essayé de lister les dimanches dans la variable "n".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var n = [];
                departure.forEach(function(item){
      		    n.push((new Date(item)).getDay());
    	        });
    J'ai voulu appliquer un style par cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (departure.indexOf(currentdate)  > -1 && n.indexOf(0) > -1)
    			{
    				events = [false, ''];
    			}
    Mais cela ne fonctionne pas car si le rendu désactive bien le dimanche, il désactive également toutes les dates de départ.

    Du coup comment faire ?

    en vous remerciant pour l'aide

    et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    <script>
      var activeDays = <?php echo json_encode($activeDays); ?>;
      //var activeDays = ["7-6-2018", "7-7-2018", "7-8-2018", "7-12-2018", "7-13-2018", "7-14-2018"]; 
      var arrival = <?php echo json_encode($arrayArrival); ?>;
      //var arrival = ["7-6-2018", "7-12-2018"];
      var departure = <?php echo json_encode($arrayDeparture); ?>;
     //var departure = ["2018-10-18", "2018-10-11"];
     
    $( function() {
        var dateFormat = "dd/mm/yy",
          from = $( "#from" )
            .datepicker({
    		  firstDay: 1,	
              dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa" ],
    		  monthNames: [ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre" ],
    		  monthNamesShort: [ "Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Aout", "Sep", "Oct", "Nov", "Déc" ],
    		  dateFormat : "dd/mm/yy",
              changeMonth: true,
              numberOfMonths: 3,
    		  beforeShowDay: function(date) {
                var events = [true,''];
                var m = date.getMonth();
    			var d = date.getDate();
    			var y = date.getFullYear();
    			var currentdate = y + '-' + (m+1) + '-' + d ;
                var n = [];
                departure.forEach(function(item){
      		    n.push((new Date(item)).getDay());
    	        });
     
     
    			if ( activeDays.indexOf(currentdate)  > -1)  
                {
                    events = [false,''];
    			}
     
    			if ( arrival.indexOf(currentdate)  > -1) 
    			{
                    events = [true,'isActivedArrival'];
    			}
     
     
     
     
    			if (departure.indexOf(currentdate)  > -1 && n.indexOf(0) > -1)
    			{
    				events = [false, ''];
    			}
     
     
    			if ( arrival.indexOf(currentdate) > -1 && departure.indexOf(currentdate) >-1) 
    			{
                    events = [false,''];
    			}
     
     
     
                return events;
             }
     
     
     
            })
            .on( "change", function() {
              to.datepicker( "option", "minDate", getDate( this ) );
            }),
          to = $( "#to" ).datepicker({
    		firstDay: 1,  
            dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa" ],
    		  monthNames: [ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre" ],
    		  monthNamesShort: [ "Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Aout", "Sep", "Oct", "Nov", "Déc" ],
    		dateFormat : "dd/mm/yy",
            changeMonth: true,
            numberOfMonths: 3,
    		beforeShowDay: function(date) {
                var events = [true,''];
                var m = date.getMonth();
    			var d = date.getDate();
    			var y = date.getFullYear();
    			var currentdate = y + '-' + (m+1) + '-' + d ;
                var n = [];
                departure.forEach(function(item){
      		    n.push((new Date(item)).getDay());
    	        });
     
     
     
    			if ( activeDays.indexOf(currentdate)  > -1)  
                {
                    events = [false,''];
    			}
     
    			if ( arrival.indexOf(currentdate)  > -1) 
    			{
                    events = [true,'isActivedArrival'];
    			}
     
                if (departure.indexOf(currentdate)  > -1 && n.indexOf(0) > -1)
    			{
    				events = [false, ''];
    			}
     
    			if ( arrival.indexOf(currentdate) > -1 && departure.indexOf(currentdate) >-1) 
    			{
                    events = [false,''];
    			}
     
     
     
                return events;
            }
     
     
          })
          .on( "change", function() {
            from.datepicker( "option", "maxDate", getDate( this ) );
          });
     
        function getDate( element ) {
          var date;
          try {
            date = $.datepicker.parseDate( dateFormat, element.value );
          } catch( error ) {
            date = null;
          }
     
          return date;
        }
      } );
      </script>

  2. #2
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    les gars je rame à mort là-dessus.

    Je reprend avec un exemple plus simple.

    Voici le code d'un datepicker Jquery quasi vierge de toutes fonctionnalités hormis le BeforeShowDay.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>jQuery UI Datepicker - Restrict date range</title>
      <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
      <link rel="stylesheet" href="/resources/demos/style.css">
      <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
      <script>
      
      var arrival = ["2018-12-17", "2018-12-21"];
      var activeDays = ["2018-12-18", "2018-12-19", "2018-12-20", "2018-12-22"]; 
      var departure = ["2018-12-21", "2018-12-23"];
      var depSunday = [5,0]; //la conversion des dates de fin en jour de semaine
      
      
      
      $( function() {
        $( "#datepicker" ).datepicker({ 
         firstDay: 1,       
              
                      beforeShowDay: function(date) {
                      var events = [true,''];
                      var m = date.getMonth();
                      var d = date.getDate();
                      var y = date.getFullYear();
                      var currentdate = y + '-' + (m+1) + '-' + d ;
                    //var dep = new Date(currentdate).getDay();
                            
                            
                            if ( activeDays.indexOf(currentdate)  > -1)  
                        {
                            events = [false,''];
                                    }
                            
                            
                            
                            if ( arrival.indexOf(currentdate)  > -1) 
                                    {
                            events = [true,'isActivedArrival'];
                                    }
                            
                            
                            if (depSunday.indexOf(0) > -1)
                                    {
                                            events = [false, ''];
                                    }
                                    
                                            
                            return events;
                            }
                                    
        
        });
        
      
      } );
      </script>
    </head>
    <body>
     
    <p>Date: <input type="text" id="datepicker"></p>
     
     
    </body>
    </html>

    Les variables:
    arrival = dates d'arrivée
    departure = date de fin
    activeDays = date entre l'arrivée et la fin
    departureSunday = la conversion des dates de fin en jour de semaine

    Je ne comprend pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    if ( activeDays.indexOf(currentdate)  > -1)  
           {
                 events = [false,''];
    	}
    me désactive bien les jours en fonctions des dates contenues dans la variable activeDays

    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (depSunday.indexOf(0) > -1)
    	{
    	events = [false, ''];
    	}
    me désactive tous les jours alors qu'il ne devrait désactiver qu'un seul jour en l'occurrence la date de fin qui tombe un dimanche.

    Help please

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    montre nous ton fichier css
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <link rel="stylesheet" href="/resources/demos/style.css">
    pour que l'on puisse faire un teste en locale...

  4. #4
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Merci.

    Il y a juste ceci pour tester dans le css

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .isActivedArrival a.ui-state-default{
    	/*background:url(../icons/fd.png);*/
    	background-color:#ff7bf9;
     
     
     
    }
    .isActivedDeparture a.ui-state-default{
    	/*background:url(../icons/fg.png);*/
    	background-color:#ff7bf9;

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    si tu met un return, ça donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (depSunday.indexOf(0) > -1)/*dans ce cas, cette condition est toujours vrai, c'est pour ça qu'il désactive tout les jours*/
    {
    	return [false, ''];
    }

  6. #6
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (depSunday.indexOf(0) > -1)/*dans ce cas, cette condition est toujours vrai, c'est pour ça qu'il désactive tout les jours*/
    {
    	return [false, ''];
    }
    tous les jours sont désactivés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rendu des images redimensionnées différent selon navigateur
    Par predalpha dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/04/2014, 15h39
  2. [PHP 5.4] [OOP] "Rendu" d'un objet selon le contexte
    Par psychomatt dans le forum Langage
    Réponses: 3
    Dernier message: 04/03/2014, 21h29
  3. Rendu de site différent sous IE selon le serveur pour un même code.
    Par CPCHalf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/10/2010, 23h57
  4. Réponses: 6
    Dernier message: 22/10/2010, 20h59
  5. Rendu d'affichage des bordures différents selon navigateurs
    Par Arnaud F. dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 15/07/2009, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo