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

Langage PHP Discussion :

Calendrier semaine, pas encore au point


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Calendrier semaine, pas encore au point
    Bonjour à tous,

    Il y a quelque temps j'avais utilisé dans l'état un script de semainier, fait en php4, par NicomakM et paru dans codes-sources.
    Dernièrement j'ai repris ce script, pour un autre projet basé sur une structure php5 MVC.
    Il fallait par conséquent que j'en fasse une classe car le semainier est utilisé à de nombreux endroits pour des usages différents.
    Le résultat contient beaucoup de redondances que je n'arrive pas encore à simplifier.
    Mais le problème essentiel réside dans le fait que ma requête n'affiche que les résultats du lundi (array => [0]), de plus elles sont répercutées sur les colonnes de tous les autres jours de la même semaine.
    Alors qu'en faisant un var_dump j'affiche bien les tableaux (array) des jours de la semaine, dont les dates s'incrémentent bien en faisant défiler les semaines.
    Je demande humblement aux connaisseurs qui le veulent bien des petits conseils et des idées pour simplifier mes formulation et surtout pour arriver à décomposer le tableau des jours de la semaine dans la classe affichage.

    Par avance merci
    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
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    <?php
     
    class Outil_Semainier {
     
        /*retrouver le lundi d'une semaine et d'une année choisies */
        public static function debutSem($n,$year){  	
            $n--;
            /* On ajoute les semaines et on retire 3 jours pour passer de jeudi à lundi */
            $timesp=(strtotime("first Thursday january $year +$n weeks -3 days" ));
            /* On ne réutilise pas $year car la semaine 1 peut commencer l'année précédente, example en 2008 */
            $datedeb = strftime("%Y-%m-%d ",$timesp);
                return $datedeb;
            }
     
     
        /* Jours fériés */
        public static function joursFeries(){			
            $num_annee = date("Y") ;
            $date_paque = date("Y-m-d", easter_date($num_annee));
            /* Jours fériés flottants */
            $ferie = explode("-", $date_paque);
            $lundi_paque = date('Y-m-d',mktime(0, 0, 0, $ferie [1], $ferie [2]+1, $ferie [0]));
            $ascencion = date('Y-m-d',mktime(0, 0, 0, $ferie [1], $ferie [2]+39, $ferie [0]));
            $pentecote = date('Y-m-d',mktime(0, 0, 0, $ferie [1], $ferie [2]+50, $ferie [0]));
            /* Jours fériés fixes */
            $jourDeLan = $num_annee.'-01-01';
            $travail = $num_annee.'-05-01';
            $armist_45 = $num_annee.'-05-08';
            $feteNat = $num_annee.'-07-14';
            $assompt = $num_annee.'-08-15';
            $toussain = $num_annee.'-11-01';
            $armist_18 = $num_annee.'-11-11';
            $noel = $num_annee.'-12-25';        
            $jourAnpre = ($num_annee + 1).'-01-01'; /* un jour de plus au cas ou le 1er Janvier se trouve en semaine 52 */
            /* Le tout dans un tableau pour la comparaison avec foreach */
            $lesFeries = array( $lundi_paque, $ascencion, $pentecote, $jourDeLan, $travail, $armist_45, $feteNat, $assompt, $toussain, $armist_18, $noel, $jourAnpre);
                return $lesFeries;
            }
     
     
        /* Navigation et liens semaines */
        public static function navig(){      	
            $id = $_GET['id'];            				
            $num_semaine = date("W") ;
            $num_annee = date("Y") ;    
            if (isset($_GET['semainier']))			  
            {$semainier = $_GET['semainier'];}
            else
            {$semainier = $num_semaine;}
            setlocale (LC_TIME, 'fr_FR.utf8');
     
            $date_debut = self::debutSem($semainier,$num_annee);       
    	/* Formatage des dates de navigation, lundi et dimanche  */ 						
            $semaine = explode("-", $date_debut);
            $date_lundi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2], $semaine [0]));
            $date_dimanche = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+6, $semaine [0]));       
            $Lun = strftime("%a %d %B",strtotime("$date_lundi"));
            $Dim = strftime("%a %d %B",strtotime("$date_dimanche"));
            /* Les 52 semaines et les liens années */
            for ($s = 1 ; $s <= 52 ; $s++)
            {
                if ($semainier>52){           
                {$semainier =1;}
                {$num_annee =$num_annee +1;}            
                }
                elseif ($semainier<1)            
                {
                {$semainier =52;}
                {$num_annee =$num_annee -1;}
                }          
                $avant = ($semainier+1);
                $arriere = ($semainier-1);
            }      
            $navig=<<<EOT
                <h4>
                <a href="index.php?a=agendaMembre&id={$id}?bd=membre&semainier={$arriere}&an={$num_annee}"><<&nbsp;Prev&nbsp;</a>
                &nbsp;&nbsp;Semaine&nbsp; {$semainier},&nbsp;from {$Lun} to {$Dim}&nbsp;&nbsp;{$num_annee}&nbsp;&nbsp;
                <a href="index.php?a=agendaMembre&id={$id}?bd=membre&semainier={$avant}&an={$num_annee}">&nbsp;&nbsp;Next&nbsp;>></a>
                </h4>           
    EOT;
                return $navig;
        }
     
     
        /* Entête jours de semaine */
        public static function enteteSemainier(){ 
            $num_semaine = date("W") ;					
            if (isset($_GET['semainier']))
                {$semainier = $_GET['semainier'];}
            else
                {$semainier = $num_semaine;}        
            if (isset($_GET['an']))
                {$num_annee = $_GET['an'];}
            else
                {$num_annee = date("Y") ;}
            $aujourdhui = date("Y-m-d");
            setlocale (LC_TIME, 'fr_FR.utf8'); 
     
    	/* Jours de la semaine et dates à utiliser */     
            $date_debut = self::debutSem($semainier,$num_annee);
            $semaine = explode("-", $date_debut);
            $date_lundi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2], $semaine [0]));
            $date_mardi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+1, $semaine [0]));
            $date_mercredi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+2, $semaine [0]));
            $date_jeudi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+3, $semaine [0]));
            $date_vendredi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+4, $semaine [0]));
            $date_samedi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+5, $semaine [0]));
            $date_dimanche = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+6, $semaine [0]));   
     
    	/* formatage pour l'affichage des jours de la semaine (entête des jours) */
            $Today = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$aujourdhui"));
            $lundi = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_lundi"));
            $mardi = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_mardi"));
            $mercredi = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_mercredi"));
            $jeudi = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_jeudi"));
            $vendredi = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_vendredi"));
            $samedi = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_samedi"));
            $dimanche = strftime("%a&nbsp;%d&nbsp;/&nbsp;%m",strtotime("$date_dimanche"));
     
            $lesFeries = self::joursFeries();    
     
            for ($d=1; $d<=7; $d++)
            {
            switch ($d) {
            case 1: $jour = $lundi;     $date_jour = $date_lundi;       break;         
            case 2: $jour = $mardi;     $date_jour = $date_mardi;       break;                                    
            case 3: $jour = $mercredi;  $date_jour = $date_mercredi;    break;                 
            case 4: $jour = $jeudi;     $date_jour = $date_jeudi;       break;                   
            case 5: $jour = $vendredi;  $date_jour = $date_vendredi;    break;
            case 6: $jour = $samedi;    $date_jour = $date_samedi;      break;
            case 7: $jour = $dimanche;  $date_jour = $date_dimanche;    break; 
             }           
                /* extraction jours fériés */
                foreach ($lesFeries as $value) {        
                    if ($value==$date_jour)
                    {$date_jour = $jour;}               
                }            
                        if ($date_jour==$jour ){ 
                            /* coloration jour férié */              
                            $html.="<th class=ferie>";         
                            $html.="$jour";
                            $html.="</th>";  
                            }
                            elseif ($jour==$Today ){ 
                                /* coloration jour "aujourdh'hui" */             
                                $html.="<th class=today>";     
                                $html.="$jour";
                                $html.="</th>";  
                         }else{                                  
                            $html.="<th>";
                            $html.="$jour";
                            $html.="</th>"; 
                            }                                 
            }               
                                return $html;                 
         }
     
     
        /* colonnes agenda jours */
        public static function agendaSemainier(){           
            $id = $_GET['id'];           					
            $num_semaine = date("W") ;
            if (isset($_GET['semainier']))
                {$semainier = $_GET['semainier'];}
            else
                {$semainier = $num_semaine;}       
            if (isset($_GET['an']))
                {$num_annee = $_GET['an'];}
            else
                {$num_annee = date("Y") ;}
     
    	/* Dates calendrier jours semaine */    
            $date_debut = self::debutSem($semainier,$num_annee, $dateJour);
            $semaine = explode("-", $date_debut);   //returns the calendar week, and the substring week days
            $date_lundi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2], $semaine [0]));
            $date_mardi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+1, $semaine [0]));
            $date_mercredi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+2, $semaine [0]));
            $date_jeudi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+3, $semaine [0]));
            $date_vendredi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+4, $semaine [0]));
            $date_samedi = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+5, $semaine [0]));
            $date_dimanche = date("Y-m-d",mktime(0, 0, 0, $semaine [1], $semaine [2]+6, $semaine [0]));  
     
            for ($d=1; $d<=7; $d++)
            {
                switch ($d) {
                case 1: $date_jour = $date_lundi;       break;
                case 2: $date_jour = $date_mardi;       break;
                case 3: $date_jour = $date_mercredi;    break;
                case 4: $date_jour = $date_jeudi;       break;
                case 5: $date_jour = $date_vendredi;    break;
                case 6: $date_jour = $date_samedi;      break;
                case 7: $date_jour = $date_dimanche;    break;
                }                  
                    //$date_jour= array(1 =>$date_lundi, $date_mardi, $date_mercredi, $date_jeudi, $date_vendredi, $date_samedi, $date_dimanche);          
                    return $date_jour;
            }
        }  
     
    } /* Fin classe Outil_Semainier*/
     
     
     
    // Requête sql à partir de la classe membre_Bd
    ##############################################
    /*    static public function lireAgendaMembre() {        
            $date_jour=Outils_Agenda::agendaSemainier();      
            $query ="
                SELECT * from membre
                WHERE date= '{$date_jour}' 
                group by debut";
            $db = Outils_Bd::getInstance()->getConnexion();
            $res = $db-> query($query);
            $tableau = $res->fetchAll(PDO::FETCH_ASSOC);
            $lireAgendaMembre = array();
               foreach ($tableau as $item) {
               $lireAgendaMembre[] = membre::initialize($item);
               }
            return $lireAgendaMembre;
      }
    
    
    // Calendrier généré à partir de la classe affichage
    ####################################################
        public function navigationSemaines(){
            $id=$this->membre->getId();       
            $navigation=Outils_Agenda::navig();       
            $navi = <<<EOT
                <span>{$navigation}</span>
    EOT;
                return $navi;
        }   
        
        public function enteteTableau($CSSclass="") {
            $jour=Outils_Agenda::enteteSemainier();
            $html="<th>Horaires</th>";
            $html.="{$jour}";
                return $html;
        } 
    
        public function afficherLigne() {   
            $id=$this->membre->getId();                  
            $debut=$this->membre->getDebut();
            $fin=$this->membre->getFin();
            $date=$this->membre->getDate();
            $occupation=$this->membre->getOccupation();     
            $lundi=Outils_Agenda::agendaSemainier($this->membre->getLundi());
            $mardi=Outils_Agenda::agendaSemainier($this->membre->getMardi());
            $mercredi=Outils_Agenda::agendaSemainier($this->membre->getMercredi());
            $jeudi=Outils_Agenda::agendaSemainier($this->membre->getJeudi());
            $vendredi=Outils_Agenda::agendaSemainier($this->membre->getVendredi());
            $dsamedi=Outils_Agenda::agendaSemainier($this->membre->getSamedi());
            $dimanche=Outils_Agenda::agendaSemainier($this->membre->getDimanche());         
            $html="<tr><td>$debut&nbsp;-&nbsp;$fin</td>";
            $html.="<td>$lundi $occupation </td>";    
            $html.="<td>$mardi $occupation </td>";    
            $html.="<td>$mercredi $occupation </td>";
            $html.="<td>$jeudi  $occupation  </td>";   
            $html.="<td>$vendredi $occupation  </td>";  
            $html.="<td>$samedi $occupation  </td>";     
            $html.="<td>$dimanche  $occupation  </td>";  
            $html.="</tr>";
                return $html;
    
        }
    */   
    ?>

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    J'ai pas trop regarder ton code , mais tu mélange affichage et logique , ce n'est à mon avis pas une bonne idée.

    Commence par une classe qui génère un tableau (array) des dates de ta semaine.

    Puis à partir de là tu génère ton html.

    Tu peux t'inspirer de ce que j'utilise dans Pry mon framework :
    https://github.com/grunk/Pry/tree/master/Pry/Date

    En gros ça permet de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $date = new Weeks(date('W'),2013); //Init à la semaine en cours
    var_dump($date->getBoundaries()); // Retourne un tableau avec les timestamp de lundi et dimanche
    var_dump($date->computeDays()); // Retourne un tableau avec les timestamp de tous les jours de la semaine
    var_dump($date->computeNextPrev()); // Retourne un tableau avec les semaine et années précédente/suivnate
    var_dump($date->getMysqlDays()); // Retourne les jours de la semaine au format mysql
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Ça c'est classe !
    Merci pour tes lumières. C'est clair et précis, je vais suivre tes conseils.

Discussions similaires

  1. Mouse Hook (pas encore au point)
    Par Morgatte dans le forum Dev-C++
    Réponses: 0
    Dernier message: 18/02/2012, 20h54
  2. Réponses: 12
    Dernier message: 02/01/2006, 23h24
  3. $GET_['tmp'] quand tmp n'existe pas encore ?
    Par sunshine33 dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2005, 13h33
  4. Séquence pas encore définie dans cette session
    Par hair_peace dans le forum Oracle
    Réponses: 2
    Dernier message: 03/11/2005, 18h04
  5. [jonas] presque presque... mais pas encore
    Par stailer dans le forum JOnAS
    Réponses: 6
    Dernier message: 26/05/2004, 11h59

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